blob: 3daa4656286bf76ea827cba9ed360d4198bd1f0d [file] [log] [blame]
package model.persistence;
import model.*;
import org.eclipse.persistence.descriptors.*;
import org.eclipse.persistence.mappings.converters.ObjectTypeConverter;
import org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping;
import org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping;
import org.eclipse.persistence.oxm.mappings.XMLDirectMapping;
public class MOXyDescriptorCustomizers {
public static void afterLoadEmployee(ClassDescriptor descriptor) {
XMLDirectMapping genderMapping = (XMLDirectMapping) descriptor.getMappingForAttributeName("gender");
ObjectTypeConverter converter = new ObjectTypeConverter();
converter.setFieldClassification(String.class);
converter.addConversionValue(Gender.Male.name(), Gender.Male);
converter.addConversionValue(Gender.Female.name(), Gender.Female);
genderMapping.setConverter(converter);
XMLCompositeCollectionMapping phoneMapping = (XMLCompositeCollectionMapping) descriptor.getMappingForAttributeName("phoneNumbers");
phoneMapping.setContainerAttributeName("owner");
XMLCompositeObjectMapping addressMapping = (XMLCompositeObjectMapping) descriptor.getMappingForAttributeName("address");
addressMapping.setContainerAttributeName("owner");
descriptor.getDescriptorEventManager().addListener(new FixPhonesListener());
}
public static class FixPhonesListener extends DescriptorEventAdapter {
@Override
public void postBuild(DescriptorEvent event) {
Employee emp = (Employee) event.getSource();
for (PhoneNumber phone: emp.getPhoneNumbers()) {
phone.setOwner(emp);
}
}
}
}