public ArcProperty getComplimentaryReverseArc() { return (ArcProperty) targetDescriptor.getProperty(complimentaryReverseArcName); }
public ArcProperty getComplimentaryReverseArc() { return reverseName != null ? (ArcProperty) targetDescriptor.getProperty(reverseName) : null; }
public ArcProperty getComplimentaryReverseArc() { return reverseName != null ? (ArcProperty) targetDescriptor .getProperty(reverseName) : null; }
/** * Recursively looks up property descriptor in this class descriptor and all * superclass descriptors. */ public PropertyDescriptor getProperty(String propertyName) { PropertyDescriptor property = getDeclaredProperty(propertyName); if (property == null && superclassDescriptor != null) { property = superclassDescriptor.getProperty(propertyName); } return property; }
public PropertyDescriptor getProperty(String propertyName) { checkDescriptorInitialized(); return descriptor.getProperty(propertyName); }
/** * Returns property descriptor for specified property. * * @param properyName * path to the property * @return property descriptor, <code>null</code> if not found */ public static PropertyDescriptor getProperty(Persistent object, String properyName) { ClassDescriptor descriptor = getClassDescriptor(object); if (descriptor == null) { return null; } return descriptor.getProperty(properyName); }
/** * Creates an accessor to read a map key for a given relationship. */ protected Accessor createMapKeyAccessor(ObjRelationship relationship, ClassDescriptor targetDescriptor) { String mapKey = relationship.getMapKey(); if (mapKey != null) { return new PropertyAccessor(targetDescriptor.getProperty(mapKey)); } return IdMapKeyAccessor.SHARED_ACCESSOR; }
private void fillReverseRelationship(Object destinationTarget, ArcProperty property) { ArcProperty clientProperty = (ArcProperty) targetDescriptor.getProperty(property.getName()); if (clientProperty != null) { ArcProperty clientReverse = clientProperty.getComplimentaryReverseArc(); if (clientReverse instanceof ToOneProperty) { clientReverse.writeProperty(destinationTarget, null, target); } } }
public boolean visitAttribute(AttributeProperty property) { PropertyDescriptor targetProperty = targetDescriptor .getProperty(property.getName()); targetProperty.writeProperty(target, null, property.readProperty(source)); return true; } });
private PropertyDescriptor propertyForId(Object nodeId, String propertyName) { ClassDescriptor descriptor = context.getEntityResolver().getClassDescriptor( ((ObjectId) nodeId).getEntityName()); return descriptor.getProperty(propertyName); }
private PropertyDescriptor propertyForId(Object nodeId, String propertyName) { ClassDescriptor descriptor = context.getEntityResolver().getClassDescriptor( ((ObjectId) nodeId).getEntityName()); return descriptor.getProperty(propertyName); }
/** * Returns a map key for a given to-many map relationship and a target object. * * @since 3.0 */ protected Object getMapKey(String relationshipName, Object value) { EntityResolver resolver = objectContext.getEntityResolver(); ClassDescriptor descriptor = resolver .getClassDescriptor(objectId.getEntityName()); if (descriptor == null) { throw new IllegalStateException("DataObject's entity is unmapped, objectId: " + objectId); } PropertyDescriptor property = descriptor.getProperty(relationshipName); if (property instanceof ToManyMapProperty) { return ((ToManyMapProperty) property).getMapKey(value); } throw new IllegalArgumentException("Relationship '" + relationshipName + "' is not a to-many Map"); }
@Override public DataDomain get() throws ConfigurationException { // here goes the class loading hack, temporarily setting application // bundle ClassLoader to be a thread ClassLoader for runtime to start. Thread thread = Thread.currentThread(); ClassLoader activeCl = thread.getContextClassLoader(); try { // using fake package name... as long as it is not // org.apache.cayenne, this do the right trick thread.setContextClassLoader(classLoaderManager.getClassLoader("com/")); DataDomain domain = super.get(); EntityResolver entityResolver = domain.getEntityResolver(); for (ObjEntity e : entityResolver.getObjEntities()) { // it is not enough to just call 'getObjectClass()' on // ClassDescriptor - there's an optimization that prevents full // descriptor resolving... so calling some other method... entityResolver.getClassDescriptor(e.getName()).getProperty("__dummy__"); entityResolver.getCallbackRegistry(); } // this triggers callbacks initialization using thread class loader entityResolver.getCallbackRegistry(); return domain; } finally { thread.setContextClassLoader(activeCl); } }
@Override public boolean visitIdentificationVariable(EJBQLExpression expression) { PropertyDescriptor property = descriptor.getProperty(expression.getText()); if (property instanceof ArcProperty) { incoming = ((ArcProperty) property).getRelationship(); descriptor = ((ArcProperty) property).getTargetDescriptor(); } else { throw new EJBQLException("Incorrect relationship path: " + expression.getText()); } return true; }
/** * Handles property change in a Persistent object, routing to either * {@link #handleArcPropertyChange(Persistent, ArcProperty, Object, Object)} or * {@link #handleSimplePropertyChange(Persistent, String, Object, Object)}. */ public void handlePropertyChange( Persistent object, String propertyName, Object oldValue, Object newValue) { // translate ObjectContext generic property change callback to GraphManager terms // (simple properties vs. relationships) ClassDescriptor descriptor = context.getEntityResolver().getClassDescriptor( object.getObjectId().getEntityName()); PropertyDescriptor property = descriptor.getProperty(propertyName); if (property instanceof ArcProperty) { handleArcPropertyChange(object, (ArcProperty) property, oldValue, newValue); } else { handleSimplePropertyChange(object, propertyName, oldValue, newValue); } }
public void nodePropertyChanged(Object nodeId, String property, Object oldValue, Object newValue) { // this change is for simple property, so no need to convert targets to // server // objects... Persistent object = findObject(nodeId); ClassDescriptor descriptor = context.getEntityResolver() .getClassDescriptor(((ObjectId) nodeId).getEntityName()); setExternalChange(Boolean.TRUE); try { descriptor.getProperty(property).writeProperty(object, oldValue, newValue); } catch (Exception e) { throw new CayenneRuntimeException("Error setting property: " + property, e); } finally { setExternalChange(Boolean.FALSE); } }
static void unsetReverse(final Persistent sourceObject, String propertyName, final Persistent targetObject) { ArcProperty property = (ArcProperty) Cayenne.getClassDescriptor(sourceObject).getProperty(propertyName); ArcProperty reverseArc = property.getComplimentaryReverseArc(); if (reverseArc != null) { reverseArc.visit(new PropertyVisitor() { public boolean visitToMany(ToManyProperty property) { property.removeTargetDirectly(targetObject, sourceObject); return false; } public boolean visitToOne(ToOneProperty property) { property.setTarget(targetObject, null, false); return false; } public boolean visitAttribute(AttributeProperty property) { return false; } }); sourceObject.getObjectContext().getGraphManager() .arcDeleted(targetObject.getObjectId(), sourceObject.getObjectId(), reverseArc.getName()); markAsDirty(targetObject); } }
static void setReverse(final Persistent sourceObject, String propertyName, final Persistent targetObject) { ArcProperty property = (ArcProperty) Cayenne.getClassDescriptor(sourceObject).getProperty(propertyName); ArcProperty reverseArc = property.getComplimentaryReverseArc(); if (reverseArc != null) { reverseArc.visit(new PropertyVisitor() { public boolean visitToMany(ToManyProperty property) { property.addTargetDirectly(targetObject, sourceObject); return false; } public boolean visitToOne(ToOneProperty property) { property.setTarget(targetObject, sourceObject, false); return false; } public boolean visitAttribute(AttributeProperty property) { return false; } }); sourceObject.getObjectContext().getGraphManager() .arcCreated(targetObject.getObjectId(), sourceObject.getObjectId(), reverseArc.getName()); markAsDirty(targetObject); } }
protected void updateReverse(List resolved) { EntityResolver resolver = relationshipOwner.getObjectContext().getEntityResolver(); ObjEntity sourceEntity = resolver.getObjEntity(relationshipOwner.getObjectId().getEntityName()); ObjRelationship relationship = sourceEntity.getRelationship(relationshipName); ObjRelationship reverse = relationship.getReverseRelationship(); if (reverse != null && !reverse.isToMany()) { PropertyDescriptor property = resolver.getClassDescriptor(reverse.getSourceEntity().getName()).getProperty( reverse.getName()); for (Object o : resolved) { property.writePropertyDirectly(o, null, relationshipOwner); } } } }
public boolean visitToOne(ToOneProperty property) { if (prefetchTree != null) { PrefetchTreeNode child = prefetchTree.getNode(property.getName()); if (child != null) { Object destinationSource = property.readProperty(source); Object destinationTarget = destinationSource != null ? detach( destinationSource, property.getTargetDescriptor(), child) : null; if (destinationTarget != null) { fillReverseRelationship(destinationTarget, property); } ToOneProperty targetProperty = (ToOneProperty) targetDescriptor .getProperty(property.getName()); Object oldTarget = targetProperty.isFault(target) ? null : targetProperty.readProperty(target); targetProperty .writeProperty(target, oldTarget, destinationTarget); } } return true; }