2016-05-31 8 views
0

2つのクラスがあります。ABの両方が会社を持っています。 Aの会社は、BCompanyidを持ち、CNCompanyはそうではありません)の会社よりも少し詳しい情報を持っています。 orikaを使用してすべてのフィールドをマップしたいと思います。オブジェクトのすべてのフィールドがnullの場合、オブジェクトをnullにします。Orika - オブジェクトのすべてのフィールドがnullの場合、オブジェクトをnullにマップします。

これをユニットテストで表現しようとしました。これを稼働させるためには何が必要ですか?

public class A { 

    private Company company; 

    public Company getCompany() { 
     return company; 
    } 

    public void setCompany(Company company) { 
     this.company = company; 
    } 

} 

public class B { 

    private CNCompany company; 

    public CNCompany getCompany() { 
     return company; 
    } 

    public void setCompany(CNCompany company) { 
     this.company = company; 
    } 

} 

public class Company { 

    private Id id; 
    private AccountId accountId; 

    public Id getId() { 
     return id; 
    } 

    public void setId(Id id) { 
     this.id = id; 
    } 

    public AccountId getAccountId() { 
     return accountId; 
    } 

    public void setAccountId(AccountId accountId) { 
     this.accountId = accountId; 
    } 

} 

public class CNCompany { 

    private AccountId accountId 

    public AccountId getAccountId() { 
     return accountId; 
    } 

    public void setAccountId(AccountId accountId) { 
     this.accountId = accountId; 
    } 

} 

public class MyMapper extends ConfigurableMapper { 
    @Override 
    protected void configure(MapperFactory factory) { 
     factory.classMap(A.class, B.class) // 
       .mapNulls(false).mapNullsInReverse(false) // 
       .byDefault() // 
       .register(); 
    } 
} 

@Test 
public void testMap() throws Exception { 
    A a = new A(); 

    Company company = new Company(); 
    Id id = new Id(); 
    id.setValue("1"); 
    company.setId(id); 
    a.setCompany(company); 

    MyMapper myMapper = new MyMapper(); 
    B outcome = myMapper.map(a, B.class); 

    assertThat(outcome.getCompany(), is(nullValue())); 
} 

答えて

0

私が正しく理解していればあなたはCompanyオブジェクトがNULL値のみが含まれている場合getCompanynullを返すようにしたいです。

オリカでは、の変換custom converterで制御できます。以下のようなものに見えるかもしれませんあなたの例:

public class CompanyConverter extends CustomConverter<Company, CNCompany> { 
    public CNCompany convert(Company source, Type<? extends CNCompany> destinationType) { 
     if (isNothingButNulls(source)) { 
      return null; 
     } 
     final CNCompany newCompany = new CNCompany(); 
     // do your thing 
     return newCompany; 
    } 
} 

を私はnullを返すことができるCustomConverterを書いたことがないので、私はこれが動作する100%わからないが、それはする必要があります。コンバータはまだ登録する必要があることに注意してください。私がリンクしているドキュメントは、コンバータをどのレベルにするかによって、登録方法を示しています。

+0

問題はisNothingButNulls(source)メソッドです。私はすべての子(子どもの子など)をトラバースして、それらがヌルであるかどうかをチェックする必要があります。 – Chris311

+0

私の頭の上から離れて、私はあなたが子供の上を反復し、ヌルをチェックするために反射を使うことができると思います。私はそれが簡単な部分だったと思っていましたが、今私はそれについてもっと考えています。それは少し痛みを伴うでしょう。 – kab

+0

はい、私もそうだと思います。ちょうどあなたが他のオブジェクト(カスケード)のオブジェクト/特定のオブジェクトの異なる種類のためにこれをしたいと想像して... – Chris311

関連する問題