@Override public boolean accept(final NakedObjectAssociation property) { return property.isOneToManyAssociation(); } };
@Override public boolean accept(final NakedObjectAssociation property) { return property.isOneToManyAssociation(); } };
public boolean accept(NakedObjectAssociation t) { return t.isOneToManyAssociation() || (t.isOneToOneAssociation() && !((OneToOneAssociation)t).getSpecification().isParseable()); } });
private void setupReferencedObjects(final NakedObject adapter, final Vector all) { // TODO: is this code needed, then? Looks like it isn't... if (true) { return; } if (adapter == null || all.contains(adapter)) { return; } all.addElement(adapter); PersistorUtil.start(adapter, ResolveState.RESOLVING); final NakedObjectAssociation[] fields = adapter.getSpecification().getAssociations(); for (int i = 0; i < fields.length; i++) { final NakedObjectAssociation field = fields[i]; if (field.isOneToManyAssociation()) { final NakedObject col = field.get(adapter); final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(col); for (final Iterator<NakedObject> e = facet.iterator(col); e.hasNext();) { final NakedObject element = e.next(); setupReferencedObjects(element, all); } } else if (field.isOneToOneAssociation()) { final NakedObject fieldContent = field.get(adapter); setupReferencedObjects(fieldContent, all); } } PersistorUtil.end(adapter); }
private String debugObjectGraph(final NakedObject object, final int level, final Vector recursiveElements) { final StringBuffer s = new StringBuffer(); recursiveElements.addElement(object); // work through all its fields NakedObjectAssociation[] fields; fields = object.getSpecification().getAssociations(); for (int i = 0; i < fields.length; i++) { final NakedObjectAssociation field = fields[i]; final Object obj = field.get(object); final String id = field.getId(); indent(s, level); if (field.isOneToManyAssociation()) { s.append(id + ": \n" + debugCollectionGraph((NakedObject) obj, level + 1, recursiveElements)); } else { if (obj instanceof NakedObject) { if (recursiveElements.contains(obj)) { s.append(id + ": " + obj + "*\n"); } else { s.append(id + ": " + obj); s.append(debugGraph((NakedObject) obj, level + 1, recursiveElements)); } } else { s.append(id + ": " + obj); s.append("\n"); } } } return s.toString(); }
private static boolean skipField(final NakedObject object, final NakedObjectAssociation fld) { return fld.isOneToManyAssociation() || fld.isUsable(NakedObjectsContext.getAuthenticationSession(), object).isVetoed(); }
private static boolean skipField(final NakedObject object, final NakedObjectAssociation fld) { return fld.isOneToManyAssociation() || fld.isUsable(NakedObjectsContext.getAuthenticationSession(), object).isVetoed(); }
public boolean canDisplay(final Content content, ViewRequirement requirement) { if (requirement.is(ViewRequirement.CLOSED)) { return false; } else { int collections = 0; if (content instanceof ObjectContent) { final NakedObject object = content.getNaked(); final NakedObjectAssociation[] fields = object.getSpecification().getAssociations( NakedObjectAssociationFilters.dynamicallyVisible(NakedObjectsContext.getAuthenticationSession(), object)); for (int i = 0; i < fields.length; i++) { if (fields[i].isOneToManyAssociation()) { collections++; } } } return collections == 1; } }
/** * This is only used to control root nodes. Therefore a object tree can only be displayed for an object * with fields that are collections. */ public boolean canDisplay(final Content content, ViewRequirement requirement) { if (content.isObject() && content.getNaked() != null) { final NakedObject object = content.getNaked(); final NakedObjectAssociation[] fields = object.getSpecification().getAssociations( NakedObjectAssociationFilters.dynamicallyVisible(NakedObjectsContext.getAuthenticationSession(), object)); for (int i = 0; i < fields.length; i++) { if (fields[i].isOneToManyAssociation()) { return true; } } } return false; }
@Override public int canOpen(final Content content) { final NakedObject object = ((ObjectContent) content).getObject(); final NakedObjectAssociation[] fields = object.getSpecification().getAssociations( NakedObjectAssociationFilters.dynamicallyVisible(NakedObjectsContext.getAuthenticationSession(), object)); for (int i = 0; i < fields.length; i++) { if (fields[i].isOneToManyAssociation()) { return CAN_OPEN; } if ( showObjectContents && fields[i].isOneToOneAssociation() && !(SpecificationFacets.isBoundedSet(object.getSpecification()))) { return CAN_OPEN; } } return CANT_OPEN; }
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 setUpFields( final NakedObject adapter, final ObjectData adapterData, final KnownObjectsRequest knownObjects) { final Data[] fieldContent = adapterData.getFieldContent(); if (fieldContent != null && fieldContent.length > 0) { final NakedObjectAssociation[] fields = fieldOrderCache.getFields(adapter.getSpecification()); if (fields.length != fieldContent.length) { throw new NakedObjectsRemoteException("Data received for different number of fields; expected " + fields.length + ", but was " + fieldContent.length); } for (int i = 0; i < fields.length; i++) { final NakedObjectAssociation field = fields[i]; final Data fieldData = fieldContent[i]; if (fieldData == null || !field.isNotDerived()) { LOG.debug("no data for field " + field.getId()); continue; } if (field.isOneToManyAssociation()) { setUpCollectionField(adapter, adapterData, field, (CollectionData) fieldData, knownObjects); } else if (field.getSpecification().isEncodeable()) { setUpEncodedField(adapter, (OneToOneAssociation) field, fieldData); } else { setUpReferenceField(adapter, (OneToOneAssociation) field, fieldData, knownObjects); } } } }
private void setUpFields( final NakedObject adapter, final ObjectData adapterData, final KnownObjectsRequest knownObjects) { final Data[] fieldContent = adapterData.getFieldContent(); if (fieldContent != null && fieldContent.length > 0) { final NakedObjectAssociation[] fields = fieldOrderCache.getFields(adapter.getSpecification()); if (fields.length != fieldContent.length) { throw new NakedObjectsRemoteException("Data received for different number of fields; expected " + fields.length + ", but was " + fieldContent.length); } for (int i = 0; i < fields.length; i++) { final NakedObjectAssociation field = fields[i]; final Data fieldData = fieldContent[i]; if (fieldData == null || field.isDerived()) { LOG.debug("no data for field " + field.getId()); continue; } if (field.isOneToManyAssociation()) { setUpCollectionField(adapter, adapterData, field, (CollectionData) fieldData, knownObjects); } else if (field.getSpecification().isEncodeable()) { setUpEncodedField(adapter, (OneToOneAssociation) field, fieldData); } else { setUpReferenceField(adapter, (OneToOneAssociation) field, fieldData, knownObjects); } } } }
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 void initObject(final NakedObject object, final ObjectData data) { if (object.getResolveState().canChangeTo(ResolveState.RESOLVING)) { PersistorUtil.start(object, ResolveState.RESOLVING); final NakedObjectAssociation[] fields = object.getSpecification().getAssociations(); for (int i = 0; i < fields.length; i++) { final NakedObjectAssociation field = fields[i]; if (!field.isPersisted()) { continue; } final NakedObjectSpecification fieldSpecification = field.getSpecification(); if (fieldSpecification.isEncodeable()) { final EncodeableFacet encoder = fieldSpecification.getFacet(EncodeableFacet.class); NakedObject value; final String valueData = data.value(field.getId()); if (valueData == null || valueData.equals("NULL")) { value = null; } else { value = encoder.fromEncodedString(valueData); } ((OneToOneAssociation) field).initAssociation(object, value); } else if (field.isOneToManyAssociation()) { initObjectSetupCollection(object, data, field); } else if (field.isOneToOneAssociation()) { initObjectSetupReference(object, data, field); } } object.setOptimisticLock(data.getVersion()); PersistorUtil.end(object); } }
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; }
@Override public void execute(final Workspace workspace, final View view, final Location at) { final NakedObject original = view.getContent().getNaked(); // NakedObject original = getObject(); final NakedObjectSpecification spec = original.getSpecification(); final NakedObject clone = getPersistenceSession().createInstance(spec); final NakedObjectAssociation[] fields = spec.getAssociations(); for (int i = 0; i < fields.length; i++) { final NakedObject fld = fields[i].get(original); if (fields[i].isOneToOneAssociation()) { ((OneToOneAssociation) fields[i]).setAssociation(clone, fld); } else if (fields[i].isOneToManyAssociation()) { // clone.setValue((OneToOneAssociation) fields[i], fld.getObject()); } } // AbstractNakedObject clone = (AbstractNakedObject) createInstance(getClass()); // clone.copyObject(this); // clone.objectChanged(); final Content content = Toolkit.getContentFactory().createRootContent(clone); final View cloneView = Toolkit.getViewFactory().createWindow(content); cloneView.setLocation(at); workspace.addView(cloneView); // newWorkspace.markDamaged(); }
continue; if (field.isOneToManyAssociation()) { final NakedObject collection = field.get(object); if (collection == null) {
} else if (fields[i].getSpecification().isEncodeable()) { fieldContent[i] = serializer.serializeEncodeable(field); } else if (fields[i].isOneToManyAssociation()) { fieldContent[i] = serializer.serializeCollection(field, serverSideRetrievedObjectGraphDepth, knownObjects); } else {
component = factory.createObjectIcon(field, associatedObject, elementId, "value"); } else if (field.isOneToManyAssociation()) { component = factory.createCollectionIcon(field, associatedObject, id); } else {