private void ensureAssociationModifiableElseThrowException(final AuthenticationSession session, final ObjectAdapter targetAdapter, final ObjectAssociation association) { if (!association.isVisible(session, targetAdapter).isAllowed() || association.isUsable(session, targetAdapter).isVetoed()) { throw new IsisException("can't modify field as not visible or editable"); } }
@Override public boolean isVisible(final String name) { final ObjectAssociation fld = specification.getAssociation(name); final boolean isVisible = fld.isVisible(IsisContext.getAuthenticationSession(), object).isAllowed(); final boolean isUseable = fld.isUsable(IsisContext.getAuthenticationSession(), object).isAllowed(); return isVisible && isUseable; }
@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; }
@Override boolean test(final Request request, final String attributeName, final String targetId) { final ObjectAdapter object = MethodsUtils.findObject(request.getContext(), targetId); final ObjectAssociation objectField = object.getSpecification().getAssociation(attributeName); final Consent usable = objectField.isUsable(IsisContext.getAuthenticationSession(), object); return usable.isAllowed(); } }
private void changeObject(final RequestContext context, final ObjectAdapter object, final FormState editState, final List<ObjectAssociation> fields) { for (int i = 0; i < fields.size(); i++) { final FieldEditState field = editState.getField(fields.get(i).getId()); if (field == null) { continue; } final String newEntry = field.getEntry(); final ObjectAdapter originalValue = fields.get(i).get(object); final boolean isVisible = fields.get(i).isVisible(IsisContext.getAuthenticationSession(), object).isAllowed(); final boolean isUsable = fields.get(i).isUsable(IsisContext.getAuthenticationSession(), object).isAllowed(); final boolean bothEmpty = originalValue == null && newEntry.equals(""); final boolean bothSame = newEntry.equals(originalValue == null ? "" : originalValue.titleString()); if ((!isVisible || !isUsable) || bothEmpty || bothSame) { if (fields.get(i).getSpecification().getFacet(ParseableFacet.class) == null) { // REVIEW restores object to loader context.getMappedObject(newEntry); } continue; } if (fields.get(i).getSpecification().containsFacet(ParseableFacet.class)) { final ParseableFacet facet = fields.get(i).getSpecification().getFacet(ParseableFacet.class); final ObjectAdapter newValue = facet.parseTextEntry(originalValue, newEntry); ((OneToOneAssociation) fields.get(i)).set(object, newValue); } else { ((OneToOneAssociation) fields.get(i)).set(object, field.getValue()); } } }
@Override protected void addField(final Request request, final ObjectAdapter object, final ObjectAssociation field, final LinkedObject linkedObject, final boolean showIcons) { if (field.isOneToManyAssociation()) { final String noColumnsString = request.getOptionalProperty("no-columns", "3"); final String tableClass = request.getOptionalProperty("table-class"); final String rowClassesList = request.getOptionalProperty("row-classes", ODD_ROW_CLASS + "|" + EVEN_ROW_CLASS); String[] rowClasses = new String[0]; if (rowClassesList != null) { rowClasses = rowClassesList.split("[,|/]"); } int noColumns; IsisContext.getPersistenceSession().resolveField(object, field); final ObjectAdapter collection = field.get(object); final ObjectSpecification elementSpec = collection.getElementSpecification(); final List<ObjectAssociation> fields = elementSpec.getAssociations(ObjectAssociationFilters.STATICALLY_VISIBLE_ASSOCIATIONS); if (noColumnsString.equalsIgnoreCase("all")) { noColumns = fields.size(); } else { noColumns = Math.min(fields.size(), Integer.valueOf(noColumnsString)); } final boolean isFieldEditable = field.isUsable(IsisContext.getAuthenticationSession(), object).isAllowed(); final String summary = "Table of elements in " + field.getName(); TableView.write(request, summary, object, field, collection, noColumns, fields, isFieldEditable, showIconByDefault(), tableClass, rowClasses); } else { super.addField(request, object, field, linkedObject, showIcons); } }
/** * 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()); }
continue; if (field.isUsable(IsisContext.getAuthenticationSession(), object).isVetoed()) { continue;
private void initializeFields(final RequestContext context, final ObjectAdapter object, final InputField[] formFields, final FormState entryState, final boolean includeUnusableFields) { for (final InputField formField : formFields) { final String fieldId = formField.getName(); final ObjectAssociation field = object.getSpecification().getAssociation(fieldId); final AuthenticationSession session = IsisContext.getAuthenticationSession(); final Consent usable = field.isUsable(session, object); final ObjectAdapter[] options = field.getChoices(object); FieldFactory.initializeField(context, object, field, options, field.isMandatory(), formField); final boolean isEditable = usable.isAllowed(); if (!isEditable) { formField.setDescription(usable.getReason()); } formField.setEditable(isEditable); final boolean hiddenField = field.isVisible(session, object).isVetoed(); final boolean unusable = usable.isVetoed(); final boolean hideAsUnusable = unusable && !includeUnusableFields; if (hiddenField || hideAsUnusable) { formField.setHidden(true); } } }
throw new ScimpiException("Field " + objectField.getId() + " is not a collection"); isFieldEditable = objectField.isUsable(IsisContext.getAuthenticationSession(), object).isAllowed(); getPersistenceSession().resolveField(object, objectField); collection = objectField.get(object);
Consent usable = field.isUsable(IsisContext.getAuthenticationSession(), adapter); if (usable.isAllowed()) { usable = ((OneToManyAssociation) field).isValidToRemove(adapter, element);