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; }
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; }