public String isValid( Object proposedValue) { NakedObject proposedNO = (NakedObject)proposedValue; Consent valueValid = getOneToOneAssociation().isAssociationValid(getNakedObject(), proposedNO); return valueValid.isAllowed()?null:valueValid.getReason(); }
public String check( Naked[] values) { NakedObject nakedObject = getArgument(values); final Consent associationValid = getOneToOneAssociationInstance().getOneToOneAssociation().isAssociationValid(getOneToOneAssociationInstance().getNakedObject(), nakedObject); return associationValid.isAllowed()?null:associationValid.getReason(); }
public Consent canClear() { NakedObject parentObject = getParent(); OneToOneAssociation association = getOneToOneAssociation(); // NakedObject associatedObject = getObject(); Consent isEditable = isEditable(); if (isEditable.isVetoed()) { return isEditable; } Consent isValid = association.isAssociationValid(parentObject, null); if (isValid.isAllowed()) { String status = "Clear the association to this object from '" + parentObject.titleString() + "'"; return new Allow(status); } else { return new Veto(isValid.getReason()); } }
private Consent setFieldOfMatchingType(final NakedObject target, final NakedObject source) { if (target.getResolveState().isTransient() && source.getResolveState().isPersistent()) { return new Veto("Can't set field in persistent object with reference to non-persistent object"); } else { NakedObjectField[] fields = target.getSpecification().getDynamicallyVisibleFields(target); for (int i = 0; i < fields.length; i++) { NakedObjectField fld = fields[i]; if (fld.isObject() && source.getSpecification().isOfType(fld.getSpecification())) { if (fld.get(target) == null && ((OneToOneAssociation) fld).isAssociationValid(target, source).isAllowed()) { return new Allow("Set field " + fld.getName()); } } } return new Veto("No empty field accepting object of type " + source.getSpecification().getSingularName() + " in " + title()); } }
public Naked drop(final Content sourceContent) { if (sourceContent instanceof ObjectContent) { NakedObject source = (NakedObject) sourceContent.getNaked(); Assert.assertNotNull(source); NakedObject target = (NakedObject) getObject(); Assert.assertNotNull(target); if (canDrop(sourceContent).isAllowed()) { NakedObjectAction action = dropAction(source, target); if ((action != null) && action.isParameterSetValid(target, new NakedObject[] { source }).isAllowed()) { return action.execute(target, new NakedObject[] { source }); } else { NakedObjectField[] fields = target.getSpecification().getDynamicallyVisibleFields(target); for (int i = 0; i < fields.length; i++) { NakedObjectField fld = fields[i]; if (fld.isObject() && source.getSpecification().isOfType(fld.getSpecification())) { if (fld.get(target) == null && ((OneToOneAssociation) fld).isAssociationValid(target, source).isAllowed()) { ((OneToOneAssociation) fld).setAssociation(target, source); break; } } } } } } return null; }
public Consent canSet(final NakedObject object) { NakedObjectSpecification targetType = getOneToOneAssociation().getSpecification(); NakedObjectSpecification spec = object.getSpecification(); if (isEditable().isVetoed()) { return isEditable(); } if (!spec.isOfType(targetType)) { return new Veto("Can only drop objects of type " + targetType.getSingularName()); } if (getParent().getResolveState().isPersistent() && object.getResolveState().isTransient()) { return new Veto("Can't drop a non-persistent into this persistent object"); } // if (object instanceof Aggregated) { // Aggregated aggregated = ((Aggregated) object); // if (aggregated.isAggregated() && aggregated.parent() != getParent()) { if (Features.isAggregated(spec) && spec.getAggregate(object) != getParent()) { return new Veto("Object is already associated with another object: " + spec.getAggregate(object)); } // } Consent perm = getOneToOneAssociation().isAssociationValid(getParent(), object); return perm; }