コンバートならびにバリデートに独自のコマンド(処理クラス)を追加する

Attribute定義を用いたコンバート(文字変換)処理やバリデート(入力規則)処理は、
標準処理の他に独自にコマンドを追加して機能を拡張することができます。

コンバート(文字変換)処理用の独自コマンドを追加する

概説

Attribute定義のconvertタグ内に記述できる独自の変換コマンドを追加します。 (Attribute記述イメージ)

    <attribute id="SAMPLE" name="サンプル">
     <conversion>

      <変換コマンドA 属性="{設定値}" />

      <変換コマンドB>
       <サブタグ 属性="{設定値}" >
      </変換コマンドB>

     </conversion>
    </attribute>
  
💡属性やSubTagは任意に追加できますが、属性をもつタグはSubTagを持てません。 読込まれた設定内容
SAMPLE:{
 name:サンプル,
 conversion:{
  変換コマンドA:{属性={設定値}, ...}},
  変換コマンドB:[{属性={設定値}, ...}, {属性={設定値}, ...} ...]
}

処理クラスを作成する

処理クラスは≪Interface≫jp.co.cam.usax.rule.engine.validate.ConverterIFを実現してください。
※jp.co.cam.usax.rule.engine.validate.converter.AbstractConverterにて実装を簡略化できます。 (実装例)

    /**
     * 文字変換クラス実装例。
     */
    public class OriginSample
        extends AbstractConverter
    {
        @Override
        protected void execute(
            final String pmCode
          , final String pmText
        )
            throws RuleException
        {
            // 変換ルールの取得
            @SuppressWarnings("unchecked")
            final Map<String, String> data = super.getConf("変換コマンドA");

            if (data != null) {
            // 変換ルールがある場合

                // DataBean
                final DataBeanIF bean = super.getBean();

                // タグに設定された属性を使用して文字を変換
                bean.setString(pmCode, convert(data, bean.getString(pmCode)));
            }
        }

        /**
         * 変換処理。
         * @param  pmRule 変換ルール
         * @param  pmText 文字データ
         * @return 変換結果
         */
        private static String convert(
            final Map<String, String> pmRule
          , final String pmText
        )
        {
            ...変換処理を実装
        }
    }
  

コマンドを登録する

作成した処理クラスを変換コマンドと紐付けます。
Attribute定義に"usax.rule.convert." + {変換コマンド}のIDで処理クラスを設定してください。
Attribute.xmlに設定することで、共通の処理クラスとして利用されます。
(記述例)

    <attribute id="usax.rule.convert.変換コマンドA"
     description="文字変換クラス:追加設定サンプル"
     name="jp.co.cam.usax.rule.engine.validate.converter.OriginSample" />
  
💡多言語化機能を用いて言語ごとに処理クラスを切替えることもできます。

Attribute定義に使用されているxsdに追記する

Attribute定義のattributesタグに使用されているxsdが指定されています。

    <?xml version="1.0" encoding="UTF-8"?>
    <attributes
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../cam/usax/resource/Attribute_WebEx.xsd"
  
上記xsd内の既存定義「conversion」配下にelementを追加してコマンドの記述ルールを記載してください。 (記述例)

    <xs:element name="conversion" minOccurs="0" maxOccurs="1">
     <xs:annotation>
      <xs:documentation>
       <![CDATA[データの変換ルール]]>
      </xs:documentation>
     </xs:annotation>
     <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">

       <xs:element name="変換コマンドA">
        <xs:annotation>
         <xs:documentation>
          <![CDATA[文字変換クラス追加サンプル]]>
         </xs:documentation>
        </xs:annotation>
        <xs:complexType>
         <xs:attribute name="属性" use="required">
          <xs:simpleType>
           <xs:restriction base="xs:token">
            <xs:enumeration value="選択肢1" />
            <xs:enumeration value="選択肢2" />
            <xs:enumeration value="選択肢3" />
           </xs:restriction>
          </xs:simpleType>
         </xs:attribute>
        </xs:complexType>
       </xs:element>

      </xs:choice>
     </xs:complexType>
    </xs:element>
  

バリデート(入力規則)処理用の独自コマンドを追加する

概説

Attribute定義のvalidateタグ内に記述できる独自の規則コマンドを追加します。 (Attribute記述イメージ)

    <attribute id="SAMPLE" name="サンプル">
     <validate>

      <規則コマンドA 属性="{設定値}" />

      <規則コマンドB>
       <サブタグ 属性="{設定値}" >
      </規則コマンドB>

     </validate>
    </attribute>
  
💡属性やSubTagは任意に追加できますが、属性をもつタグはSubTagを持てません。 読込まれた設定内容
SAMPLE:{
 name:サンプル,
 conversion:{
  規則コマンドA:{属性={設定値}, ...}},
  規則コマンドB:[{属性={設定値}, ...}, {属性={設定値}, ...} ...]
}

処理クラスを作成する

処理クラスは≪Interface≫jp.co.cam.usax.rule.engine.validate.ValidatorIFを実現してください。
※jp.co.cam.usax.rule.engine.validate.validator.AbstractValidatorにて実装を簡略化できます。 (実装例)

    /**
     * 入力規則クラス実装例。
     */
    public class OriginSample
        extends AbstractValidator
    {
        @Override
        protected void execute(
            final String pmCode
          , final String pmText
        )
            throws RuleException
        {
            // 入力規則定義
            final Map<String, Object> rule = super.getConf("規則コマンドA");

            // DataBean
            final DataBeanIF bean = super.getBean();

            …入力規則定義に沿ってデータの妥当性を確認する
        }
    }
  

コマンドを登録する

作成した処理クラスを変換コマンドと紐付けます。
Attribute定義に"usax.rule.validate." + {規則コマンド}のIDで処理クラスを設定してください。
Attribute.xmlに設定することで、共通の処理クラスとして利用されます。
(記述例)

    <attribute id="usax.rule.validate.規則コマンドA"
     description="入力規則クラス:追加設定サンプル"
     name="jp.co.cam.usax.rule.engine.validate.validator.OriginSample" />
  
💡多言語化機能を用いて言語ごとに処理クラスを切替えることもできます。

Attribute定義に使用されているxsdに追記する

Attribute定義のattributesタグに使用されているxsdが指定されています。

    <?xml version="1.0" encoding="UTF-8"?>
    <attributes
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../cam/usax/resource/Attribute_WebEx.xsd"
  
上記xsd内の既存定義「conversion」配下にelementを追加してコマンドの記述ルールを記載してください。 (記述例)


    <xs:element name="validate" minOccurs="0" maxOccurs="1">
     <xs:annotation>
      <xs:documentation>
       <![CDATA[データの入力ルール]]>
      </xs:documentation>
     </xs:annotation>
     <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">

       <xs:element name="規則コマンドA">
        <xs:annotation>
         <xs:documentation>
          <![CDATA[文字変換クラス追加サンプル]]>
         </xs:documentation>
        </xs:annotation>
        <xs:complexType>
         <xs:attribute name="属性" use="required">
          <xs:simpleType>
           <xs:restriction base="xs:token">
            <xs:enumeration value="選択肢1" />
            <xs:enumeration value="選択肢2" />
            <xs:enumeration value="選択肢3" />
           </xs:restriction>
          </xs:simpleType>
         </xs:attribute>
        </xs:complexType>
       </xs:element>

      </xs:choice>
     </xs:complexType>
    </xs:element>
  


©Camel engineering LLP