@Override public String checkFieldType(final ObjectAssociation objectField) { return objectField.isOneToManyAssociation() ? null : "is not a collection"; }
@Override protected boolean ignoreField(final ObjectAssociation field) { return field.isOneToManyAssociation(); }
@Override protected String checkFieldType(final ObjectAssociation objectField) { return objectField.isOneToManyAssociation() ? null : "must be a collection"; }
@Override public boolean accept(final ObjectAssociation property) { return property.isOneToManyAssociation(); } };
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 OneToManyAssociation getCollectionThatIsVisibleAndUsable(final String collectionId, final Intent intent, Where where) { final ObjectAssociation association = objectAdapter.getSpecification().getAssociation(collectionId); if (association == null || !association.isOneToManyAssociation()) { throwNotFoundException(collectionId, MemberType.COLLECTION); } final OneToManyAssociation collection = (OneToManyAssociation) association; return memberThatIsVisibleAndUsable(collection, MemberType.COLLECTION, intent, where); }
private ObjectData createObjectData(final ObjectAdapter adapter) { transientObjects.add(adapter.getOid()); final ObjectSpecification cls = adapter.getSpecification(); final List<ObjectAssociation> fields = cls.getAssociations(); final ObjectData data = new ObjectData(adapter.getOid(), adapter.getResolveState().name(), cls.getFullIdentifier()); for (int i = 0; i < fields.size(); i++) { if (fields.get(i).isNotPersisted()) { if (fields.get(i).isOneToManyAssociation()) { continue; } if (fields.get(i).containsFacet(PropertyOrCollectionAccessorFacet.class) && !fields.get(i).containsFacet(PropertySetterFacet.class)) { LOG.debug("ignoring not-settable field " + fields.get(i).getName()); continue; } } createFieldData(adapter, data, fields.get(i)); } return data; }
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 updateFields(final ObjectAdapter object, final Data state) { final ObjectData od = (ObjectData) state; final List<ObjectAssociation> fields = object.getSpecification().getAssociations(Contributed.EXCLUDED); 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); } }
protected OneToManyAssociation getCollectionThatIsVisibleForIntent(final String collectionId, final Intent intent, Where where) { final ObjectAssociation association; try { final ObjectSpecification specification = objectAdapter.getSpecification(); association = specification.getAssociation(collectionId); } catch(Exception ex) { // fall through throwNotFoundException(collectionId, MemberType.COLLECTION); return null; // to keep compiler happy. } if (association == null || !association.isOneToManyAssociation()) { throwNotFoundException(collectionId, MemberType.COLLECTION); } final OneToManyAssociation collection = (OneToManyAssociation) association; return memberThatIsVisibleForIntent(collection, MemberType.COLLECTION, intent, where); }
@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)); } }
public OneToManyAssociation getCollectionThatIsVisibleForIntent( final String collectionId, final Intent intent) { final Where where = rendererContext.getWhere(); final ObjectAssociation association; try { final ObjectSpecification specification = objectAdapter.getSpecification(); association = specification.getAssociation(collectionId); } catch(Exception ex) { // fall through throwNotFoundException(collectionId, MemberType.COLLECTION); return null; // to keep compiler happy. } if (association == null || !association.isOneToManyAssociation()) { throwNotFoundException(collectionId, MemberType.COLLECTION); } final OneToManyAssociation collection = (OneToManyAssociation) association; return memberThatIsVisibleForIntent(collection, MemberType.COLLECTION, intent); }
@Override public void resolveField(final ObjectAdapter objectAdapter, final ObjectAssociation field) { if (field.isNotPersisted() || field.isOneToManyAssociation() || field.getSpecification().isCollectionOrIsAggregated()) { return; } final ObjectAdapter referenceAdapter = field.get(objectAdapter); if (referenceAdapter == null || referenceAdapter.getResolveState().isResolved()) { return; } if (!referenceAdapter.isPersistent()) { return; } if (LOG.isInfoEnabled()) { // don't log object - it's toString() may use the unresolved field // or unresolved collection LOG.info("resolve field " + objectAdapter.getSpecification().getShortIdentifier() + "." + field.getId() + ": " + referenceAdapter.getSpecification().getShortIdentifier() + " " + referenceAdapter.getResolveState().code() + " " + referenceAdapter.getOid()); } resolveFieldFromPersistenceLayer(objectAdapter, field); }
private void updateField(final ObjectAdapter objectAdapter, final ObjectData objectData, final ObjectAssociation objectAssoc) { final Object fieldData = objectData.getEntry(objectAssoc.getId()); if (objectAssoc.isOneToManyAssociation()) { updateOneToManyAssociation(objectAdapter, (OneToManyAssociation) objectAssoc, (CollectionData) fieldData); } else if (objectAssoc.getSpecification().containsFacet(EncodableFacet.class)) { final EncodableFacet facet = objectAssoc.getSpecification().getFacet(EncodableFacet.class); final ObjectAdapter value = facet.fromEncodedString((String) fieldData); ((OneToOneAssociation) objectAssoc).initAssociation(objectAdapter, value); } else if (objectAssoc.isOneToOneAssociation()) { updateOneToOneAssociation(objectAdapter, (OneToOneAssociation) objectAssoc, (Data) fieldData); } }
private void updateField(final ObjectAdapter object, final ObjectData od, final ObjectAssociation field) { final Object fieldData = od.getEntry(field.getId()); if (field.isOneToManyAssociation()) { updateOneToManyAssociation(object, (OneToManyAssociation) field, (CollectionData) fieldData); } else if (field.getSpecification().containsFacet(EncodableFacet.class)) { final EncodableFacet facet = field.getSpecification().getFacet(EncodableFacet.class); final ObjectAdapter value = facet.fromEncodedString((String) fieldData); ((OneToOneAssociation) field).initAssociation(object, value); } else if (field.isOneToOneAssociation()) { updateOneToOneAssociation(object, (OneToOneAssociation) field, (Data) fieldData); } }
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); }
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); }
@Override public void process(final Request request) { ObjectAdapter collection; final String field = request.getOptionalProperty(FIELD); final RequestContext context = request.getContext(); if (field != null) { final String id = request.getRequiredProperty(OBJECT); final ObjectAdapter object = context.getMappedObjectOrResult(id); final ObjectAssociation objectField = object.getSpecification().getAssociation(field); if (!objectField.isOneToManyAssociation()) { throw new ScimpiException("Field " + objectField.getId() + " is not a collection"); } collection = objectField.get(object); } else { final String id = request.getOptionalProperty(COLLECTION); collection = context.getMappedObjectOrResult(id); } final ObjectSpecification elementSpecification = collection.getElementSpecification(); final String name = elementSpecification.getSingularName(); request.appendAsHtmlEncoded(name); }
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()); } }
private void addMembers() { final JsonRepresentation membersList = JsonRepresentation.newArray(); representation.mapPut("members", membersList); final List<ObjectAssociation> associations = objectSpecification.getAssociations(); for (final ObjectAssociation association : associations) { if (association.isOneToOneAssociation()) { final OneToOneAssociation property = (OneToOneAssociation) association; final LinkBuilder linkBuilder = PropertyDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), Rel.PROPERTY, objectSpecification, property); membersList.arrayAdd(linkBuilder.build()); } else if (association.isOneToManyAssociation()) { final OneToManyAssociation collection = (OneToManyAssociation) association; final LinkBuilder linkBuilder = CollectionDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), 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(getResourceContext(), Rel.ACTION, objectSpecification, action); membersList.arrayAdd(linkBuilder.build()); } }