現在表示中:

ダイアログ変換ツールは、ExtJS に基づくクラシック UI 用のダイアログが 1 つしか定義されていない既存のコンポーネントを拡張する場合に役立ちます。このツールでは、元のダイアログを使用して、Granite UI/CoralUI に基づくタッチ操作向け UI 用の複製のダイアログを作成します。

このツールの目的は、アップグレードを(できる限り)自動化して効率を高め、エラーを削減することです。

警告:

変換結果を検証してください。場合によっては追加の調整が必要です。このツールはあらゆるシナリオに対応できるわけではありません。これは、変換ルールが包括的なものではなく、ベストエフォート型であるためです。このツールは、大部分のダイアログを変換することによって変換を促進するための補助用ツールです。

このツールは最も頻繁に使用される要素およびプロパティを変換しますが、カスタマイズまたは非常に特殊なダイアログを処理する際は変換が不完全になります。このツールはタッチ操作向け UI 用の新しいダイアログを作成しますが、変換できない項目はスキップします。そのため、作成されたダイアログには、コピー元のクラシックダイアログのノードがそのままの状態で含まれている可能性があります(その特定のウィジェットに一致するルールがない場合)。または、変換後のウィジェットで一部のプロパティが失われる可能性があります。これは、そのプロパティの変換に適したルールが存在しないためです。

ダイアログ変換ツールのダウンロードとインストール

  1. パッケージマネージャーまたはパッケージ共有からパッケージをダウンロードします。

    cq-dialog-conversion-content

  2. インスタンスにパッケージをインストールします。

ダイアログの変換

このツールは、クラシック UI 用のダイアログしか設計されていない既存のコンポーネントを拡張します。そのために、タッチ操作向け UI 用の対応するダイアログをコンテンツツリー(コンポーネント定義)内の同じ場所に作成します。

  • クラシック UI 用のダイアログ:
    • 名前:dialog
    • タイプ:cq:Dialog
  • タッチ操作向け UI のダイアログ:
    • 名前:cq:dialog

1 つ以上のダイアログを変換するには、次の手順を使用します。

  1. ツール運営からアクセス可能なダイアログ変換コンソールを開きます。

    http://<hostname>:<port-nr>/libs/cq/dialogconversion/content/console.html

    dialc5
  2. 必要なパス(例:/apps/geometrixx/components)を入力します。1 つのダイアログの直接パス(例:/apps/geometrixx/components/lead)を入力することもできます。

    dialc1
  3. ダイアログを表示」を選択して、指定した場所にあるすべてのダイアログを表示します。

    dialc2

    指定したパスの下にある(全レベルの)すべてのダイアログが表に示されます。

    • ダイアログ (クラシック UI)
      タイプが cq:Dialog で名前が dialog のすべてのノードが表示用に選択されます。
    • 各行には、次の用途のリンクがあります。
      • クラシック UI でダイアログを表示する
      • crxde(CRXDE Lite)でノード構造を確認する
    • ダイアログ (タッチ UI)
      タッチ操作向け UI 用のダイアログが作成済みの場合はここに表示されます。表示されるのは、タッチ操作向け UI のダイアログのリンクです。これは、dialog ノードに cq:dialog という名前の兄弟ノードがあるかどうかによって判断されます。タッチ操作向けのダイアログが存在する場合は、変換する項目を選択できません。

    注意:

    クラシック UI 用のダイアログがないコンポーネント(タッチ操作向け UI 用にのみ設計されているコンポーネント)は表示されません。

  4. 変換用のダイアログを 1 つ以上選択します。

    dialc3
  5. <x> 個のダイアログを変換」をタップまたはクリックしてプロセスを開始します。

    dialc4
  6. ダイアログを表示」を選択してリストに戻ります。

    dialc6

ダイアログの書き換えルール

変換ツールの実装は、グラフの書き換えの概念に基づいています。この概念では、一連の書き換えルールを適用してグラフが変換されます。あるルールが特定の部分グラフに一致する場合は、そのルールを適用して、部分グラフを置換用のグラフに置き換えます(http://en.wikipedia.org/wiki/Graph_rewriting も参照)。

ダイアログ変換ツールでは、この手法を使用して、クラシック UI 用に設計されたダイアログツリーをタッチ操作向け UI 用のダイアログツリーに書き換えます。 

通常は、1 つのダイアログの書き換えルールで 1 つのダイアログ要素(pathfield ウィジェットなど)を書き換えます。アルゴリズムによってダイアログツリーがトラバースされ、(ルールのランキングで指定された)優先順位に従って、一致する書き換えルールが適用されます。この処理は、一致するルールがなくなるまで繰り返されます(そのため、書き換えのループが作成されないように注意してください)。

書き換えルールは、次に示す 2 つの異なる方法で定義できます。

一部のルールは標準提供されていますが、独自にカスタマイズしたルール(ノードベースJava ベースの両方)を定義することもできます。

提供されている書き換えルール

ダイアログ変換ツールには、定義済みの書き換えルールがいくつか含まれています。これらのルールは、以下のクラシック UI ウィジェット(詳しくは、xtype の使用を参照)に対応しています。

button、checkbox、combobox、cqinclude、datetime、dialog、dialogfieldset、fieldset、fileuploadfield、hidden、numberfield、hidden、multifield、numberfield、panel、password、pathfield、radio、radiogroup、select、sizefield、tabpanel、tags、textfield、textarea

ノードベースの書き換えルール

ダイアログの書き換えルールは、ノードとプロパティの観点から定義できます。

rule
  - jcr:primaryType = nt:unstructured
  - cq:rewriteRanking = 4
  + patterns
    - jcr:primaryType = nt:unstructured
    + foo
      - ...
      + ...
    + foo1
      - ...
      + ...
  + replacement
    + bar
      - ...
      + ...

この例では、2 つのパターンfoo および foo1 をルートとするツリー)と 1 つのリプレースメントbar をルートとするツリー)を含むルールを定義します。このパターンとリプレースメントのツリーは、ノードとプロパティを含む任意のツリーです。定義済みのいずれかのパターンが一致すると、ルールがサブツリーに一致します。パターンを一致させるには、そのパターンと同じノードが対象となるツリーに含まれている(ルートを除いて名前が一致する)必要があります。また、パターンで定義されたすべてのプロパティがツリー上のプロパティに一致する必要があります。cq:rewriteOptionaltrue に設定することで、パターン内のノードをオプションとしてマークできます。この場合、ツリーを一致させるためにそのノードを指定する必要はありません。

一致したサブツリー(元のツリー)はリプレースメントに置き換えられます。リプレースメントツリーでは、元のツリーのプロパティの値を継承するマップ先のプロパティを定義できます。このようなプロパティは String タイプにする必要があります。形式は次のようになります。

${<path>}

参照先のプロパティが元のツリーに存在しない場合、そのプロパティはリプレースメントで省略されます。または、そのような場合のためのデフォルト値を指定できます(String タイプのプロパティの場合のみ)。

${<path>:<default>}

マップ先のプロパティには複数の値を指定できます。この場合は、元のツリーに存在する最初のプロパティの値が割り当てられます。次の例は、プロパティのマッピングを示しています。

...
  + replacement
    + bar
      - prop = ${./some/prop}
      - default = ${./non/existing:default string value}
      - multi = [${./non/existing}, ${./some/prop}]

さらに、リプレースメントツリーでは以下の特殊なプロパティ(cq:rewrite... で始まるプロパティ)がサポートされます。

  • cq:rewriteMapChildrenString
    元のツリーの参照先のノードの子を、このプロパティを含むノードにコピーします(例えば、cq:rewriteMapChildren=./items./items の子を現在のノードにコピーします)。

  • cq:rewriteIsFinalBoolean
    最適化の方法として残りの変換で無視できる最終のノードでこのプロパティを設定します。リプレースメントノード(rule/replacement)自体に設定すると、リプレースメントツリー全体が最終であると見なされます。

独自のノードベースの書き換えルールの定義

提供されている書き換えルールは次の場所で定義されます。

/libs/cq/dialogconversion/rules

次の場所に一連のルールを指定して、これらのルールを上書きできます。

/apps/cq/dialogconversion/rules

/libs/cq/dialogconversion/rules/apps にコピーしてから、既存のルールを変更するか、新しいルールをこの新しいインスタンスに追加できます

Java ベースの書き換えルール

インターフェイスの OSGi サービスを公開する Java クラスとして、さらに複雑な書き換えルールを定義できます。

com.adobe.cq.dialogconversion.DialogRewriteRule

このようなクラスでは次のメソッドを実装する必要があります。

boolean matches(Node root) throws RepositoryException;
Node applyTo(Node root, Set<Node> finalNodes) throws DialogRewriteException, RepositoryException;
int getRanking();

指定されたルートノードをルートとするサブツリーにルールが一致する場合に、matches メソッドが true を返す必要があります。ルールが一致する場合、ツリーの書き換えアルゴリズムは続いて applyTo メソッドを呼び出します。このメソッドでは、指定されたルートノードをルートとするサブツリーを書き換える必要があります。通常、このメソッドは元のツリーの名前を一時的に変更して、元のツリーの親ノードの新しい子として(元のツリーのノードとプロパティを使用して)新しいツリーを作成し、最後に元のツリーを削除します。詳しくは、com.adobe.cq.dialogconversion.DialogRewriteRule インターフェイスの Javadoc を参照してください。

その他の情報 - Javadoc

詳しくは、com.adobe.cq.dialogconversion の Javadoc を参照してください。

独自の Java ベースの書き換えルールの定義

次のクラスは、com.adobe.cq.dialogconversion.DialogRewriteRule インターフェイスを実装するカスタム書き換えルールの例を示しています。

@Component
@Service
public class CustomDialogRewriteRule implements DialogRewriteRule {
 
    public boolean matches(Node root) throws RepositoryException {
        // ...
    }
 
    public Node applyTo(Node root, Set<Node> finalNodes) throws DialogRewriteException, RepositoryException {
        // ...
    }
 
    int getRanking() {
        // ...
    }

}

または、com.adobe.cq.dialogconversion.AbstractDialogRewriteRule を次のように拡張できます。この抽象クラスは getRanking メソッドを実装し、サービスの OSGi プロパティである service.ranking を使用してルールのランキングを決定します。

@Component
@Service
@Properties({
        @Property(name="service.ranking", intValue = 10)
})
public class CustomDialogRewriteRule extends AbstractDialogRewriteRule {
 
 
    public boolean matches(Node root) throws RepositoryException {
        // ...
    }
 
    public Node applyTo(Node root, Set<Node> finalNodes) throws RewriteException, RepositoryException {
        // ...
    }
 
}

サンプルの書き換えルール

GitHub のコード

このページのコードは GitHub にあります

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー