use of grails.core.GrailsDomainClassProperty in project grails-core by grails.
the class DataBindingUtils method assignBidirectionalAssociations.
/**
* Associations both sides of any bidirectional relationships found in the object and source map to bind
*
* @param object The object
* @param source The source map
* @param domainClass The DomainClass for the object
*/
public static void assignBidirectionalAssociations(Object object, Map source, GrailsDomainClass domainClass) {
if (source == null) {
return;
}
for (Object key : source.keySet()) {
String propertyName = key.toString();
if (propertyName.indexOf('.') > -1) {
propertyName = propertyName.substring(0, propertyName.indexOf('.'));
}
if (domainClass.hasPersistentProperty(propertyName)) {
GrailsDomainClassProperty prop = domainClass.getPropertyByName(propertyName);
if (prop != null && prop.isOneToOne() && prop.isBidirectional()) {
Object val = source.get(key);
GrailsDomainClassProperty otherSide = prop.getOtherSide();
if (val != null && otherSide != null) {
MetaClass mc = GroovySystem.getMetaClassRegistry().getMetaClass(val.getClass());
try {
mc.setProperty(val, otherSide.getName(), object);
} catch (Exception e) {
// ignore
}
}
}
}
}
}
Aggregations