/** * Applies only for {@link OneToOneAssociation}s. */ @Override public ClearValueResponse clearValue(final ClearValueRequest request) { final AuthenticationSession session = request.getSession(); final String fieldIdentifier = request.getFieldIdentifier(); final IdentityData targetIdentityData = request.getTarget(); if (LOG.isDebugEnabled()) { LOG.debug("request clearValue " + fieldIdentifier + " on " + targetIdentityData + " for " + session); } final ObjectAdapter targetAdapter = getPersistentObjectAdapter(session, targetIdentityData); final OneToOneAssociation association = (OneToOneAssociation) targetAdapter.getSpecification().getAssociation(fieldIdentifier); ensureAssociationModifiableElseThrowException(session, targetAdapter, association); association.clearAssociation(targetAdapter); return new ClearValueResponse(getUpdates()); }
if (data.trim().length() == 0) { if (!association.isEmpty(object) && association instanceof OneToOneAssociation) { ((OneToOneAssociation) association).clearAssociation(object);
/** * Applies to both {@link OneToOneAssociation}s and * {@link OneToManyAssociation}s. */ @Override public ClearAssociationResponse clearAssociation(final ClearAssociationRequest request) { final AuthenticationSession session = request.getSession(); final String fieldIdentifier = request.getFieldIdentifier(); final IdentityData targetData = request.getTarget(); final IdentityData associateData = request.getAssociate(); if (LOG.isDebugEnabled()) { LOG.debug("request clearAssociation " + fieldIdentifier + " on " + targetData + " of " + associateData + " for " + session); } final ObjectAdapter targetAdapter = getPersistentObjectAdapter(session, targetData); final ObjectAdapter associateAdapter = getPersistentObjectAdapter(session, associateData); final ObjectSpecification specification = targetAdapter.getSpecification(); final ObjectAssociation association = specification.getAssociation(fieldIdentifier); if (!association.isVisible(session, targetAdapter).isAllowed() || association.isUsable(session, targetAdapter).isVetoed()) { throw new IsisException("can't modify field as not visible or editable"); } ensureAssociationModifiableElseThrowException(session, targetAdapter, association); if (association instanceof OneToOneAssociation) { ((OneToOneAssociation) association).clearAssociation(targetAdapter); } else { ((OneToManyAssociation) association).removeElement(targetAdapter, associateAdapter); } return new ClearAssociationResponse(getUpdates()); }