protected Object homePageIfUsable(ObjectAdapter serviceAdapter, ObjectAction objectAction) { if (!objectAction.containsDoOpFacet(HomePageFacet.class)) { return null; } final Consent visibility = objectAction.isVisible(serviceAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE); if (visibility.isVetoed()) { return null; } final Consent usability = objectAction.isUsable(serviceAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE); if (usability.isVetoed()) { return null; } final ObjectAdapter mixedInAdapter = null; final ObjectAdapter[] parameters = {}; final ObjectAdapter objectAdapter = objectAction.executeWithRuleChecking( serviceAdapter, mixedInAdapter, parameters, InteractionInitiatedBy.USER, WHERE_FOR_ACTION_INVOCATION); return objectAdapter != null ? objectAdapter.getObject() : null; }
public String getReasonInvalidIfAny() { final ObjectAdapter adapter = getObjectAdapterMemento().getObjectAdapter(ConcurrencyChecking.CHECK); final Consent validity = adapter.getSpecification().isValid(adapter, InteractionInitiatedBy.USER); return validity.isAllowed() ? null : validity.getReason(); }
@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(ConcurrencyChecking.CHECK); final ObjectAdapter currentValue = property.get(parentAdapter); Localization localization = IsisContext.getLocalization(); final ObjectAdapter proposedAdapter = parseableFacet.parseTextEntry(currentValue, proposedPojoAsStr, localization); final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter); 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(); } }
@Override public String validate(final ScalarModel scalarModel, final ObjectAdapter proposedAdapter) { final ObjectAdapter parentAdapter = scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK); final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty(); try { final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter); return valid.isAllowed() ? null : valid.getReason(); } catch (final Exception ex) { return ex.getLocalizedMessage(); } }
@Override public String disable(final ScalarModel scalarModel, final Where where) { final ObjectAdapter parentAdapter = scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.CHECK); final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty(); try { final AuthenticationSession session = scalarModel.getAuthenticationSession(); final Consent usable = property.isUsable(session, parentAdapter, where); return usable.isAllowed() ? null : usable.getReason(); } catch (final Exception ex) { return ex.getLocalizedMessage(); } }
private FormState validateObject( final RequestContext context, final ObjectAdapter object, final List<ObjectAssociation> fields) { final FormState formState = new FormState(); for (int i = 0; i < fields.size(); i++) { final ObjectAssociation field = fields.get(i); final String fieldId = field.getId(); String newEntry = context.getParameter(fieldId); if (fields.get(i).isOneToManyAssociation()) { continue; } if (fields .get(i) .isVisible(IsisContext.getAuthenticationSession(), object, where) .isVetoed()) { continue; } if (field.isUsable(IsisContext.getAuthenticationSession(), object, where).isVetoed()) { continue; } if (newEntry != null && newEntry.equals("-OTHER-")) { newEntry = context.getParameter(fieldId + "-other"); } if (newEntry == null) { // TODO duplicated in EditObject; line 97 final ObjectSpecification spec = field.getSpecification(); if (spec.isOfType(IsisContext.getSpecificationLoader().loadSpecification(boolean.class)) || spec.isOfType( IsisContext.getSpecificationLoader().loadSpecification(Boolean.class))) { newEntry = FALSE; } else { continue; } } final FieldEditState fieldState = formState.createField(fieldId, newEntry); Consent consent = null; if (field.isMandatory() && (newEntry.equals("") || newEntry.equals("NULL"))) { consent = new Veto(field.getName() + " required"); formState.setError("Not all fields have been set"); } else if (field.getSpecification().containsFacet(ParseableFacet.class)) { try { final ParseableFacet facet = field.getSpecification().getFacet(ParseableFacet.class); final ObjectAdapter originalValue = field.get(object); Localization localization = IsisContext.getLocalization(); final ObjectAdapter newValue = facet.parseTextEntry(originalValue, newEntry, localization); consent = ((OneToOneAssociation) field).isAssociationValid(object, newValue); fieldState.setValue(newValue); } catch (final TextEntryParseException e) { consent = new Veto(e.getMessage()); // formState.setError("Not all fields have been entered correctly"); } } else { final ObjectAdapter associate = newEntry.equals("null") ? null : context.getMappedObject(newEntry); if (associate != null) { IsisContext.getPersistenceSession().resolveImmediately(associate); } consent = ((OneToOneAssociation) field).isAssociationValid(object, associate); fieldState.setValue(associate); } if (consent.isVetoed()) { fieldState.setError(consent.getReason()); formState.setError("Not all fields have been entered correctly"); } } // TODO check the state of the complete object. return formState; }