Copying values deeply ignoring some properties

3,608 views
Skip to first unread message

Martin Dames

unread,
Feb 21, 2014, 4:18:42 AM2/21/14
to model...@googlegroups.com
Hi there,

I using ModelMapper to copy some properties from an existing object to an other ignoring some properties by using an own implementation of PropertyMap. This works fine for simple objects.

But when I like to map an object graph, the depending objects are copied as is and my PropertyMap is ignored.

Here is my mapping code:

        log.info("destination before: " + destination);
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.addMappings(new TypeMappingIgnoreLiferayAndDBProperties());
        modelMapper.map(source, destination);
       
        log.info("source: " + source);
        log.info("destination after: " + destination);


PropertyMap:

    class TypeMappingIgnoreLiferayAndDBProperties extends PropertyMap<Product, Product>
    {
        @Override
        protected void configure()
        {
            skip().setprimarykey(null);
            skip().setModifiedDateItem(null);
            skip().setCompanyid(0);
            skip().setGroupid(0);
            skip().setUserid(0);
            skip().setUsername(null);
        }
    }


My Object graph:
Products object can have many Product objects. In both objects I like to ignore the properties in my PropertyMap.

log outputs:
destination before: Products[product=[Product[string=4,integer=1,_long=1,_boolean=false,date=2014-02-21,restriction=A,base64Binary={84,101,115,116},companyid=0,groupid=0,userid=0,username=<null>,createDate=<null>,modifiedDate=<null>,primarykey=8]],companyid=10153,groupid=10179,userid=0,username=<null>,createDate=<null>,modifiedDate=2014-02-21,primarykey=4]

source: Products[product=[Product[string=5,integer=1,_long=1,_boolean=false,date=2014-02-21,restriction=A,base64Binary={84,101,115,16},companyid=0,groupid=0,userid=0,username=<null>,createDate=<null>,modifiedDate=<null>,primarykey=<null>]],companyid=0,groupid=0,userd=0,username=<null>,createDate=<null>,modifiedDate=<null>,primarykey=<null>]

destination after: Products[product=[Product[string=5,integer=1,_long=1,_boolean=false,date=2014-02-21,restriction=A,base64Binary={8,101,115,116},companyid=0,groupid=0,userid=0,username=<null>,createDate=<null>,modifiedDate=<null>,primarykey=<null>]],companyid=10153groupid=10179,userid=0,username=<null>,createDate=<null>,modifiedDate=<null>,primarykey=4]

As you can see the primary key (as an example) from source Product object is copied and therefore my PropertyMap is only be used on the Products object.

How can I tell ModelMapper to use PropertyMap deeply?

Thank you

Martin Dames

unread,
Feb 21, 2014, 5:20:22 AM2/21/14
to model...@googlegroups.com
I tried also to add two PropertyMaps, one for Products as before and another one for Product objects. So changed unfortunately nothing...


log.info("destination before: " + destination);
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.addMappings(new TypeMappingIgnoreLiferayAndDBProperties());
        modelMapper.addMappings(new TypeMappingIgnoreLiferayAndDBProperties2());

        modelMapper.map(source, destination);
       
        log.info("source: " + source);
        log.info("destination after two propertymaps: " + destination);

...

class TypeMappingIgnoreLiferayAndDBProperties extends PropertyMap<Products, Products>

    {
        @Override
        protected void configure()
        {
            skip().setprimarykey(null);
            skip().setModifiedDateItem(null);
            skip().setCompanyid(0);
            skip().setGroupid(0);
            skip().setUserid(0);
            skip().setUsername(null);
        }
    }
   
    class TypeMappingIgnoreLiferayAndDBProperties2 extends PropertyMap<Product, Product>

Jonathan Halterman

unread,
Feb 22, 2014, 3:22:53 PM2/22/14
to model...@googlegroups.com
Hi Martin,

Yes, ModelMapper should always use any PropertyMaps you define, including for deep mapping. Do you have a small self-contained test you could provide that reproduces the issue you're seeing? That would be helpful.

Cheers,
Jonathan


--
You received this message because you are subscribed to the Google Groups "modelmapper" group.
To unsubscribe from this group and stop receiving emails from it, send an email to modelmapper...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply all
Reply to author
Forward
0 new messages