Hi,
There seem to be similar issues posted previously but none of them explains this seem to be very trivial scenario. I have the typical Person/Address relationship in my entities. The person's address can be null but if there is an address, the city and zip can not be null (please take a look at the entities below). I utilize RequestFactoryEditorDriver to display/edit the person and address utilizing PersonEditor and AddressEditor respectively. I have to mention editing an existing Person with an Address works just fine so the editors are working and implemented somewhat properly.
Creating a person get done by: request.persist().using(person). If I don't provide an address before starting the driver(setValue is called with null), the PersonEditor does its job but AddressEditor's value gets ignored which is expected but not desired. If I create an address (via the same requestContext) and assign it to the person (as commented out) before creating my persist context and starting the driver, then I "have to" have an address. If I leave the city/zip empty, the editors validation detects the error and demands the fields to be set. But what if I just want to ignore the address for some persons and provide one for others.
Basically I want to choose creating an addressProxy and attaching it to the context. If the AddressEditor is empty then there is no need to create an AddressProxy, but if there is a value in the AddressEditor then the validation and flush need to work as expected.
/*
AddressProxy address = request.create(AddressProxy.class);
proxy.setAddress(address);
*/
request.persist().using(person);
here's the jest of AddressEditor
public class AddressEditor extends Composite implements HasRequestContext<AddressProxy>,
ValueAwareEditor<AddressProxy>, LeafValueEditor<AddressProxy>,
HasEditorErrors<AddressProxy> {
....
}
I tried the OptionalFieldEditor in AddressEditor as follow but I wasn't sure if I should utilize it in PersonEditor or AddressEditor
interface Driver
extends
RequestFactoryEditorDriver<AddressProxy, OptionalFieldEditor<AddressProxy, AddressEditor>> {
}
public class Person{
@NotNull
@Size(min = 3, max = 30)
@Column(name = "first_name")
private String firstName;
@NotNull
@Size(min = 3, max = 30)
@Column(name = "last_name")
private String lastName;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "address_id", unique = true)
private Address address;
}
public class Address{
@Size(min = 3, max = 64, message = "Street lenght needs to be between 3 to 64 chars")
@Column(name = "street")
private String street;
@NotNull
@Size(min = 3, max = 30)
@Column(name = "city")
private String city;
@NotNull
@Size(min = 5, max = 10)
@Column(name = "zip")
private String zip;
}
As you can tell, I have exhausted my options by implementing every possible editor interfaces and testing different scenarios.
Any help would be greatly appreciated.
Arash