DTOの自動生成をサポート

DomaDTOをaptで自動生成できるようにしました。

どういうことかというと、次のようなDomaの@Entityがついたクラスをコンパイルすると、

@Entity
public interface Emp {

    @Id
    Identity id();

    Name name();

    Salary salary();
}

つぎのようなDTOを即座に自動生成するということです。

public class EmpDto implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    private java.lang.Integer id;

    private java.lang.String name;

    private java.lang.Long salary;

    // getter、setter 省略
}


CopyUtilなるユーティリティクラスを用意しているのですが、こいつでエンティティとDTOを相互変換できます。

Emp src = new Emp_(); // エンティティ
src.id().set(1);
src.name().set("aaa");
src.salary().set(100L);

EmpDto dest = new EmpDto(); // DTO
CopyUtil.copy(src, dest);

assertEquals(new Integer(1), dest.getId());
assertEquals("aaa", dest.getName());
assertEquals(new Long(100), dest.getSalary());

Domaでは、Javaの型の力を有効利用するためにあえてPOJOを捨てているのですが、この機能を使うことで簡単にPOJOインスタンスに詰め替えられます。

この機能を使って、GWTと組み合わせたデモをつくるつもり。
GWTでは、クライアントサイドで扱えるクラスに制限があるため、Domaのエンティティはそのままもっていけないんですよね。でもDTOに変換すれば大丈夫。