private NakedObjectAssociation fieldFromActualSpec(final NakedObjectSpecification spec, final NakedObjectAssociation field) { final String fieldName = field.getId(); return spec.getAssociation(fieldName); }
private NakedObjectAssociation[] loadFields(final NakedObjectSpecification specification) { final NakedObjectAssociation[] originalFields = specification.getAssociations(); final Vector sorted = new Vector(originalFields.length); outer: for (int i = 0; i < originalFields.length; i++) { final String fieldId = originalFields[i].getId(); for (int j = 0; j < sorted.size(); j++) { final NakedObjectAssociation sortedElement = (NakedObjectAssociation) sorted.elementAt(j); final String sortedFieldId = sortedElement.getId(); if (sortedFieldId.compareTo(fieldId) > 0) { sorted.insertElementAt(originalFields[i], j); continue outer; } } sorted.addElement(originalFields[i]); } final NakedObjectAssociation[] fields = new NakedObjectAssociation[originalFields.length]; sorted.copyInto(fields); return fields; }
private NakedObjectAssociation[] loadFields(final NakedObjectSpecification specification) { final NakedObjectAssociation[] originalFields = specification.getAssociations(); final Vector sorted = new Vector(originalFields.length); outer: for (int i = 0; i < originalFields.length; i++) { final String fieldId = originalFields[i].getId(); for (int j = 0; j < sorted.size(); j++) { final NakedObjectAssociation sortedElement = (NakedObjectAssociation) sorted.elementAt(j); final String sortedFieldId = sortedElement.getId(); if (sortedFieldId.compareTo(fieldId) > 0) { sorted.insertElementAt(originalFields[i], j); continue outer; } } sorted.addElement(originalFields[i]); } final NakedObjectAssociation[] fields = new NakedObjectAssociation[originalFields.length]; sorted.copyInto(fields); return fields; }
public NakedObjectAssociation getAssociation(final String id) { // TODO put fields into hash for (int i = 0; i < fields.length; i++) { if (fields[i].getId().equals(id)) { return fields[i]; } } throw new NakedObjectSpecificationException("No field called '" + id + "' in '" + getSingularName() + "'"); }
public NakedObjectAssociation getAssociation(final String id) { // TODO put fields into hash for (int i = 0; i < fields.length; i++) { if (fields[i].getId().equals(id)) { return fields[i]; } } throw new NakedObjectSpecificationException("No field called '" + id + "' in '" + getSingularName() + "'"); }
public CollectionLink( final NakedObjectAssociation field, final NakedObject collection, final String description, final String objectId) { this.description = description; this.objectId = objectId; fieldId = field.getId(); title = collection.titleString(); specification = field.getSpecification(); }
public CollectionLink( final NakedObjectAssociation field, final NakedObject collection, final String description, final String objectId) { this.description = description; this.objectId = objectId; fieldId = field.getId(); title = collection.titleString(); specification = field.getSpecification(); }
private void resolveFieldFromPersistenceLayer(final NakedObject adapter, final NakedObjectAssociation field) { final IdentityData adapterData = encoderDecoder.encodeIdentityData(adapter); final String fieldId = field.getId(); getTransactionManager().executeWithinTransaction(new TransactionalClosureAbstract() { public void execute() { ResolveFieldRequest request = new ResolveFieldRequest(getAuthenticationSession(), adapterData, fieldId); ResolveFieldResponse response = serverFacade.resolveField( request); final Data data = response.getData(); @SuppressWarnings("unused") NakedObject decodedAdapter = encoderDecoder.decode(data); }}); }
private void dumpObjectData(final StringBuffer str, final Data data, final int indent, final Vector complete) { final ObjectData objectData = ((ObjectData) data); str.append("ObjectData@" + Integer.toHexString(objectData.hashCode()) + " " + objectData.getType() + ":" + objectData.getOid() + ":" + (objectData.hasCompleteData() ? "C" : "-") + ":" + objectData.getVersion()); if (complete.contains(objectData)) { str.append(" (already detailed)"); return; } complete.addElement(objectData); final NakedObjectSpecification spec = NakedObjectsContext.getSpecificationLoader().loadSpecification(data.getType()); final NakedObjectAssociation[] fs = encoder.getFieldOrder(spec); final Object[] fields = objectData.getFieldContent(); for (int i = 0; fields != null && i < fields.length; i++) { str.append("\n"); str.append(padding(indent)); str.append(i + 1); str.append(") "); str.append(fs[i].getId()); str.append(": "); dump(str, (Data) fields[i], indent + 1, complete); } }
private void resolveFieldFromPersistenceLayer(final NakedObject adapter, final NakedObjectAssociation field) { final IdentityData adapterData = encoderDecoder.encodeIdentityData(adapter); final String fieldId = field.getId(); getTransactionManager().executeWithinTransaction(new TransactionalClosureAbstract() { public void execute() { ResolveFieldRequest request = new ResolveFieldRequest(getAuthenticationSession(), adapterData, fieldId); ResolveFieldResponse response = serverFacade.resolveField( request); final Data data = response.getData(); @SuppressWarnings("unused") NakedObject decodedAdapter = encoderDecoder.decode(data); }}); }
private void dumpObjectData(final StringBuffer str, final Data data, final int indent, final Vector complete) { final ObjectData objectData = ((ObjectData) data); str.append("ObjectData@" + Integer.toHexString(objectData.hashCode()) + " " + objectData.getType() + ":" + objectData.getOid() + ":" + (objectData.hasCompleteData() ? "C" : "-") + ":" + objectData.getVersion()); if (complete.contains(objectData)) { str.append(" (already detailed)"); return; } complete.addElement(objectData); final NakedObjectSpecification spec = NakedObjectsContext.getSpecificationLoader().loadSpecification(data.getType()); final NakedObjectAssociation[] fs = encoder.getFieldOrder(spec); final Object[] fields = objectData.getFieldContent(); for (int i = 0; fields != null && i < fields.length; i++) { str.append("\n"); str.append(padding(indent)); str.append(i + 1); str.append(") "); str.append(fs[i].getId()); str.append(": "); dump(str, (Data) fields[i], indent + 1, complete); } }
public void resolveField(final NakedObject adapter, final NakedObjectAssociation field) { if (field.getSpecification().isCollectionOrIsAggregated()) { return; } final NakedObject 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); }
public void resolveField(final NakedObject adapter, final NakedObjectAssociation field) { if (field.getSpecification().isCollectionOrIsAggregated()) { return; } final NakedObject 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); }
private void setUpCollectionFieldForNoContents( final ObjectData parentData, final NakedObject adapter, final NakedObjectAssociation field) { final NakedObject collection = field.get(adapter); if (collection.getResolveState() == ResolveState.GHOST) { return; } if (LOG.isDebugEnabled()) { LOG.debug("No data for collection: " + field.getId()); } Version adapterVersion = adapter.getVersion(); Version parentVersion = parentData.getVersion(); if (adapterVersion.different(parentVersion)) { if (LOG.isDebugEnabled()) { LOG.debug("clearing collection as versions differ: " + adapter.getVersion() + " " + parentData.getVersion()); } final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collection); facet.init(collection, new NakedObject[0]); collection.changeState(ResolveState.GHOST); } }
private void setUpCollectionFieldForNoContents( final ObjectData parentData, final NakedObject adapter, final NakedObjectAssociation field) { final NakedObject collection = field.get(adapter); if (collection.getResolveState() == ResolveState.GHOST) { return; } if (LOG.isDebugEnabled()) { LOG.debug("No data for collection: " + field.getId()); } Version adapterVersion = adapter.getVersion(); Version parentVersion = parentData.getVersion(); if (adapterVersion.different(parentVersion)) { if (LOG.isDebugEnabled()) { LOG.debug("clearing collection as versions differ: " + adapter.getVersion() + " " + parentData.getVersion()); } final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collection); facet.init(collection, new NakedObject[0]); collection.changeState(ResolveState.GHOST); } }
private void setUpCollectionFieldForEntireContents( final NakedObject adapter, final NakedObjectAssociation field, final CollectionData collectionContentData, final KnownObjectsRequest knownObjects) { final int size = collectionContentData.getElements().length; final NakedObject[] elements = new NakedObject[size]; for (int j = 0; j < elements.length; j++) { elements[j] = deserializeObject(collectionContentData.getElements()[j], knownObjects); if (LOG.isDebugEnabled()) { LOG.debug("adding element to " + field.getId() + ": " + elements[j]); } } final NakedObject col = field.get(adapter); final ResolveState initialState = col.getResolveState(); final ResolveState state = nextState(initialState, collectionContentData.hasAllElements()); if (state != null) { PersistorUtil.start(col, state); final NakedObject collection = ((OneToManyAssociation) field).get(adapter); final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collection); facet.init(collection, elements); PersistorUtil.end(col); } else { LOG.warn("not initialising collection " + col + " due to current state " + initialState); } }
private void updateField(final NakedObject object, final ObjectData od, final NakedObjectAssociation 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 NakedObject value = facet.fromEncodedString((String) fieldData); ((OneToOneAssociation) field).initAssociation(object, value); } else if (field.isOneToOneAssociation()) { updateOneToOneAssociation(object, (OneToOneAssociation) field, (Data) fieldData); } }
private void initObjectSetupCollection(final NakedObject object, final ObjectData data, final NakedObjectAssociation field) { /* * The internal collection is already a part of the object, and therefore cannot be recreated, but its * oid must be set */ final ReferenceVector refs = (ReferenceVector) data.get(field.getId()); final NakedObject collection = field.get(object); PersistorUtil.start(collection, ResolveState.RESOLVING); final int size = refs == null ? 0 : refs.size(); final NakedObject[] elements = new NakedObject[size]; for (int j = 0; j < size; j++) { final SerialOid elementOid = refs.elementAt(j); NakedObject adapter; adapter = getAdapterManager().getAdapterFor(elementOid); if (adapter == null) { adapter = getObject(elementOid, null); } elements[j] = adapter; } final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collection); facet.init(collection, elements); PersistorUtil.end(collection); }
private void createFieldData(final NakedObject object, final ObjectData data, final NakedObjectAssociation field) { Object fieldData; if (field.isOneToManyAssociation()) { final NakedObject coll = field.get(object); fieldData = createCollectionData(coll); } else if (field.getSpecification().isEncodeable()) { final EncodableFacet facet = field.getSpecification().getFacet(EncodableFacet.class); final NakedObject value = field.get(object); fieldData = facet.toEncodedString(value); } else if (field.isOneToOneAssociation()) { final NakedObject ref = ((OneToOneAssociation) field).get(object); fieldData = createReferenceData(ref); } else { throw new UnknownTypeException(field); } data.addField(field.getId(), fieldData); }
private ObjectData createObjectData(final NakedObject object, final boolean ensurePersistent) { LOG.debug("compiling object data for " + object); ObjectData data; data = new ObjectData(object.getSpecification(), (SerialOid) object.getOid(), (FileVersion) object.getVersion()); final NakedObjectAssociation[] fields = object.getSpecification().getAssociations(); for (int i = 0; i < fields.length; i++) { if (!fields[i].isPersisted()) { continue; } final NakedObject field = fields[i].get(object); final NakedObject fieldContent = field; final String fieldId = fields[i].getId(); if (fields[i].isOneToManyAssociation()) { data.addInternalCollection(fieldContent, fieldId, ensurePersistent); } else if (fields[i].getSpecification().isEncodeable()) { final boolean isEmpty = fields[i].isEmpty(object); if (field == null || isEmpty) { data.saveValue(fieldId, isEmpty, null); } else { final EncodeableFacet facet = fieldContent.getSpecification().getFacet(EncodeableFacet.class); final String encodedValue = facet.toEncodedString(fieldContent); data.saveValue(fieldId, isEmpty, encodedValue); } } else if (fields[i].isOneToOneAssociation()) { data.addAssociation(fieldContent, fieldId, ensurePersistent); } } return data; }