public int compare(final NakedObject sortedElement) { final NakedObject refTo = field.get(sortedElement); String sortedTitle = refTo == null ? null : refTo.titleString(); sortedTitle = sortedTitle == null ? "" : sortedTitle; final int compareTo = sortedTitle.compareTo(title); return compareTo; }
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 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 Consent setFieldOfMatchingType(final NakedObject targetAdapter, final NakedObject sourceAdapter) { if (targetAdapter.isTransient() && sourceAdapter.isPersistent()) { // TODO: use Facet for this test instead. return new Veto("Can't set field in persistent object with reference to non-persistent object"); } final NakedObjectAssociation[] fields = targetAdapter.getSpecification().getAssociations( NakedObjectAssociationFilters.dynamicallyVisible(NakedObjectsContext.getAuthenticationSession(), targetAdapter)); for (final NakedObjectAssociation fld : fields) { if (!fld.isOneToOneAssociation()) { continue; } if (!sourceAdapter.getSpecification().isOfType(fld.getSpecification())) { continue; } if (fld.get(targetAdapter) != null) { continue; } final Consent associationValid = ((OneToOneAssociation) fld).isAssociationValid(targetAdapter, sourceAdapter); if (associationValid.isAllowed()) { return associationValid.setDescription("Set field " + fld.getName()); } } // TODO: use Facet for this test instead return new Veto(String.format("No empty field accepting object of type %s in %s", sourceAdapter.getSpecification() .getSingularName(), title())); }
public Content createFieldContent(final NakedObjectAssociation field, final NakedObject object) { Content content; NakedObject association = field.get(object); if (field instanceof OneToManyAssociation) { content = new OneToManyFieldImpl(object, association, (OneToManyAssociation) field); } else if (field instanceof OneToOneAssociation) { final NakedObjectSpecification fieldSpecification = field.getSpecification(); if (fieldSpecification.isParseable()) { content = new TextParseableFieldImpl(object, association, (OneToOneAssociation) field); } else { content = new OneToOneFieldImpl(object, association, (OneToOneAssociation) field); } } else { throw new NakedObjectException(); } return content; }
@Override public void layout(final View view, final Size maximumSize) { final CalendarAxis calendarAxis = ((CalendarAxis) view.getViewAxis()); final CalendarDisplay calendarDisplay = calendarAxis.getCalendarDisplay(); final Size size = view.getSize(); size.contract(view.getPadding()); int width; int height; final Size blockSize = calendarDisplay.getBlockSize(size); width = blockSize.getWidth(); height = blockSize.getHeight(); final View subviews[] = view.getSubviews(); for (int i = 0; i < subviews.length; i++) { final View v = subviews[i]; final NakedObjectAssociation dateField = findDate(v); if (dateField == null) { continue; } final DateValueFacet facet = dateField.getFacet(DateValueFacet.class); final NakedObject field = dateField.get(v.getContent().getNaked()); final Date date = facet.dateValue(field); calendarDisplay.layoutDate(v, date, width, height); } }
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); } }
public void init(final NakedObject element) { final NakedObject refTo = field.get(element); title = refTo == null ? null : refTo.titleString(); title = title == null ? "" : title; }
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 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); } }
public void resolveField(final NakedObject object, final NakedObjectAssociation field) { final NakedObject reference = field.get(object); resolveImmediately(reference); }
public void resolveField(final NakedObject objectAdapter, final NakedObjectAssociation field) { if (field.getSpecification().isCollectionOrIsAggregated()) { return; } final NakedObject 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().getShortName() + "." + field.getId() + ": " + referenceAdapter.getSpecification().getShortName() + " " + referenceAdapter.getResolveState().code() + " " + referenceAdapter.getOid()); } resolveFieldFromPersistenceLayer(objectAdapter, field); }
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); } }
public void resolveField(final NakedObject object, final NakedObjectAssociation field) throws ObjectPersistenceException { final NakedObject reference = field.get(object); PersistorUtil.start(reference, ResolveState.RESOLVING); PersistorUtil.end(reference); }
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; }
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 addField(final View view, final NakedObject object, final NakedObjectAssociation field) { final NakedObject value = field.get(object); View fieldView; fieldView = createFieldView(view, object, field, value); if (fieldView != null) { view.addView(decorateSubview(fieldView)); } else { view.addView(new FieldErrorView("No field for " + value)); } }
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); }
@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(); }