0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コンポーネントプロパティのリスナー設定

Posted at

プロパティのリスナー

コンポーネントを作成するときには、プロパティを追加すると思います。
プロパティは、ユーザーにデザイナー上で値を設定してもらうことになります。
デザイナーで値が変更されるときに、何らかの処理を行いたい場合に設定するのがプロパティのリスナーになります。

PropertyListener

リスナーはデザイナーで動作しますので、xscファイルへ記述します。

<PropertyListener class="クラス" target="対象プロパティ名"/>

ここで指定するクラスは、com.infoteria.asteria.gui.property.event.PropertyChangeListener を実装したクラスである必要があります。

ちょっと面倒な感じですね。

そこで出てくるのが、SimplePropertyController です。このクラスはPropertyChangeListenerを実装してあり、xscへ記述するだけで使用できるようになっています。

さっそく使い方を見てみます。

XSCサンプル

以下は、JavaInterpreterコンポーネントで出力したカスタムコンポーネントのxscファイルを修正したものです。

<?xml version="1.0" encoding="UTF-8"?>
<ComponentDefine>
	<xsc lang="ja" xmlns="http://www.infoteria.com/asteria/flowengine/definition">
		<Component category="その他" icon="P1.png" name="Prop1Component"  displayName="プロパティ1"  toolTip="">
			<Class>com.asteria.qa.component.Prop1Component</Class>
			<Property mapping="false" name="Exception" type="exception"/>
			
			<Property name="propVisible" displayName="プロパティVisible" type="choice">
			  <ChoiceItem>
			    <Include name="All" displayName="全て表示"/>
			    <Include name="A" displayName="Aだけ表示"/>
			    <Include name="B" displayName="Bだけ表示"/>
			  </ChoiceItem>
			</Property>

			<Property name="propA" displayName="プロパティA" type="string"></Property>
			<Property name="propB" displayName="プロパティB" type="string"></Property>
			
			<PropertyListener class="com.infoteria.asteria.flowbuilder2.plugin.SimplePropertyController" target="propVisible">
				<Case value="A">
					<Target name="propA" visible="true"/>
					<Target name="propB" visible="false"/>
				</Case>
				<Case value="B">
					<Target name="propA" visible="false"/>
					<Target name="propB" visible="true"/>
				</Case>
				<Default>
					<Target name="propA" visible="true"/>
					<Target name="propB" visible="true"/>
				</Default>
			</PropertyListener>
			
			<Input accept="Text" default="Text"/>
			<Output accept="Text" default="Text"/>
		</Component>
	</xsc>
</ComponentDefine>

プロパティを3つ「propVisible、propA、propB」追加しています。
propVisibleプロパティで選択した値によって、他の2つのプロパティを表示したり、隠したりするように定義してあります。

詳しく見てみると

PropertyListenerエレメントでSimplePropertyControllerを指定しています。

<PropertyListener class="com.infoteria.asteria.flowbuilder2.plugin.SimplePropertyController" target="propVisible">

target="propVisible"とは、propVisibleプロパティが変更されたりしたらSimplePropertyControllerで何か処理をしてね!ということです。

PropertyListenerエレメントの子エレメントにCase、Defaultエレメントが定義されています。
switch分みたいですよね、まさにそのとおりです。

        <Case value="A">
            <Target name="propA" visible="true"/>
            <Target name="propB" visible="false"/>
        </Case>
         ...
        <Default>
            <Target name="propA" visible="true"/>
            <Target name="propB" visible="true"/>
        </Default>

propVisibleプロパティの値が「A」のときは、propAプロパティを表示して、propBプロパティを隠してね。いつもは両方表示してね!っということです。

値の操作

propAとpropBの値を操作するプロパティ「propValue」を追加してみます。

        <Property name="propValue" displayName="プロパティValue" type="choice">
            <ChoiceItem>
                <Include name="Clear" displayName="全てクリア"/>
                <Include name="A100" displayName="A値100"/>
                <Include name="B200" displayName="B値200"/>
            </ChoiceItem>
        </Property>

propAに値100を設定するか、propBに値200を設定するか、両方クリアするかを指定できるようにします。プロパティの設定としては選択肢があるだけです。

リスナーを追加します。
今回もclassに同じ「SimplePropertyController」を指定していますが、targetが「propValue」となっています。

        <PropertyListener class="com.infoteria.asteria.flowbuilder2.plugin.SimplePropertyController" target="propValue">
                <Case value="A100">
                        <Target name="propA" set="100"/>
                </Case>
                <Case value="B200">
                        <Target name="propB" set="200"/>
                </Case>
                <Default>
                        <Target name="propA" setNull="true"/>
                        <Target name="propB" setNull="true"/>
                </Default>
        </PropertyListener>

今回は Case/Target エレメントへ「set」アトリビュートが指定してあります。表示/非表示の場合は「visible」でした。

        <Target name="propA" set="100"/>

上記は、propAプロパティへ値「100」を設定するということです。

        <Target name="propA" setNull="true"/>

この場合は、propAプロパティへ値「null」を設定するということです。

動作確認

実際にコンポーネントをデザイナーで配置してプロパティペインを見てみます。
4つのプロパティがあるのがわかります。
1.PNG

プロパティVisibleで「Aだけ表示」を選択してみます。
2.png

プロパティBが見えなくなりました。
3.PNG

プロパティValueで「A値100」を選択してみます。
4.png

プロパティAの値に「100」が設定されました。
5.PNG
動いてますね。

まとめ

今回はPropertyListenerの一番簡単な使い方としてxscファイルで「SimplePropertyController」を使って、プロパティの表示/非表示、値を変更してみました。

他にも使い方がいろいろありますので、詳しくはコンポーネント/マッパー関数定義ファイル書式ガイドを参照してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?