/** * INTERNAL: * Return the value to be stored in the object's attribute. * This value is determined by the row. * In this case, simply wrap the object in a ValueHolder. */ public Object valueFromRow(Object object) { return new ValueHolder(object); } }
/** * INTERNAL: * The method validateAttributeOfInstantiatedObject(Object attributeValue) fixes the value of the attributeValue * in cases where it is null and indirection requires that it contain some specific data structure. Return whether this will happen. * This method is used to help determine if indirection has been triggered * @param attributeValue * @return * @see validateAttributeOfInstantiatedObject(Object attributeValue) */ @Override public boolean isAttributeValueFullyBuilt(Object attributeValue){ //Bug#413833 : If attributeValue is an instance of ValueHolder, //it has not been built into the clone previously return attributeValue != null && !(attributeValue instanceof ValueHolder && ((ValueHolder)attributeValue).isNewlyWeavedValueHolder()); }
public void setAttributeValueInObject(Object object, Object value) { if(isChangeTracking) { Object oldValue = getAttributeValueFromObject(object); PropertyChangeListener listener = ((ChangeTracker)object)._persistence_getPropertyChangeListener(); if(listener != null) { listener.propertyChange(new PropertyChangeEvent(object, oxmAccessor.getAttributeName(), value, oldValue)); } } if(isValueHolderProperty) { ValueHolderInterface vh = (ValueHolderInterface)ormAccessor.getAttributeValueFromObject(object); if(vh == null) { vh = new ValueHolder(); ((ValueHolder)vh).setIsNewlyWeavedValueHolder(true); } vh.setValue(value); ormAccessor.setAttributeValueInObject(object, vh); } oxmAccessor.setAttributeValueInObject(object, value); }
/** * INTERNAL: * Return a backup clone of the attribute. */ public Object backupCloneAttribute(Object attributeValue, Object clone, Object backup, UnitOfWorkImpl unitOfWork) { //no need to check if the attribute is a valueholder because closeAttribute // should always be called first ValueHolderInterface valueHolder = (ValueHolderInterface)attributeValue;// cast the value ValueHolder result = new ValueHolder(); // delay instantiation until absolutely necessary if ((!(valueHolder instanceof UnitOfWorkValueHolder)) || valueHolder.isInstantiated()) { result.setValue(super.backupCloneAttribute(valueHolder.getValue(), clone, backup, unitOfWork)); } else { ((UnitOfWorkValueHolder)valueHolder).setBackupValueHolder(result); } return result; }
/** * INTERNAL: * Returns the attribute value from the reference object. * If the attribute is using indirection the value of the value-holder is returned. * If the value holder is not instantiated then it is instantiated. */ public Object getAttributeValueWithClonedValueHolders(Object object) { Object attributeValue = getAttributeValueFromObject(object); if (attributeValue instanceof DatabaseValueHolder){ return ((DatabaseValueHolder)attributeValue).clone(); } else if (attributeValue instanceof ValueHolder){ return ((ValueHolder)attributeValue).clone(); } return attributeValue; }
void synchronizeValueHolder(Object object) { try { ValueHolder valueHolder = (ValueHolder)valueHolderField.get(object); if(valueHolder != null){ Object value = field.get(object); valueHolder.setValue(value); } } catch (IllegalAccessException e) { throw new RuntimeException(e); } }
public void setAttributeValueInObject(Object object, Object value) { if(isChangeTracking) { Object oldValue = getAttributeValueFromObject(object); PropertyChangeListener listener = ((ChangeTracker)object)._persistence_getPropertyChangeListener(); if(listener != null) { listener.propertyChange(new PropertyChangeEvent(object, oxmAccessor.getAttributeName(), value, oldValue)); } } if(isValueHolderProperty) { ValueHolderInterface vh = (ValueHolderInterface)ormAccessor.getAttributeValueFromObject(object); if(vh == null) { vh = new ValueHolder(); ((ValueHolder)vh).setIsNewlyWeavedValueHolder(true); } vh.setValue(value); ormAccessor.setAttributeValueInObject(object, vh); } oxmAccessor.setAttributeValueInObject(object, value); }
/** * INTERNAL: * Returns the attribute value from the reference object. * If the attribute is using indirection the value of the value-holder is returned. * If the value holder is not instantiated then it is instantiated. */ public Object getAttributeValueWithClonedValueHolders(Object object) { Object attributeValue = getAttributeValueFromObject(object); if (attributeValue instanceof DatabaseValueHolder){ return ((DatabaseValueHolder)attributeValue).clone(); } else if (attributeValue instanceof ValueHolder){ return ((ValueHolder)attributeValue).clone(); } return attributeValue; }
/** * Get the value from the wrapped value holder, instantiating it * if necessary, and clone it. */ protected Object instantiate() { UnitOfWorkImpl unitOfWork; if (isSerializedRemoteUnitOfWorkValueHolder()) { unitOfWork = getRemoteUnitOfWork(); } else { unitOfWork = getUnitOfWork(); } if (unitOfWork == null){ throw ValidationException.instantiatingValueholderWithNullSession(); } Object originalAttributeValue; Object cloneAttributeValue; // the wrapped value holder is transient, so it will be null for a remote UOW if (isSerializedRemoteUnitOfWorkValueHolder()) { originalAttributeValue = getValueFromServerObject(); cloneAttributeValue = buildCloneFor(originalAttributeValue); } else { cloneAttributeValue = instantiateImpl(); } // Set the value in the backup clone also. // In some cases we may want to force instantiation before the backup is built if (getBackupValueHolder() != null) { getBackupValueHolder().setValue(buildBackupCloneFor(cloneAttributeValue)); } return cloneAttributeValue; }
/** * INTERNAL: * Return the null value of the appropriate attribute. That is, the * field from the database is NULL, return what should be * placed in the object's attribute as a result. * In this case, return an empty ValueHolder. */ public Object nullValueFromRow() { return new ValueHolder(); }
public void setAttributeValueInObject(Object object, Object value) { if(isChangeTracking) { Object oldValue = getAttributeValueFromObject(object); PropertyChangeListener listener = ((ChangeTracker)object)._persistence_getPropertyChangeListener(); if(listener != null) { listener.propertyChange(new PropertyChangeEvent(object, oxmAccessor.getAttributeName(), value, oldValue)); } } if(isValueHolderProperty) { ValueHolderInterface vh = (ValueHolderInterface)ormAccessor.getAttributeValueFromObject(object); if(vh == null) { vh = new ValueHolder(); ((ValueHolder)vh).setIsNewlyWeavedValueHolder(true); } vh.setValue(value); ormAccessor.setAttributeValueInObject(object, vh); } oxmAccessor.setAttributeValueInObject(object, value); }
/** * INTERNAL: * Returns the attribute value from the reference object. * If the attribute is using indirection the value of the value-holder is returned. * If the value holder is not instantiated then it is instantiated. */ public Object getAttributeValueWithClonedValueHolders(Object object) { Object attributeValue = getAttributeValueFromObject(object); if (attributeValue instanceof DatabaseValueHolder){ return ((DatabaseValueHolder)attributeValue).clone(); } else if (attributeValue instanceof ValueHolder){ return ((ValueHolder)attributeValue).clone(); } return attributeValue; }
/** * INTERNAL: * The method validateAttributeOfInstantiatedObject(Object attributeValue) fixes the value of the attributeValue * in cases where it is null and indirection requires that it contain some specific data structure. Return whether this will happen. * This method is used to help determine if indirection has been triggered * @param attributeValue * @return * @see validateAttributeOfInstantiatedObject(Object attributeValue) */ @Override public boolean isAttributeValueFullyBuilt(Object attributeValue){ //Bug#413833 : If attributeValue is an instance of ValueHolder, //it has not been built into the clone previously return attributeValue != null && !(attributeValue instanceof ValueHolder && ((ValueHolder)attributeValue).isNewlyWeavedValueHolder()); }
/** * INTERNAL: * Return the null value of the appropriate attribute. That is, the * field from the database is NULL, return what should be * placed in the object's attribute as a result. * In this case, return an empty ValueHolder. */ public Object nullValueFromRow() { return new ValueHolder(); }
/** * INTERNAL: * Return the value to be stored in the object's attribute. * This value is determined by the row. * In this case, simply wrap the object in a ValueHolder. */ public Object valueFromRow(Object object) { return new ValueHolder(object); } }
if (value instanceof ValueHolder) { final ValueHolder holder = (ValueHolder) value; if (holder.getValue() != null) { return false;
/** * INTERNAL: * Return the null value of the appropriate attribute. That is, the * field from the database is NULL, return what should be * placed in the object's attribute as a result. * In this case, return an empty ValueHolder. */ public Object nullValueFromRow() { return new ValueHolder(); }