private Object valueRep() { final ObjectAdapter valueAdapter = objectMember.get(objectAdapter); if (valueAdapter == null) { return NullNode.getInstance(); } return DomainObjectReprRenderer.valueOrRef(resourceContext, valueAdapter, objectMember.getSpecification()); }
@Override public void doHandle(final PerformContext performContext) { final ObjectAdapter onAdapter = performContext.getOnAdapter(); final ObjectMember nakedObjectMember = performContext.getObjectMember(); final OneToOneAssociation otoa = (OneToOneAssociation) nakedObjectMember; result = otoa.get(onAdapter); }
@Override public String parseAndValidate(final ScalarModel scalarModel, final String proposedPojoAsStr) { final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty(); ParseableFacet parseableFacet = property.getFacet(ParseableFacet.class); if (parseableFacet == null) { parseableFacet = property.getSpecification().getFacet(ParseableFacet.class); } try { final ObjectAdapter parentAdapter = scalarModel.parentObjectAdapterMemento.getObjectAdapter(); final ObjectAdapter currentValue = property.get(parentAdapter); final ObjectAdapter proposedAdapter = parseableFacet.parseTextEntry(currentValue, proposedPojoAsStr); final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter); return valid.isAllowed() ? null : valid.getReason(); } catch (final Exception ex) { return ex.getLocalizedMessage(); } }
private Object handleGetterMethodOnProperty( final ObjectAdapter targetAdapter, final Object[] args, final OneToOneAssociation property) { if (args.length != 0) { throw new IllegalArgumentException("Invoking a 'get' should have no arguments"); } if(getExecutionMode().shouldEnforceRules()) { if(getExecutionMode().shouldFailFast()) { checkVisibility(targetAdapter, property); } else { try { checkVisibility(targetAdapter, property); } catch(Exception ex) { return null; } } } resolveIfRequired(targetAdapter); final InteractionInitiatedBy interactionInitiatedBy = getInteractionInitiatedBy(); final ObjectAdapter currentReferencedAdapter = property.get(targetAdapter, interactionInitiatedBy); final Object currentReferencedObj = ObjectAdapter.Util.unwrap(currentReferencedAdapter); final PropertyAccessEvent ev = new PropertyAccessEvent(getDelegate(), property.getIdentifier(), currentReferencedObj); notifyListeners(ev); return currentReferencedObj; }
@Override public String parseAndValidate(final ScalarModel scalarModel, final String proposedPojoAsStr) { final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty(scalarModel.getSpecificationLoader()); ParseableFacet parseableFacet = property.getFacet(ParseableFacet.class); if (parseableFacet == null) { parseableFacet = property.getSpecification().getFacet(ParseableFacet.class); } try { final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load(); final ObjectAdapter currentValue = property.get(parentAdapter, InteractionInitiatedBy.USER); final ObjectAdapter proposedAdapter = parseableFacet.parseTextEntry(currentValue, proposedPojoAsStr, InteractionInitiatedBy.USER); final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter, InteractionInitiatedBy.USER); return valid.isAllowed() ? null : valid.getReason(); } catch (final ConcurrencyException ex) { // disregard concurrency exceptions because will pick up at the IFormValidator level rather // than each individual property. return null; } catch (final Exception ex) { return ex.getLocalizedMessage(); } }
/** * Resets the {@link #propertyScalarModels hash} of {@link ScalarModel}s for * each {@link PropertyMemento property} to the value held in the underlying * {@link #getObject() entity}. */ public void resetPropertyModels() { for (final PropertyMemento pm : propertyScalarModels.keySet()) { final ScalarModel scalarModel = propertyScalarModels.get(pm); final ObjectAdapter associatedAdapter = pm.getProperty().get(getObject()); scalarModel.setObject(associatedAdapter); } }
@Override public String parseAndValidate(final ScalarModel scalarModel, final String proposedPojoAsStr) { final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty(scalarModel.getSpecificationLoader()); ParseableFacet parseableFacet = property.getFacet(ParseableFacet.class); if (parseableFacet == null) { parseableFacet = property.getSpecification().getFacet(ParseableFacet.class); } try { final ObjectAdapter parentAdapter = scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK, scalarModel.getPersistenceSession(), scalarModel.getSpecificationLoader()); final ObjectAdapter currentValue = property.get(parentAdapter, InteractionInitiatedBy.USER); final ObjectAdapter proposedAdapter = parseableFacet.parseTextEntry(currentValue, proposedPojoAsStr, InteractionInitiatedBy.USER); final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter, InteractionInitiatedBy.USER); return valid.isAllowed() ? null : valid.getReason(); } catch (final ConcurrencyException ex) { // disregard concurrency exceptions because will pick up at the IFormValidator level rather // than each individual property. return null; } catch (final Exception ex) { return ex.getLocalizedMessage(); } }
private void updateOneToOneAssociation(final ObjectAdapter objectAdapter, final OneToOneAssociation otoa, final Data assocData) { if (assocData == null) { otoa.initAssociation(objectAdapter, null); } else { final ObjectAdapter ref = recreateReference(assocData); if (otoa.get(objectAdapter, InteractionInitiatedBy.FRAMEWORK) != ref) { if (LOG.isDebugEnabled()) { LOG.debug(" association {} changed to {}", otoa, ref.getOid()); } otoa.initAssociation(objectAdapter, ref); } } }
@Override public void doHandle(final PerformContext performContext) throws ScenarioBoundValueException { final ObjectAdapter onAdapter = performContext.getOnAdapter(); final ObjectMember nakedObjectMember = performContext.getObjectMember(); final List<ScenarioCell> argumentCells = performContext.getArgumentCells(); final OneToOneAssociation otoa = (OneToOneAssociation) nakedObjectMember; // set final PropertySetterFacet setterFacet = otoa.getFacet(PropertySetterFacet.class); if (setterFacet == null) { final CellBinding onMemberBinding = performContext.getPeer().getOnMemberBinding(); throw ScenarioBoundValueException.current(onMemberBinding, "(cannot set)"); } // safe to obtain since guaranteed by superclass final CellBinding arg0Binding = performContext.getPeer().getArg0Binding(); final ScenarioCell arg0Cell = argumentCells.get(0); // obtain existing as 'context' (used if this is a parsed @Value) final ObjectAdapter contextAdapter = otoa.get(onAdapter); // validate parameter final ObjectAdapter toSetAdapter = performContext.getPeer().getAdapter(contextAdapter, otoa.getSpecification(), arg0Binding, arg0Cell); final Consent validConsent = otoa.isAssociationValid(onAdapter, toSetAdapter); if (validConsent.isVetoed()) { throw ScenarioBoundValueException.current(arg0Binding, validConsent.getReason()); } setterFacet.setProperty(onAdapter, toSetAdapter); }
private void updateOneToOneAssociation(final ObjectAdapter object, final OneToOneAssociation field, final Data fieldData) { if (fieldData == null) { field.initAssociation(object, null); } else { final ObjectAdapter ref = recreateReference(fieldData); if (field.get(object) != ref) { if (LOG.isDebugEnabled()) { LOG.debug(" association " + field + " changed to " + ref.getOid()); } field.initAssociation(object, ref); } } }
/** * Resets the {@link #propertyScalarModels hash} of {@link ScalarModel}s for * each {@link PropertyMemento property} to the value held in the underlying * {@link #getObject() entity}. */ public void resetPropertyModels() { adapterMemento.resetVersion(getPersistenceSession(), getSpecificationLoader()); for (final PropertyMemento pm : propertyScalarModels.keySet()) { final ScalarModel scalarModel = propertyScalarModels.get(pm); final ObjectAdapter adapter = getObject(); final ObjectAdapter associatedAdapter = pm.getProperty(getSpecificationLoader()).get(adapter, InteractionInitiatedBy.USER); scalarModel.setObject(associatedAdapter); } }
/** * Creates a model representing a property of a parent object, with the * {@link #getObject() value of this model} to be current value of the * property. */ public ScalarModel(final ObjectAdapterMemento parentObjectAdapterMemento, final PropertyMemento pm) { this.kind = Kind.PROPERTY; this.parentObjectAdapterMemento = parentObjectAdapterMemento; this.propertyMemento = pm; final OneToOneAssociation property = propertyMemento.getProperty(); final ObjectAdapter associatedAdapter = property.get(parentObjectAdapterMemento.getObjectAdapter()); setObject(associatedAdapter); setMode(Mode.VIEW); }
/** * Resets the {@link #propertyScalarModels hash} of {@link ScalarModel}s for * each {@link PropertyMemento property} to the value held in the underlying * {@link #getObject() entity}. */ public void resetPropertyModels() { adapterMemento.resetVersion(getPersistenceSession(), getSpecificationLoader()); for (final PropertyMemento pm : propertyScalarModels.keySet()) { OneToOneAssociation otoa = pm.getProperty(getSpecificationLoader()); final ScalarModel scalarModel = propertyScalarModels.get(pm); final ObjectAdapter adapter = getObject(); final ObjectAdapter associatedAdapter = otoa.get(adapter, InteractionInitiatedBy.USER); scalarModel.setObject(associatedAdapter); } }
@Override public ObjectAdapter that(final PerformContext performContext) throws ScenarioBoundValueException { final OneToOneAssociation otoa = (OneToOneAssociation) performContext.getObjectMember(); // get final ObjectAdapter resultAdapter = otoa.get(performContext.getOnAdapter()); if (resultAdapter == null) { final CellBinding thatItBinding = performContext.getPeer().getThatItBinding(); throw ScenarioBoundValueException.current(thatItBinding, "(empty)"); } return null; }
@Override public String invalidReason(final ObjectValidityContext context) { final StringBuilder buf = new StringBuilder(); final ObjectAdapter adapter = context.getTarget(); for (final ObjectAssociation property : adapter.getSpecification().getAssociations(ObjectAssociationFilters.PROPERTIES)) { // ignore hidden properties if (property.isVisible(context.getSession(), adapter).isVetoed()) { continue; } // ignore disabled properties if (property.isUsable(context.getSession(), adapter).isVetoed()) { continue; } final OneToOneAssociation otoa = (OneToOneAssociation) property; final ObjectAdapter value = otoa.get(adapter); if (otoa.isAssociationValid(adapter, value).isVetoed()) { if (buf.length() > 0) { buf.append(", "); } buf.append(property.getName()); } } if (buf.length() > 0) { return "Invalid properties: " + buf.toString(); } return null; }
private static void setObjectFromPropertyIfVisible( final ScalarModel scalarModel, final OneToOneAssociation property, final ObjectAdapter parentAdapter) { final Where where = scalarModel.getRenderingHint().asWhere(); final Consent visibility = property.isVisible(parentAdapter, InteractionInitiatedBy.FRAMEWORK, where); final ObjectAdapter associatedAdapter; if (visibility.isAllowed()) { associatedAdapter = property.get(parentAdapter, InteractionInitiatedBy.USER); } else { associatedAdapter = null; } scalarModel.setObject(associatedAdapter); }
@Override public void reset(ScalarModel scalarModel) { final OneToOneAssociation property = scalarModel.propertyMemento.getProperty(scalarModel.getSpecificationLoader()); final ObjectAdapter parentAdapter = scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK, scalarModel.getPersistenceSession(), scalarModel.getSpecificationLoader()); final ObjectAdapter associatedAdapter = property.get(parentAdapter, InteractionInitiatedBy.USER); scalarModel.setObject(associatedAdapter); }
private void getAndStore(final ObjectAdapterMemento parentAdapterMemento) { final OneToOneAssociation property = propertyMemento.getProperty(getSpecificationLoader()); final ObjectAdapter parentAdapter = parentAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK, getPersistenceSession(), getSpecificationLoader()); final ObjectAdapter associatedAdapter = property.get(parentAdapter, InteractionInitiatedBy.USER); setObject(associatedAdapter); }
@Override public ObjectAdapter that(final PerformContext performContext) throws ScenarioBoundValueException { final OneToOneAssociation otoa = (OneToOneAssociation) performContext.getObjectMember(); // get final ObjectAdapter resultAdapter = otoa.get(performContext.getOnAdapter()); if (resultAdapter != null) { String actualStr = performContext.getPeer().getAliasRegistry().getAlias(resultAdapter); if (actualStr == null) { actualStr = resultAdapter.titleString(); } final CellBinding thatItBinding = performContext.getPeer().getThatItBinding(); throw ScenarioBoundValueException.current(thatItBinding, actualStr); } return null; }
private void createFieldData(final ObjectAdapter object, final ObjectData data, final ObjectAssociation field) { Object fieldData; if (field.isOneToManyAssociation()) { final ObjectAdapter coll = field.get(object); fieldData = createCollectionData(coll); } else if (field.getSpecification().isEncodeable()) { final EncodableFacet facet = field.getSpecification().getFacet(EncodableFacet.class); final ObjectAdapter value = field.get(object); fieldData = facet.toEncodedString(value); } else if (field.isOneToOneAssociation()) { final ObjectAdapter ref = ((OneToOneAssociation) field).get(object); fieldData = createReferenceData(ref); } else { throw new UnknownTypeException(field); } data.addField(field.getId(), fieldData); }