Top | 戻る

AMF3用のクラスを自動生成する

  FDS を使ったアプリケーションの開発では、 Java のクラスと同じ構造のクラスを ActionScript で作成することが欠かせません。 しかし、全く同じ構造のクラスを二回も作るのは退屈で無駄な作業です。 そこで、自動生成をしてみることにします。
  自動生成をするにあたって特別なツールを用意するのはたいへんなので、 今回は Eclipse に含まれている Apache Ant を利用します。
  図1が自動生成イメージです。 Java、ActionScript のソースの代わりに XMLでクラスを定義しておき、 Apache Ant で XSL変換を実行して各言語のソースを出力します。
  この手法は、Flex に限らず様々なプログラミング言語やフレームワークで応用が可能です。
  ソース: xml2src.zip
図1 自動生成イメージ
  Ant の build.xml は、以下のように作成します。
build.xml
<?xml version="1.0" encoding="Utf-8" ?>
<project default="all">

  <!-- 出力先 -->
  <property name="outputDir" value="${basedir}/output"/>

  <target name="all" depends="generate">
  </target>

  <target name="generate">
    <xslt basedir="src"    destdir="${outputDir}/java" style="templates/Java.xsl">
        <mapper type="glob" from="*.xml" to="*.java"/>
    </xslt>
    <xslt basedir="src"    destdir="${outputDir}/flex" style="templates/AS3.xsl">
        <mapper type="glob" from="*.xml" to="*.as"/>
    </xslt>
  </target>

</project>
  以下のようにクラス定義ファイルを作成します。
Person.xml
<?xml version="1.0" encoding="Utf-8" ?>
<Class package="myproject.entities"
    name="Person" comment="人">

  <Property name="name" comment="名前" type="String"/>
  <Property name="birthDate" comment="生年月日" type="Date"/>

</Class>
  自動生成されたソースは以下のようになります。
Person.java
//////////////////////////////////////////////////////////////////////
// Ant により自動生成されたファイルです。
// 編集しないで下さい。
//////////////////////////////////////////////////////////////////////

package myproject.entities;

/**
 * 人
 */

public class Person {

    /**
     * コンストラクタ
     */

    public Person() {
        super();
    }

    /**
     * 名前
     */

    private java.lang.String name;
    
    /**
     * 名前を取得する。
     * @return 名前
     */

    public java.lang.String getName() {
        return name;
    }
    
    /**
     * 名前を設定する。
     * @param name 名前
     */

    public void setName(java.lang.String name) {
        this.name = name;
    }

    /**
     * 生年月日
     */

    private java.util.Date birthDate;
    
    /**
     * 生年月日を取得する。
     * @return 生年月日
     */

    public java.util.Date getBirthDate() {
        return birthDate;
    }
    
    /**
     * 生年月日を設定する。
     * @param birthDate 生年月日
     */

    public void setBirthDate(java.util.Date birthDate) {
        this.birthDate = birthDate;
    }

}

Person.as
//////////////////////////////////////////////////////////////////////
// Ant により自動生成されたファイルです。
// 編集しないで下さい。
//////////////////////////////////////////////////////////////////////

package myproject.entities {
    
    [Bindable]
    [RemoteClass(alias="myproject.entities.Person")]
    /**
     * 人
     */

    public class Person {
        
        /**
         * コンストラクタ
         */

        public function Person() {
            super();
        }

        /**
         * 名前
         */

        private var _name : String;

        /**
         * 名前
         */

        public function get name() : String {
            return _name;
        }

        public function set name(name : String) : void {
            _name = name;
        }

        /**
         * 生年月日
         */

        private var _birthDate : Date;

        /**
         * 生年月日
         */

        public function get birthDate() : Date {
            return _birthDate;
        }

        public function set birthDate(birthDate : Date) : void {
            _birthDate = birthDate;
        }

    }

}


Contents Copyright © Kazuhiko Arase