private void updateFields(final NakedObject object, Data state) { ObjectData od = (ObjectData) state; NakedObjectField[] fields = object.getSpecification().getFields(); for (int i = 0; i < fields.length; i++) { if (fields[i].isPersisted()) { updateField(object, od, fields[i]); } } }
private void ensureUniqueFieldsResolved() { if (uniqueFields != null) { return; } if (parent.isRoot()) { uniqueFields = spec.getFields(); return; } final NakedObjectField[] parentFields = parent.getSpecification().getFields(); final HashMap<String, String> parentIds = new HashMap<String, String>(); for (int i = 0; i < parentFields.length; i++) { if (parentFields[i].isPersisted()) { parentIds.put(parentFields[i].getId(), ""); } } final List<NakedObjectField> uniqueList = new ArrayList<NakedObjectField>(); final NakedObjectField[] fields = spec.getFields(); for (int i = 0; i < fields.length; i++) { if (!parentIds.containsKey(fields[i].getId())) { uniqueList.add(fields[i]); } } uniqueFields = uniqueList.toArray(new NakedObjectField[0]); }
/** * Check which classes/interfaces are used in associations, and mark them */ private void checkAssociations() { // make an array as we may modify the classes map, which would cause an exception in an iterator final PersistentNakedClass[] persistentClasses = classes.values().toArray(new PersistentNakedClass[0]); for (int i = 0; i < persistentClasses.length; i++) { final NakedObjectField[] fields = persistentClasses[i].getSpecification().getFields(); for (int j = 0; j < fields.length; j++) { final NakedObjectField field = fields[j]; if (field.isValue() || !field.isPersisted() || Features.isService(field.getSpecification()) || field.getSpecification().getFullName().startsWith("java.")) { continue; } // object or collection - for both getSpecification returns the spec of the associated object final String associatedClassName = field.getSpecification().getFullName(); if (!classes.containsKey(associatedClassName) && !interfaces.containsKey(associatedClassName)) { // enforce class must be in classes or interface maps throw new NakedObjectRuntimeException("Missing class/interface: " + field.getSpecification().getFullName()); } // if it's a class add a reference PersistentNakedClass associatedClass = classes.get(associatedClassName); if (associatedClass != null) { associatedClass.addReference(); } } } }
private void checkInverseAssociations() { for (Iterator<PersistentNakedClass> iter = classes.values().iterator(); iter.hasNext();) { PersistentNakedClass persistentClass = iter.next(); NakedObjectField[] fields = persistentClass.getUniqueFields(); for (int i = 0; i < fields.length; i++) { if (fields[i].isValue() || !fields[i].isPersisted()) { continue; } PersistentNakedClass associatedClass = getPersistentClass(fields[i].getSpecification().getFullName()); if (associatedClass == null) { continue; } String inverse = getInverse(persistentClass, fields[i].getId()); if (inverse != null) { NakedObjectField associatedField = associatedClass.getSpecification().getField(inverse); Association association = new Association(associatedClass, associatedField, false); persistentClass.addAssociation(fields[i].getId(), association); Association reverseAssociation = new Association(persistentClass, fields[i], true); associatedClass.addAssociation(inverse, reverseAssociation); } } } }
private ObjectData createObjectData(final NakedObject object) { NakedObjectSpecification cls = object.getSpecification(); NakedObjectField[] fields = cls.getFields(); ObjectData data = new ObjectData(object.getOid(), object.getResolveState().name(), cls.getFullName()); for (int i = 0; i < fields.length; i++) { if (fields[i].isPersisted()) { createFieldData(object, data, fields[i]); } } return data; }
final NakedObjectField field = uniqueFields[i]; if (field.isValue() || !field.isPersisted() || thisPersistentClass.hasAssociation(field.getId())) { continue;
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()); NakedObjectField[] fields = object.getSpecification().getFields(); for (int i = 0; i < fields.length; i++) { if (!fields[i].isPersisted()) { continue; } Naked field = fields[i].get(object); Naked fieldContent = field; String fieldId = fields[i].getId(); if (fields[i].isCollection()) { data.addInternalCollection((NakedCollection) fieldContent, fieldId, ensurePersistent); } else if (fields[i].isValue()) { boolean isEmpty = fields[i].isEmpty(object); String encodedValue = ((NakedValue) field).asEncodedString(); data.saveValue(fieldId, isEmpty, field == null || isEmpty ? null : new String(encodedValue)); } else if (fields[i].isObject()) { data.addAssociation((NakedObject) fieldContent, fieldId, ensurePersistent); } } return data; }
for (int i = 0; i < fields.length; i++) { NakedObjectField field = fields[i]; if (!field.isPersisted()) { continue; } else if (field.isValue()) { if (!field.isPersisted()) { continue; } else if (field.isValue()) {
for (int i = 0; i < allFields.length; i++) { final NakedObjectField field = allFields[i]; if (!field.isPersisted()) { continue;
for (int i = 0; i < fields.length; i++) { NakedObjectField field = fields[i]; if (!field.isPersisted()) { continue; } else if (field.isValue()) { if (field.isPersisted()) { continue; } else if (field.isValue()) {
for (int i = 0; i < fields.length; i++) { NakedObjectField field = fields[i]; if (!field.isPersisted()) { continue; } else if (field.isValue()) {
for (int i = 0; i < fields.length; i++) { NakedObjectField field = fields[i]; if (!field.isPersisted()) { continue; } else if (field.isValue()) {
private void initObject(final NakedObject object, final ObjectData data) { if (object.getResolveState().isResolvable(ResolveState.RESOLVING)) { objectLoader().start(object, ResolveState.RESOLVING); NakedObjectField[] fields = object.getSpecification().getFields(); for (int i = 0; i < fields.length; i++) { NakedObjectField field = fields[i]; if (!field.isPersisted()) { continue; } if (field.isValue()) { NakedValue value = (NakedValue) ((ValueAssociation) field).get(object); String valueData = data.value(field.getId()); value.restoreFromEncodedString(valueData == null ? "NULL" : valueData); ((ValueAssociation) field).initValue(object, value); } else if (field.isCollection()) { initObjectSetupCollection(object, data, field); } else if (field.isObject()) { initObjectSetupReference(object, data, field); } } object.setOptimisticLock(data.getVersion()); objectLoader().end(object); } }