Hello,
I have encountered a problem with ValueComposite persistence, i.e
Property<VC> is not persisted.
Here is the code:
Value composite:
@Mixins(Address.AddressMixin.class)
public interface Address {
    String street();
    String zipcode();
    String city();
    String country();
    String asString();

    interface AddressState {
        Property<String> street();
        Property<String> city();
        Property<String> zipcode();
        Property<String> country();
    }

 class AddressMixin implements Address{
     @This AddressState state;
    public String city() {
        return state.city().get();
    }

    public String country() {
        return state.country().get();
    }

    public String street() {
        return state.street().get();
    }

    public String zipcode() {
        return state.zipcode().get();
    }
    public String asString(){
        return "country: " + country();
    }
 }
}

Entity Composite:
@Mixins(Lead.LeadMixin.class)
public interface Lead
{
    String name();
    Address address();
    void remove();
    String asString();

    public interface LeadState
    {
        Property<String> name();
        Property<Boolean> isActive();
        Property<AddressValue> address();
    }

    public class LeadMixin implements Lead {
        @This LeadState state;
        Property<Boolean> isActive;
        public void remove() {
            isActive.set(false);
        }
        public Address address() {
            return state.address().get();
        }
        public String name() {
            return state.name().get();
        }

        public String asString(){
            return "Name: " + name() + ", Address: " + address().asString();
        }
    }

}

VC creation:
@Mixins(AddressFactory.AddressFactoryMixin.class)
public interface AddressFactory {
    Address create(String country, String city, String street, String
zipcode);

    class AddressFactoryMixin implements AddressFactory {
        @Structure ValueBuilderFactory vbf;

        public Address create(String country, String city, String street,
                String zipcode) {
            ValueBuilder<Address> builder =
vbf.newValueBuilder(Address.class);
            AddressState addressState =
builder.prototypeFor(AddressState.class);
            addressState.country().set(country);
            addressState.city().set(city);
            addressState.street().set(street);
            addressState.zipcode().set(zipcode);
            Address address = builder.newInstance();
            return address;
        }

    }
}

EC creation:
@Mixins(LeadFactory.LeadFactoryMixin.class)
public interface LeadFactory {
    Lead create(String name, Address address);

    class LeadFactoryMixin implements LeadFactory {
        @Structure
        UnitOfWorkFactory uowf;

        public Lead create(String name, Address address) {
            UnitOfWork uow = uowf.currentUnitOfWork();
            EntityBuilder<Lead> builder = uow.newEntityBuilder(Lead.class);
            Lead.LeadState state =
builder.instanceFor(Lead.LeadState.class);
            state.name().set(name);
            state.address().set((AddressValue)address);
            state.isActive().set(true);
            return builder.newInstance();
        }
    }
}

Lead properties isActive and name are persisted but address not.

Jacek
_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev

Reply via email to