private void createAssociationData(final ObjectAdapter adapter, final ObjectData data, final ObjectAssociation objectAssoc) { Object assocData; if (objectAssoc.isOneToManyAssociation()) { final ObjectAdapter collAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK); assocData = createCollectionData(collAdapter); } else if (objectAssoc.getSpecification().isEncodeable()) { final EncodableFacet facet = objectAssoc.getSpecification().getFacet(EncodableFacet.class); final ObjectAdapter value = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK); assocData = facet.toEncodedString(value); } else if (objectAssoc.isOneToOneAssociation()) { final ObjectAdapter referencedAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK); assocData = createReferenceData(referencedAdapter); } else { throw new UnknownTypeException(objectAssoc); } data.addField(objectAssoc.getId(), assocData); }
private void updateFields(final ObjectAdapter object, final Data state) { final ObjectData od = (ObjectData) state; final List<ObjectAssociation> fields = object.getSpecification().getAssociations(); for (final ObjectAssociation field : fields) { if (field.isNotPersisted()) { if (field.isOneToManyAssociation()) { continue; } if (field.containsFacet(PropertyOrCollectionAccessorFacet.class) && !field.containsFacet(PropertySetterFacet.class)) { LOG.debug("ignoring not-settable field " + field.getName()); continue; } } updateField(object, od, field); } }
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"); } }
public LinkedObject[] linkedFields(final List<ObjectAssociation> fields) { final LinkedObject[] includedFields = new LinkedObject[fields.size()]; for (int i = 0; i < fields.size(); i++) { final String id2 = fields.get(i).getId(); if (fields.get(i).isOneToOneAssociation() && linkedFields.containsKey(id2)) { includedFields[i] = linkedFields.get(id2); } } return includedFields; }
private InputField[] createFields(final List<ObjectAssociation> fields) { final InputField[] formFields = new InputField[fields.size()]; int length = 0; for (int i = 0; i < fields.size(); i++) { if (!fields.get(i).isOneToManyAssociation()) { formFields[i] = new InputField(fields.get(i).getId()); length++; } } final InputField[] array = new InputField[length]; for (int i = 0, j = 0; i < formFields.length; i++) { if (formFields[i] != null) { array[j++] = formFields[i]; } } return array; }
protected ObjectData createObjectData(final ObjectAdapter adapter, final boolean ensurePersistent) { if (LOG.isDebugEnabled()) { LOG.debug("compiling object data for " + adapter); } final ObjectSpecification adapterSpec = adapter.getSpecification(); final ObjectData data = new ObjectData(adapterSpec, (SerialOid) adapter.getOid(), (FileVersion) adapter.getVersion()); final List<ObjectAssociation> associations = adapterSpec.getAssociations(); for (final ObjectAssociation association : associations) { if (association.isNotPersisted()) { continue; } final ObjectAdapter associatedObject = association.get(adapter); final boolean isEmpty = association.isEmpty(adapter); final String associationId = association.getId(); if (association.isOneToManyAssociation()) { saveCollection(associationId, data, associatedObject, ensurePersistent); } else if (association.getSpecification().isEncodeable()) { saveEncoded(data, associationId, associatedObject, isEmpty); } else if (association.isOneToOneAssociation()) { saveReference(data, associationId, associatedObject, ensurePersistent); } } return data; }
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()); } } }
public List<ObjectAssociation> includedFields(final List<ObjectAssociation> originalFields) { final List<ObjectAssociation> includedFields = Lists.newArrayList(); for (int i = 0; i < originalFields.size(); i++) { final String id2 = originalFields.get(i).getId(); if (includes(id2)) { includedFields.add(originalFields.get(i)); } } return includedFields; }
if (field.isNotPersisted()) { continue; if (field.isOneToManyAssociation()) { final ObjectAdapter collection = field.get(object); if (collection == null) { throw new ObjectPersistenceException("Collection " + field.getName() + " does not exist in " + object.getSpecification().getFullIdentifier()); final ObjectAdapter fieldValue = field.get(object); if (fieldValue == null) { continue;
private void addMembers() { final JsonRepresentation membersList = JsonRepresentation.newArray(); representation.mapPut("members", membersList); final List<ObjectAssociation> associations = objectSpecification.getAssociations(Contributed.EXCLUDED); for (final ObjectAssociation association : associations) { if (association.isOneToOneAssociation()) { final OneToOneAssociation property = (OneToOneAssociation) association; final LinkBuilder linkBuilder = PropertyDescriptionReprRenderer.newLinkToBuilder(getRendererContext(), Rel.PROPERTY, objectSpecification, property); membersList.arrayAdd(linkBuilder.build()); } else if (association.isOneToManyAssociation()) { final OneToManyAssociation collection = (OneToManyAssociation) association; final LinkBuilder linkBuilder = CollectionDescriptionReprRenderer.newLinkToBuilder(getRendererContext(), Rel.PROPERTY, objectSpecification, collection); membersList.arrayAdd(linkBuilder.build()); } } final List<ObjectAction> actions = objectSpecification.getObjectActions(Contributed.INCLUDED); for (final ObjectAction action : actions) { final LinkBuilder linkBuilder = ActionDescriptionReprRenderer.newLinkToBuilder(getRendererContext(), Rel.ACTION, objectSpecification, action); membersList.arrayAdd(linkBuilder.build()); } }
@Override public void resolveField(final ObjectAdapter adapter, final ObjectAssociation field) { if (field.getSpecification().isCollectionOrIsAggregated()) { return; } final ObjectAdapter referenceAdapter = field.get(adapter); if (referenceAdapter != null && referenceAdapter.getResolveState().isResolved()) { return; } if (referenceAdapter == null || !referenceAdapter.isPersistent()) { return; } if (LOG.isInfoEnabled()) { LOG.info("resolveField on server: " + adapter + "/" + field.getId()); } resolveFieldFromPersistenceLayer(adapter, field); }
@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); } }
@Override public void resolveField(final ObjectAdapter object, final ObjectAssociation field) { final ObjectAdapter reference = field.get(object); resolveImmediately(reference); }
@Override public boolean accept(final ObjectAssociation property) { return property.isOneToManyAssociation(); } };
protected void appendEqualsClause(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object, final String condition) { sql.append(Sql.sqlFieldName(field.getId())); sql.append(condition); final ObjectAdapter fieldValue = field.get(object); sql.append("?"); connector.addToQueryValues(preparedStatementObject(fieldValue)); }
private void copyEntryState(final RequestContext context, final ObjectAdapter object, final InputField[] formFields, final FormState entryState) { for (final InputField formField : formFields) { final String fieldId = formField.getName(); final ObjectAssociation field = object.getSpecification().getAssociation(fieldId); if (field.isVisible(IsisContext.getAuthenticationSession(), object).isAllowed() && formField.isEditable()) { final FieldEditState fieldState = entryState.getField(field.getId()); final String entry = fieldState == null ? "" : fieldState.getEntry(); formField.setValue(entry); final String error = fieldState == null ? "" : fieldState.getError(); formField.setErrorText(error); } } }
if (field.isNotPersisted()) { continue; } else if (field instanceof OneToManyAssociation) { final ObjectAdapter collection = field.get(object); if (collection == null) { throw new ObjectPersistenceException("Collection " + field.getName() + " does not exist in " + object.getSpecification().getFullIdentifier()); final ObjectAdapter fieldValue = field.get(object); if (fieldValue == null) { continue;
@Override public void resolveField(final ObjectAdapter object, final ObjectAssociation field) { if (field.isOneToManyAssociation()) { final DatabaseConnector connection = connectionPool.acquire(); final ObjectSpecification spec = object.getSpecification(); final ObjectMapping mapper = objectMappingLookup.getMapping(spec, connection); mapper.resolveCollection(connection, object, field); connectionPool.release(connection); } else { resolveImmediately(field.get(object)); } }
@Override public boolean accept(final ObjectAssociation association) { return association.isOneToOneAssociation(); } };
@Override public void process(final Request request) { final String id = request.getOptionalProperty(OBJECT); final String fieldName = request.getOptionalProperty(FIELD); final int truncateTo = Integer.valueOf(request.getOptionalProperty(TRUNCATE, "0")).intValue(); final ObjectAdapter object = request.getContext().getMappedObjectOrResult(id); String titleString; if (fieldName == null) { titleString = object.titleString(); } else { final ObjectAssociation field = object.getSpecification().getAssociation(fieldName); if (field.isVisible(IsisContext.getAuthenticationSession(), object).isVetoed()) { throw new ForbiddenException(field, ForbiddenException.VISIBLE); } final ObjectAdapter fieldReference = field.get(object); if (fieldReference != null) { titleString = fieldReference.titleString(); } else { titleString = ""; } } request.appendDebug(" " + titleString); request.appendTruncated(titleString, truncateTo); }