public void execute() { field.setAssociation(object, associatedObject); } }
@Override public void setObject(final NakedObject object) { getOneToOneAssociation().setAssociation(getParent(), object); }
@Override public void entryComplete() { getValueAssociation().setAssociation(getParent(), object); }
public void undo() { final EncodeableFacet facet = value.getFacet(EncodeableFacet.class); final Object obj = facet.fromEncodedString(oldValue); final NakedObject adapter = getAdapterManager().adapterFor(obj); value.setAssociation(object, adapter); // have commented this out because it isn't needed; the transaction manager will do this // for us on endTransaction. Still, if I'm wrong and it is needed, hopefully this // comment will help... // NakedObjectsContext.getObjectPersistor().objectChangedAllDirty(); }
private void saveState(final NakedObject targetAdapter, final NakedObject[] entryAdapters) { for (int i = 0; i < fields.length; i++) { final NakedObjectAssociation fld = fields[i]; final NakedObject entryAdapter = entryAdapters[i]; final boolean isReadOnly = readOnly[i]; if (isReadOnly) { continue; } if (fld.isOneToOneAssociation()) { final OneToOneAssociation oneToOneAssociation = ((OneToOneAssociation) fld); final Object entryPojo = NakedObjectUtils.unwrap(entryAdapter); if (entryPojo == null) { if (oneToOneAssociation.get(targetAdapter) != null) { oneToOneAssociation.clearAssociation(targetAdapter); } } else { final NakedObject currentAdapter = oneToOneAssociation.get(targetAdapter); final Object currentPojo = NakedObjectUtils.unwrap(currentAdapter); if (currentAdapter == null || currentPojo == null || !currentPojo.equals(entryPojo)) { oneToOneAssociation.setAssociation(targetAdapter, entryAdapter); } } } } }
/** * Applies to both {@link OneToOneAssociation}s and {@link OneToManyAssociation}s. */ public SetAssociationResponse setAssociation( final SetAssociationRequest request) { AuthenticationSession session = request.getSession(); String fieldIdentifier = request.getFieldIdentifier(); IdentityData targetData = request.getTarget(); IdentityData associateData = request.getAssociate(); if (LOG.isDebugEnabled()) { LOG.debug("request setAssociation " + fieldIdentifier + " on " + targetData + " with " + associateData + " for " + session); } final NakedObject targetAdapter = getPersistentNakedObject(session, targetData); final NakedObject associate = getPersistentNakedObject(session, associateData); final NakedObjectAssociation association = targetAdapter.getSpecification().getAssociation(fieldIdentifier); ensureAssociationModifiableElseThrowException(session, targetAdapter, association); if (association instanceof OneToOneAssociation) { ((OneToOneAssociation) association).setAssociation(targetAdapter, associate); } else { ((OneToManyAssociation) association).addElement(targetAdapter, associate); } return new SetAssociationResponse(getUpdates()); }
/** * Applies to both {@link OneToOneAssociation}s and {@link OneToManyAssociation}s. */ public SetAssociationResponse setAssociation( final SetAssociationRequest request) { AuthenticationSession session = request.getSession(); String fieldIdentifier = request.getFieldIdentifier(); IdentityData targetData = request.getTarget(); IdentityData associateData = request.getAssociate(); if (LOG.isDebugEnabled()) { LOG.debug("request setAssociation " + fieldIdentifier + " on " + targetData + " with " + associateData + " for " + session); } final NakedObject targetAdapter = getPersistentNakedObject(session, targetData); final NakedObject associate = getPersistentNakedObject(session, associateData); final NakedObjectAssociation association = targetAdapter.getSpecification().getAssociation(fieldIdentifier); ensureAssociationModifiableElseThrowException(session, targetAdapter, association); if (association instanceof OneToOneAssociation) { ((OneToOneAssociation) association).setAssociation(targetAdapter, associate); } else { ((OneToManyAssociation) association).addElement(targetAdapter, associate); } return new SetAssociationResponse(getUpdates()); }
private Object handleSetterMethodOnProperty( final Object[] args, final AuthenticationSession session, final NakedObject targetAdapter, final OneToOneAssociation otoa, final String methodName) { if (args.length != 1) { throw new IllegalArgumentException("Invoking a setter should only have a single argument"); } resolveIfRequired(targetAdapter); final Object argumentObj = underlying(args[0]); final NakedObject argumentNO = argumentObj != null? getRuntimeContext().adapterFor(argumentObj): null; final InteractionResult interactionResult = otoa.isAssociationValid(targetAdapter, argumentNO).getInteractionResult(); notifyListenersAndVetoIfRequired(interactionResult); if (getExecutionMode() == ExecutionMode.EXECUTE) { if (argumentNO != null) { otoa.setAssociation(targetAdapter, argumentNO); // need to wrap arg } else { otoa.clearAssociation(targetAdapter); } } objectChangedIfRequired(targetAdapter); return null; }
private Object handleSetterMethodOnProperty( final Object[] args, final AuthenticationSession session, final NakedObject targetAdapter, final OneToOneAssociation otoa, final String methodName) { if (args.length != 1) { throw new IllegalArgumentException("Invoking a setter should only have a single argument"); } resolveIfRequired(targetAdapter); final Object argumentObj = underlying(args[0]); final NakedObject argumentNO = argumentObj != null? getRuntimeContext().adapterFor(argumentObj): null; final InteractionResult interactionResult = otoa.isAssociationValid(targetAdapter, argumentNO).getInteractionResult(); notifyListenersAndVetoIfRequired(interactionResult); if (getExecutionMode() == ExecutionMode.EXECUTE) { if (argumentNO != null) { otoa.setAssociation(targetAdapter, argumentNO); // need to wrap arg } else { otoa.clearAssociation(targetAdapter); } } objectChangedIfRequired(targetAdapter); return null; }
private Object handleSetterMethodOnProperty( final Object[] args, final AuthenticationSession session, final NakedObject targetAdapter, final OneToOneAssociation otoa, final String methodName) { if (args.length != 1) { throw new IllegalArgumentException("Invoking a setter should only have a single argument"); } resolveIfRequired(targetAdapter); final Object argumentObj = underlying(args[0]); final NakedObject argumentNO = argumentObj != null? getRuntimeContext().adapterFor(argumentObj): null; final InteractionResult interactionResult = otoa.isAssociationValid(targetAdapter, argumentNO).getInteractionResult(); notifyListenersAndVetoIfRequired(interactionResult); if (getExecutionMode() == ExecutionMode.EXECUTE) { if (argumentNO != null) { otoa.setAssociation(targetAdapter, argumentNO); // need to wrap arg } else { otoa.clearAssociation(targetAdapter); } } objectChangedIfRequired(targetAdapter); return null; }
/** * Applies only for {@link OneToOneAssociation}s. */ public SetValueResponse setValue( SetValueRequest request) { AuthenticationSession session = request.getSession(); String fieldIdentifier = request.getFieldIdentifier(); IdentityData targetIdentityData = request.getTarget(); EncodableObjectData encodeableObjectData = request.getValue(); Assert.assertNotNull(encodeableObjectData); if (LOG.isDebugEnabled()) { LOG.debug("request setValue " + fieldIdentifier + " on " + targetIdentityData + " with " + encodeableObjectData + " for " + session); } final NakedObject targetAdapter = getPersistentNakedObject(session, targetIdentityData); final OneToOneAssociation association = (OneToOneAssociation) targetAdapter.getSpecification().getAssociation(fieldIdentifier); ensureAssociationModifiableElseThrowException(session, targetAdapter, association); final String encodedObject = encodeableObjectData.getEncodedObjectData(); final NakedObjectSpecification specification = association.getSpecification(); final NakedObject adapter = restoreLeafObject(encodedObject, specification); association.setAssociation(targetAdapter, adapter); return new SetValueResponse(getUpdates()); }
/** * Applies only for {@link OneToOneAssociation}s. */ public SetValueResponse setValue( SetValueRequest request) { AuthenticationSession session = request.getSession(); String fieldIdentifier = request.getFieldIdentifier(); IdentityData targetIdentityData = request.getTarget(); EncodableObjectData encodeableObjectData = request.getValue(); Assert.assertNotNull(encodeableObjectData); if (LOG.isDebugEnabled()) { LOG.debug("request setValue " + fieldIdentifier + " on " + targetIdentityData + " with " + encodeableObjectData + " for " + session); } final NakedObject targetAdapter = getPersistentNakedObject(session, targetIdentityData); final OneToOneAssociation association = (OneToOneAssociation) targetAdapter.getSpecification().getAssociation(fieldIdentifier); ensureAssociationModifiableElseThrowException(session, targetAdapter, association); final String encodedObject = encodeableObjectData.getEncodedObjectData(); final NakedObjectSpecification specification = association.getSpecification(); final NakedObject adapter = restoreLeafObject(encodedObject, specification); association.setAssociation(targetAdapter, adapter); return new SetValueResponse(getUpdates()); }
final Object currentObj = NakedObjectUtils.unwrap(currentNO); if (currentNO == null || currentObj == null || !currentObj.equals(entryObj)) { oneToOneAssociation.setAssociation(targetAdapter, entryNO);
@Override public void execute(final Workspace workspace, final View view, final Location at) { final NakedObject original = view.getContent().getNaked(); // NakedObject original = getObject(); final NakedObjectSpecification spec = original.getSpecification(); final NakedObject clone = getPersistenceSession().createInstance(spec); final NakedObjectAssociation[] fields = spec.getAssociations(); for (int i = 0; i < fields.length; i++) { final NakedObject fld = fields[i].get(original); if (fields[i].isOneToOneAssociation()) { ((OneToOneAssociation) fields[i]).setAssociation(clone, fld); } else if (fields[i].isOneToManyAssociation()) { // clone.setValue((OneToOneAssociation) fields[i], fld.getObject()); } } // AbstractNakedObject clone = (AbstractNakedObject) createInstance(getClass()); // clone.copyObject(this); // clone.objectChanged(); final Content content = Toolkit.getContentFactory().createRootContent(clone); final View cloneView = Toolkit.getViewFactory().createWindow(content); cloneView.setLocation(at); workspace.addView(cloneView); // newWorkspace.markDamaged(); }
if (association.get(target) == null && otoa.isAssociationValid(target, source).isAllowed()) { otoa.setAssociation(target, source); break;