@Override public void writeProperty(Object object, Object oldValue, Object newValue) throws PropertyException { resolveFault(object); super.writeProperty(object, oldValue, newValue); }
protected void createAttributeProperty(PersistentDescriptor descriptor, ObjAttribute attribute) { Class<?> propertyType = attribute.getJavaClass(); Accessor accessor = createAccessor(descriptor, attribute.getName(), propertyType); descriptor.addDeclaredProperty(new SimpleAttributeProperty(descriptor, accessor, attribute)); }
protected void resolveFault(Object object) throws PropertyException { try { Persistent persistent = (Persistent) object; ObjectContext context = persistent.getObjectContext(); if (context != null) { context.prepareForAccess(persistent, getName(), false); } } catch (ClassCastException e) { throw new PropertyException("Object is not a Persistent: '" + object.getClass().getName() + "'", this, object, e); } } }
protected void createEmbeddedAttributeProperty(PersistentDescriptor descriptor, EmbeddedAttribute embeddedAttribute, ObjAttribute attribute) { Class<?> embeddableClass = embeddedAttribute.getJavaClass(); String propertyPath = attribute.getName(); int lastDot = propertyPath.lastIndexOf('.'); if (lastDot <= 0 || lastDot == propertyPath.length() - 1) { throw new IllegalArgumentException("Invalid embeddable path: " + propertyPath); } String embeddableName = propertyPath.substring(lastDot + 1); EmbeddableDescriptor embeddableDescriptor = createEmbeddableDescriptor(embeddedAttribute); Accessor embeddedAccessor = createAccessor(descriptor, embeddedAttribute.getName(), embeddableClass); Accessor embeddedableAccessor = createEmbeddableAccessor(embeddableDescriptor, embeddableName, attribute.getJavaClass()); Accessor accessor = new EmbeddedFieldAccessor(embeddableDescriptor, embeddedAccessor, embeddedableAccessor); descriptor.addDeclaredProperty(new SimpleAttributeProperty(descriptor, accessor, attribute)); }
@Override public Object readProperty(Object object) throws PropertyException { resolveFault(object); return super.readProperty(object); }