You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2012/05/15 00:45:03 UTC

svn commit: r1338472 [2/8] - in /incubator/isis/trunk/framework/runtimes/dflt: objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/ objectstores/dflt/src/main/java/org/apache/isis/runtimes/dflt/objectstores/dflt/internal/ ob...

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/ObjectReader.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/ObjectReader.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/ObjectReader.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/ObjectReader.java Mon May 14 22:44:57 2012
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.ad
 import org.apache.isis.core.metamodel.adapter.ResolveState;
 import org.apache.isis.core.metamodel.adapter.oid.AggregatedOid;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
@@ -39,21 +40,28 @@ import org.apache.isis.core.metamodel.sp
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateReader;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.encryption.DataEncryption;
-import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreator;
+import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreatorDefault;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.versions.VersionCreator;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManager;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 
 class ObjectReader {
+    
+    private final KeyCreatorDefault keyCreator = new KeyCreatorDefault();
 
-    public ObjectAdapter load(final StateReader reader, final KeyCreator keyCreator, final VersionCreator versionCreator, final Map<String, DataEncryption> dataEncrypters) {
-        final String className = reader.readObjectType();
-        final ObjectSpecification specification = getSpecificationLoader().loadSpecification(className);
-        final String id = reader.readId();
-        final RootOid oid = keyCreator.oid(specification, id);
+    public ObjectAdapter load(final StateReader reader, final VersionCreator versionCreator, final Map<String, DataEncryption> dataEncrypters) {
+        
+        // final String className = reader.readObjectType();
+        // final String id = reader.readId();
+        
+        // final ObjectSpecification specification = getSpecificationLoader().loadSpecification(className);
+        // final RootOid rootOid = keyCreator.oid(specification, id);
         
-        final ObjectAdapter object = getAdapter(oid);
+        final String oidStr = reader.readOid();
+        final RootOid rootOid = getOidMarshaller().unmarshal(oidStr, RootOid.class);
+        
+        final ObjectAdapter object = getAdapter(rootOid);
         if (object.getResolveState().isResolved()) {
             Version version = null;
             final String versionString = reader.readVersion();
@@ -72,15 +80,15 @@ class ObjectReader {
 
         // TODO move lock to common method
         // object.setOptimisticLock(version);
-        loadState(reader, keyCreator, versionCreator, dataEncrypters, object);
+        loadState(reader, versionCreator, dataEncrypters, object);
         return object;
     }
 
-    public void update(final StateReader reader, final KeyCreator keyCreator, final VersionCreator versionCreator, final Map<String, DataEncryption> dataEncrypters, final ObjectAdapter object) {
-        loadState(reader, keyCreator, versionCreator, dataEncrypters, object);
+    public void update(final StateReader reader, final VersionCreator versionCreator, final Map<String, DataEncryption> dataEncrypters, final ObjectAdapter object) {
+        loadState(reader, versionCreator, dataEncrypters, object);
     }
 
-    private void loadState(final StateReader reader, final KeyCreator keyCreator, final VersionCreator versionCreator, final Map<String, DataEncryption> dataEncrypters, final ObjectAdapter object) {
+    private void loadState(final StateReader reader, final VersionCreator versionCreator, final Map<String, DataEncryption> dataEncrypters, final ObjectAdapter object) {
         final ResolveState resolveState = ResolveState.RESOLVING;
         object.changeState(resolveState);
         Version version = null;
@@ -91,12 +99,12 @@ class ObjectReader {
             version = versionCreator.version(versionString, user, time);
         }
         final String encryptionType = reader.readEncrytionType();
-        readFields(reader, object, keyCreator, dataEncrypters.get(encryptionType));
+        readFields(reader, object, dataEncrypters.get(encryptionType));
         object.setVersion(version);
         object.changeState(resolveState.getEndState());
     }
 
-    private void readFields(final StateReader reader, final ObjectAdapter object, final KeyCreator keyCreator, final DataEncryption dataEncrypter) {
+    private void readFields(final StateReader reader, final ObjectAdapter object, final DataEncryption dataEncrypter) {
         final ObjectAssociationContainer specification = object.getSpecification();
         final List<ObjectAssociation> associations = specification.getAssociations();
         for (final ObjectAssociation association : associations) {
@@ -104,26 +112,29 @@ class ObjectReader {
                 continue;
             }
             if (association.isOneToManyAssociation()) {
-                readCollection(reader, keyCreator, dataEncrypter, (OneToManyAssociation) association, object);
+                readCollection(reader, dataEncrypter, (OneToManyAssociation) association, object);
             } else if (association.getSpecification().isValue()) {
                 readValue(reader, dataEncrypter, (OneToOneAssociation) association, object);
             } else if (association.getSpecification().isParented()) {
-                readAggregate(reader, keyCreator, dataEncrypter, (OneToOneAssociation) association, object);
+                readAggregate(reader, dataEncrypter, (OneToOneAssociation) association, object);
             } else {
-                readReference(reader, keyCreator, (OneToOneAssociation) association, object);
+                readReference(reader, (OneToOneAssociation) association, object);
             }
         }
     }
 
-    private void readAggregate(final StateReader reader, final KeyCreator keyCreator, final DataEncryption dataEncrypter, final OneToOneAssociation association, final ObjectAdapter parentAdapter) {
+    private void readAggregate(final StateReader reader, final DataEncryption dataEncrypter, final OneToOneAssociation association, final ObjectAdapter parentAdapter) {
         final String id = association.getId();
         final StateReader aggregateReader = reader.readAggregate(id);
         
         final ObjectAdapter fieldObject;
         if (aggregateReader != null) {
-            final String localId = aggregateReader.readId();  
-            final AggregatedOid oid = new AggregatedOid(parentAdapter.getOid(), localId);
-            fieldObject = restoreAggregatedObject(aggregateReader, oid, keyCreator, dataEncrypter);
+//            final String objectType = aggregateReader.readObjectType();
+//            final String localId = aggregateReader.readId();  
+//            final AggregatedOid aggregatedOid = new AggregatedOid(objectType, (TypedOid) parentAdapter.getOid(), localId);
+            final String oidStr = aggregateReader.readOid();
+            final AggregatedOid aggregatedOid = getOidMarshaller().unmarshal(oidStr, AggregatedOid.class);
+            fieldObject = restoreAggregatedObject(aggregateReader, aggregatedOid, dataEncrypter);
         } else {
             fieldObject = null;
         }
@@ -131,14 +142,17 @@ class ObjectReader {
         association.initAssociation(parentAdapter, fieldObject);
     }
 
-    private ObjectAdapter restoreAggregatedObject(final StateReader aggregateReader, final Oid oid, final KeyCreator keyCreator, final DataEncryption dataEncrypter) {
-        final String objectType = aggregateReader.readObjectType();
-        final ObjectSpecification specification = getSpecificationLoader().loadSpecification(objectType);
-        final ObjectAdapter fieldObject = getAdapter(specification, oid);
+    private ObjectAdapter restoreAggregatedObject(final StateReader aggregateReader, final AggregatedOid aggregatedOid, final DataEncryption dataEncrypter) {
+        
+//        final String objectType = aggregateReader.readObjectType();
+//        final ObjectSpecification specification = getSpecificationLoader().loadSpecification(objectType);
+        final ObjectSpecification specification = getSpecificationLoader().lookupBySpecId(aggregatedOid.getObjectSpecId());
+
+        final ObjectAdapter fieldObject = getAdapter(specification, aggregatedOid);
         if (fieldObject.getResolveState().isGhost()) {
             final ResolveState resolveState = ResolveState.RESOLVING;
             fieldObject.changeState(resolveState);
-            readFields(aggregateReader, fieldObject, keyCreator, dataEncrypter);
+            readFields(aggregateReader, fieldObject, dataEncrypter);
             fieldObject.changeState(resolveState.getEndState());
         }
         return fieldObject;
@@ -158,7 +172,7 @@ class ObjectReader {
         }
     }
 
-    private void readReference(final StateReader reader, final KeyCreator keyCreator, final OneToOneAssociation association, final ObjectAdapter object) {
+    private void readReference(final StateReader reader, final OneToOneAssociation association, final ObjectAdapter object) {
         ObjectAdapter fieldObject;
         final String ref = reader.readField(association.getId());
         if (ref == null || ref.equals("null")) {
@@ -167,8 +181,8 @@ class ObjectReader {
             if (ref.equals("")) {
                 throw new NoSqlStoreException("Invalid reference field (an empty string) in data for " + association.getName() + "  in " + object);
             }
-            final RootOid oid = keyCreator.oidFromReference(ref);
-            final ObjectSpecification specification = keyCreator.specificationFromReference(ref);
+            final RootOid oid = keyCreator.unmarshal(ref);
+            final ObjectSpecification specification = keyCreator.specificationFromOidStr(ref);
             fieldObject = getAdapter(specification, oid);
         }
         try {
@@ -178,7 +192,7 @@ class ObjectReader {
         }
     }
 
-    private void readCollection(final StateReader reader, final KeyCreator keyCreator, final DataEncryption dataEncrypter, final OneToManyAssociation association, final ObjectAdapter parentAdapter) {
+    private void readCollection(final StateReader reader, final DataEncryption dataEncrypter, final OneToManyAssociation association, final ObjectAdapter parentAdapter) {
         final ObjectAdapter collectionAdapter = association.get(parentAdapter);
         
         final CollectionFacet facet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
@@ -188,9 +202,15 @@ class ObjectReader {
             final ObjectAdapter[] elementAdapters = new ObjectAdapter[readers.size()];
             int i = 0;
             for (final StateReader elementReader : readers) {
-                final String localId = elementReader.readId();
-                final AggregatedOid aggregatedOid = new AggregatedOid(parentAdapter.getOid(), localId);
-                elementAdapters[i++] = restoreAggregatedObject(elementReader, aggregatedOid, keyCreator, dataEncrypter);
+                
+//                final String objectType = elementReader.readObjectType();
+//                final String localId = elementReader.readId();
+//                final AggregatedOid aggregatedOid = new AggregatedOid(ObjectSpecId.of(objectType), (TypedOid) parentAdapter.getOid(), localId);
+
+                final String oidStr = elementReader.readOid();
+                final AggregatedOid aggregatedOid = getOidMarshaller().unmarshal(oidStr, AggregatedOid.class);
+                
+                elementAdapters[i++] = restoreAggregatedObject(elementReader, aggregatedOid, dataEncrypter);
             }
             facet.init(collectionAdapter, elementAdapters);
         } else {
@@ -199,18 +219,18 @@ class ObjectReader {
             if (referencesList == null || referencesList.length() == 0) {
                 facet.init(collectionAdapter, new ObjectAdapter[0]);
             } else {
-                final ObjectAdapter[] elements = restoreElements(referencesList, keyCreator);
+                final ObjectAdapter[] elements = restoreElements(referencesList);
                 facet.init(collectionAdapter, elements);
             }
         }
     }
 
-    private ObjectAdapter[] restoreElements(final String referencesList, final KeyCreator keyCreator) {
+    private ObjectAdapter[] restoreElements(final String referencesList) {
         final String[] references = referencesList.split("\\|");
         final ObjectAdapter[] elements = new ObjectAdapter[references.length];
         for (int i = 0; i < references.length; i++) {
-            final ObjectSpecification specification = keyCreator.specificationFromReference(references[i]);
-            final RootOid oid = keyCreator.oidFromReference(references[i]);
+            final ObjectSpecification specification = keyCreator.specificationFromOidStr(references[i]);
+            final RootOid oid = keyCreator.unmarshal(references[i]);
             elements[i] = getAdapter(specification, oid);
         }
         return elements;
@@ -222,7 +242,7 @@ class ObjectReader {
         if (adapter != null) {
             return adapter;
         } 
-        return getPersistenceSession().recreateAdapter(oid, specification);
+        return getPersistenceSession().recreateAdapter(specification, oid);
     }
 
     protected ObjectAdapter getAdapter(final RootOid oid) {
@@ -242,5 +262,10 @@ class ObjectReader {
         return IsisContext.getSpecificationLoader();
     }
 
+    protected OidMarshaller getOidMarshaller() {
+        return new OidMarshaller();
+    }
+
+
 
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/WriteObjectCommand.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/WriteObjectCommand.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/WriteObjectCommand.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/WriteObjectCommand.java Mon May 14 22:44:57 2012
@@ -28,16 +28,18 @@ import org.apache.isis.core.commons.lang
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.AggregatedOid;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.spec.DomainModelException;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateWriter;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.encryption.DataEncryption;
-import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreator;
+import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreatorDefault;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.versions.VersionCreator;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PersistenceCommand;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PersistenceCommandContext;
@@ -45,34 +47,52 @@ import org.apache.isis.runtimes.dflt.run
 
 class WriteObjectCommand implements PersistenceCommand {
     
-    private final KeyCreator keyCreator;
-    private final ObjectAdapter object;
+    public enum Mode {
+        UPDATE,
+        NON_UPDATE;
+        
+        public static Mode modeFor(boolean isUpdate) {
+            return isUpdate?UPDATE:NON_UPDATE;
+        }
+
+        public boolean isUpdate() {
+            return this == UPDATE;
+        }
+    }
+    
+    private final KeyCreatorDefault keyCreator = new KeyCreatorDefault();
+    private final ObjectAdapter adapter;
     private final VersionCreator versionCreator;
     private final DataEncryption dataEncrypter;
-    private final boolean isUpdate;
+    private final Mode mode;
 
-    WriteObjectCommand(final boolean isUpdate, final KeyCreator keyCreator, final VersionCreator versionCreator, final DataEncryption dataEncrypter, final ObjectAdapter object) {
-        this.isUpdate = isUpdate;
-        this.keyCreator = keyCreator;
+    WriteObjectCommand(final Mode mode, final VersionCreator versionCreator, final DataEncryption dataEncrypter, final ObjectAdapter adapter) {
+        this.mode = mode;
         this.versionCreator = versionCreator;
         this.dataEncrypter = dataEncrypter;
-        this.object = object;
+        this.adapter = adapter;
     }
 
     @Override
     public void execute(final PersistenceCommandContext context) {
         final NoSqlCommandContext noSqlCommandContext = (NoSqlCommandContext) context;
         
-        final String specName = object.getSpecification().getFullIdentifier();
-        final StateWriter writer = noSqlCommandContext.createStateWriter(specName);
-        final String key = keyCreator.key(object.getOid());
-        writer.writeId(key);
-        writeFields(writer, specName, object);
+        final ObjectSpecification objectSpec = adapter.getSpecification();
+        //final String specName = objectSpec.getFullIdentifier();
+        final StateWriter writer = noSqlCommandContext.createStateWriter(objectSpec.getSpecId());
+        
+        //final String key = keyCreator.key(adapter.getOid());
+        //writer.writeId(key);
+        final TypedOid typedOid = (TypedOid) adapter.getOid();
+        writer.writeOid(typedOid);
+        
+        writeFields(writer, adapter);
         final String user = getAuthenticationSession().getUserName();
 
-        final Version currentVersion = object.getVersion();
-        final Version newVersion = isUpdate ? versionCreator.nextVersion(currentVersion) : versionCreator.newVersion(user);
-        object.setVersion(newVersion);
+        final Version currentVersion = adapter.getVersion();
+        
+        final Version newVersion = mode.isUpdate() ? versionCreator.nextVersion(currentVersion) : versionCreator.newVersion(user);
+        adapter.setVersion(newVersion);
         if (newVersion != null) {
             final String version = currentVersion == null ? null : versionCreator.versionString(currentVersion);
             writer.writeVersion(version, versionCreator.versionString(newVersion));
@@ -81,16 +101,22 @@ class WriteObjectCommand implements Pers
             writer.writeEncryptionType(dataEncrypter.getType());
         }
 
-        if (isUpdate) {
+        if (mode.isUpdate()) {
             noSqlCommandContext.update(writer);
         } else {
             noSqlCommandContext.insert(writer);
         }
     }
 
-    private void writeFields(final StateWriter writer, final String specName, final ObjectAdapter adapter) {
+    private void writeFields(final StateWriter writer, final ObjectAdapter adapter) {
+        
         final List<ObjectAssociation> associations = adapter.getSpecification().getAssociations();
-        writer.writeType(specName);
+        
+//        final String specName = adapter.getSpecification().getFullIdentifier();
+//        writer.writeObjectType(specName);
+        
+        writer.writeOid((TypedOid) adapter.getOid());
+        
         for (final ObjectAssociation association : associations) {
             if (association.isNotPersisted()) {
                 continue;
@@ -99,7 +125,7 @@ class WriteObjectCommand implements Pers
             if (association.isOneToManyAssociation()) {
                 final OneToManyAssociation oneToManyAssociation = (OneToManyAssociation) association;
                 final ObjectAdapter collectionAdapter = fieldAdapter; // to explain
-                writeCollection(writer, oneToManyAssociation, collectionAdapter, keyCreator);
+                writeCollection(writer, oneToManyAssociation, collectionAdapter);
             } else { 
                 final OneToOneAssociation oneToOneAssociation = (OneToOneAssociation) association;
                 final ObjectAdapter propertyAdapter = fieldAdapter; // to explain
@@ -132,13 +158,13 @@ class WriteObjectCommand implements Pers
 
     private void writeReferenceProperty(final StateWriter writer, final OneToOneAssociation otoa, final ObjectAdapter referencedAdapter) {
         if (otoa.getSpecification().isParented()) {
-            writeReferencedAsAggregated(writer, otoa, referencedAdapter, keyCreator);
+            writeReferencedAsAggregated(writer, otoa, referencedAdapter);
         } else {
-            writeReference(writer, otoa, referencedAdapter, keyCreator);
+            writeReference(writer, otoa, referencedAdapter);
         }
     }
 
-    private void writeReferencedAsAggregated(final StateWriter writer, final OneToOneAssociation otoa, final ObjectAdapter referencedAdapter, final KeyCreator keyCreator) {
+    private void writeReferencedAsAggregated(final StateWriter writer, final OneToOneAssociation otoa, final ObjectAdapter referencedAdapter) {
         if (referencedAdapter == null) {
             writer.writeField(otoa.getId(), null);
             return;
@@ -151,22 +177,22 @@ class WriteObjectCommand implements Pers
         
         final String associationId = otoa.getId();
         final StateWriter aggregateWriter = writer.addAggregate(associationId);
-        aggregateWriter.writeId(aggregatedOid.getLocalId());
+        //aggregateWriter.writeId(aggregatedOid.getLocalId());
+        aggregateWriter.writeOid(aggregatedOid);
         
-        final String specName = referencedAdapter.getSpecification().getFullIdentifier();
-        writeFields(aggregateWriter, specName, referencedAdapter);
+        writeFields(aggregateWriter, referencedAdapter);
     }
 
-    private void writeReference(final StateWriter writer, final ObjectAssociation association, final ObjectAdapter referencedAdapter, final KeyCreator keyCreator) {
-        final String key = keyCreator.reference(referencedAdapter);
+    private void writeReference(final StateWriter writer, final ObjectAssociation association, final ObjectAdapter referencedAdapter) {
+        final String key = keyCreator.oidStrFor(referencedAdapter);
         writer.writeField(association.getId(), key);
     }
 
-    private void writeCollection(final StateWriter writer, final OneToManyAssociation association, final ObjectAdapter collectionAdapter, final KeyCreator keyCreator) {
+    private void writeCollection(final StateWriter writer, final OneToManyAssociation association, final ObjectAdapter collectionAdapter) {
         if (association.getSpecification().isParented()) {
             writeCollectionOfAggregated(writer, association, collectionAdapter);
         } else {
-            writeCollectionOfReferences(writer, association, collectionAdapter, keyCreator);
+            writeCollectionOfReferences(writer, association, collectionAdapter);
         }
     }
 
@@ -176,14 +202,17 @@ class WriteObjectCommand implements Pers
         for (final ObjectAdapter referencedAdapter : collectionFacet.iterable(collectionAdapter)) {
             final AggregatedOid elementOid = (AggregatedOid) referencedAdapter.getOid();
             final StateWriter elementWriter = writer.createElementWriter();
-            elementWriter.writeId(elementOid.getLocalId());
-            writeFields(elementWriter, referencedAdapter.getSpecification().getFullIdentifier(), referencedAdapter);
+            
+            //elementWriter.writeId(elementOid.getLocalId());
+            elementWriter.writeOid(elementOid);
+            
+            writeFields(elementWriter, referencedAdapter);
             elementWriters.add(elementWriter);
         }
         writer.writeCollection(association.getId(), elementWriters);
     }
 
-    private void writeCollectionOfReferences(final StateWriter writer, final ObjectAssociation association, final ObjectAdapter collectionAdapter, final KeyCreator keyCreator) {
+    private void writeCollectionOfReferences(final StateWriter writer, final ObjectAssociation association, final ObjectAdapter collectionAdapter) {
         final CollectionFacet collectionFacet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
         
         final StringBuilder buf = new StringBuilder();
@@ -191,7 +220,7 @@ class WriteObjectCommand implements Pers
             if (elementAdapter.isParented()) {
                 throw new DomainModelException("Can't store an aggregated object within a collection that is not expected aggregates: " + elementAdapter + " (" + collectionAdapter + ")");
             }
-            buf.append(keyCreator.reference(elementAdapter)).append("|");
+            buf.append(keyCreator.oidStrFor(elementAdapter)).append("|");
         }
         if (buf.length() > 0) {
             writer.writeField(association.getId(), buf.toString());
@@ -201,14 +230,14 @@ class WriteObjectCommand implements Pers
 
     @Override
     public ObjectAdapter onObject() {
-        return object;
+        return adapter;
     }
 
     @Override
     public String toString() {
         final ToString toString = new ToString(this);
-        toString.append("spec", object.getSpecification().getFullIdentifier());
-        toString.append("oid", object.getOid());
+        toString.append("spec", adapter.getSpecification().getFullIdentifier());
+        toString.append("oid", adapter.getOid());
         return toString.toString();
     }
     

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlDataDatabase.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlDataDatabase.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlDataDatabase.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlDataDatabase.java Mon May 14 22:44:57 2012
@@ -22,6 +22,7 @@ package org.apache.isis.runtimes.dflt.ob
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PersistenceCommand;
 
 public interface NoSqlDataDatabase {
@@ -31,14 +32,14 @@ public interface NoSqlDataDatabase {
     
     boolean containsData();
 
-    void addService(String name, String key);
-    String getService(String name);
+    void addService(ObjectSpecId objectSpecId, String key);
+    String getService(ObjectSpecId objectSpecId);
 
-    boolean hasInstances(String specificationName);
-    StateReader getInstance(String key, String specificationName);
-    Iterator<StateReader> instancesOf(String specificationName);
+    boolean hasInstances(ObjectSpecId objectSpecId);
+    StateReader getInstance(String key, ObjectSpecId objectSpecId);
+    Iterator<StateReader> instancesOf(ObjectSpecId objectSpecId);
 
-    long nextSerialNumberBatch(String string, int batchSize);
+    long nextSerialNumberBatch(ObjectSpecId objectSpecId, int batchSize);
 
     void write(List<PersistenceCommand> commands);
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlPersistorMechanismInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlPersistorMechanismInstaller.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlPersistorMechanismInstaller.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/NoSqlPersistorMechanismInstaller.java Mon May 14 22:44:57 2012
@@ -29,12 +29,10 @@ import org.apache.isis.core.commons.conf
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
+import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlIdentifierGenerator;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlObjectStore;
-import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlOidGenerator;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.encryption.DataEncryption;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.encryption.none.DataEncryptionNone;
-import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreator;
-import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreatorDefault;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.versions.VersionCreator;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.versions.VersionCreatorDefault;
 import org.apache.isis.runtimes.dflt.runtime.installerregistry.installerapi.ObjectStorePersistenceMechanismInstallerAbstract;
@@ -42,6 +40,7 @@ import org.apache.isis.runtimes.dflt.run
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.ObjectStore;
 import org.apache.isis.runtimes.dflt.runtime.system.DeploymentType;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManager;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.IdentifierGenerator;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSessionFactory;
 
@@ -63,8 +62,8 @@ public abstract class NoSqlPersistorMech
     }
 
     @Override
-    protected OidGenerator createOidGenerator(final IsisConfiguration configuration) {
-        return getObjectStore(configuration).getOidGenerator();
+    protected IdentifierGenerator createIdentifierGenerator(final IsisConfiguration configuration) {
+        return getObjectStore(configuration).getIdentifierGenerator();
     }
 
     @Override
@@ -75,10 +74,10 @@ public abstract class NoSqlPersistorMech
 
     private NoSqlObjectStore getObjectStore(final IsisConfiguration configuration) {
         if (objectStore == null) {
-            final KeyCreator keyCreator = createKeyCreator();
+            //final KeyCreatorDefault keyCreator = createKeyCreator();
             final VersionCreator versionCreator = createVersionCreator();
             final NoSqlDataDatabase db = createNoSqlDatabase(configuration);
-            final NoSqlOidGenerator oidGenerator = createOidGenerator(db);
+            final OidGenerator oidGenerator = createOidGenerator(db);
 
             final Map<String, DataEncryption> availableDataEncryption = new HashMap<String, DataEncryption>();
             try {
@@ -101,7 +100,7 @@ public abstract class NoSqlPersistorMech
                     availableDataEncryption.put(encryption.getType(), encryption);
                     writeWithEncryption = encryption;
                 }
-                objectStore = new NoSqlObjectStore(db, oidGenerator, keyCreator, versionCreator, writeWithEncryption, availableDataEncryption);
+                objectStore = new NoSqlObjectStore(db, oidGenerator, versionCreator, writeWithEncryption, availableDataEncryption);
             } catch (final IllegalArgumentException e) {
                 throw new IsisException(e);
             } catch (final SecurityException e) {
@@ -111,15 +110,15 @@ public abstract class NoSqlPersistorMech
         return objectStore;
     }
 
-    protected NoSqlOidGenerator createOidGenerator(final NoSqlDataDatabase db) {
-        return new NoSqlOidGenerator(db);
+    protected OidGenerator createOidGenerator(final NoSqlDataDatabase database) {
+        return new OidGenerator(new NoSqlIdentifierGenerator(database));
     }
 
     protected abstract NoSqlDataDatabase createNoSqlDatabase(IsisConfiguration configuration);
 
-    protected KeyCreator createKeyCreator() {
-        return new KeyCreatorDefault();
-    }
+//    protected KeyCreatorDefault createKeyCreator() {
+//        return new KeyCreatorDefault();
+//    }
 
     private VersionCreator createVersionCreator() {
         return new VersionCreatorDefault();

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/StateReader.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/StateReader.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/StateReader.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/StateReader.java Mon May 14 22:44:57 2012
@@ -49,9 +49,10 @@ public interface StateReader {
 
     String readEncrytionType();
 
-    String readObjectType();
-
-    String readId();
+//    String readObjectType();
+//    String readId();
+    
+    String readOid();
 
     String readVersion();
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/StateWriter.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/StateWriter.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/StateWriter.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/StateWriter.java Mon May 14 22:44:57 2012
@@ -21,13 +21,16 @@ package org.apache.isis.runtimes.dflt.ob
 
 import java.util.List;
 
+import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
+
 public interface StateWriter {
 
     StateWriter addAggregate(String id);
 
-    void writeId(String oid);
-
-    void writeType(String type);
+//    void writeObjectType(String type);
+//    void writeId(String oid);
+    
+    void writeOid(TypedOid typedOid);
 
     void writeEncryptionType(String type);
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileClientCommandContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileClientCommandContext.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileClientCommandContext.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileClientCommandContext.java Mon May 14 22:44:57 2012
@@ -21,6 +21,7 @@ package org.apache.isis.runtimes.dflt.ob
 
 import java.util.zip.CRC32;
 
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlCommandContext;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateWriter;
 
@@ -41,13 +42,13 @@ class FileClientCommandContext implement
     }
 
     @Override
-    public StateWriter createStateWriter(final String specificationName) {
+    public StateWriter createStateWriter(final ObjectSpecId specificationName) {
         return new JsonStateWriter();
     }
 
     @Override
-    public void delete(final String specificationName, final String key, final String version) {
-        connection.request('D', specificationName + " " + key + " " + version + " null");
+    public void delete(final ObjectSpecId objectSpecId, final String key, final String version) {
+        connection.request('D', objectSpecId + " " + key + " " + version + " null");
         connection.endRequestSection();
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileServerDb.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileServerDb.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileServerDb.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/FileServerDb.java Mon May 14 22:44:57 2012
@@ -29,6 +29,7 @@ import java.util.zip.CRC32;
 
 import org.apache.log4j.Logger;
 
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlCommandContext;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlStoreException;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.NoSqlDataDatabase;
@@ -79,11 +80,11 @@ public class FileServerDb implements NoS
     }
 
     @Override
-    public StateReader getInstance(final String key, final String specificationName) {
+    public StateReader getInstance(final String key, final ObjectSpecId objectSpecId) {
         final ClientConnection connection = getConnection();
         String data;
         try {
-            final String request = specificationName + " " + key;
+            final String request = objectSpecId + " " + key;
             connection.request('R', request);
             connection.validateRequest();
             data = connection.getResponseData();
@@ -99,12 +100,12 @@ public class FileServerDb implements NoS
     }
 
     @Override
-    public Iterator<StateReader> instancesOf(final String specificationName) {
+    public Iterator<StateReader> instancesOf(final ObjectSpecId objectSpecId) {
         final ClientConnection connection = getConnection();
         List<StateReader> instances;
         try {
             instances = new ArrayList<StateReader>();
-            connection.request('L', specificationName + " 0");
+            connection.request('L', objectSpecId + " 0");
             connection.validateRequest();
             String data;
             while ((data = connection.getResponseData()).length() > 0) {
@@ -188,7 +189,7 @@ public class FileServerDb implements NoS
     }
 
     @Override
-    public long nextSerialNumberBatch(final String name, final int batchSize) {
+    public long nextSerialNumberBatch(final ObjectSpecId name, final int batchSize) {
         final ClientConnection connection = getConnection();
         long serialNumber;
         try {
@@ -205,10 +206,10 @@ public class FileServerDb implements NoS
     }
 
     @Override
-    public void addService(final String name, final String key) {
+    public void addService(final ObjectSpecId objectSpecId, final String key) {
         final ClientConnection connection = getConnection();
         try {
-            connection.request('T', name + " " + key);
+            connection.request('T', objectSpecId.asString() + " " + key);
             connection.validateRequest();
         } catch (final RuntimeException e) {
             LOG.error("aborting addService", e);
@@ -219,11 +220,11 @@ public class FileServerDb implements NoS
     }
 
     @Override
-    public String getService(final String name) {
+    public String getService(final ObjectSpecId objectSpecId) {
         final ClientConnection connection = getConnection();
         String response;
         try {
-            connection.request('S', name);
+            connection.request('S', objectSpecId.asString());
             connection.validateRequest();
             response = connection.getResponse();
         } catch (final RuntimeException e) {
@@ -236,11 +237,11 @@ public class FileServerDb implements NoS
     }
 
     @Override
-    public boolean hasInstances(final String specificationName) {
+    public boolean hasInstances(final ObjectSpecId objectSpecId) {
         final ClientConnection connection = getConnection();
         boolean hasInstances;
         try {
-            connection.request('I', specificationName);
+            connection.request('I', objectSpecId.asString());
             connection.validateRequest();
             hasInstances = connection.getResponseAsBoolean();
         } catch (final RuntimeException e) {

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/JsonStateReader.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/JsonStateReader.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/JsonStateReader.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/JsonStateReader.java Mon May 14 22:44:57 2012
@@ -30,8 +30,9 @@ import org.apache.isis.runtimes.dflt.obj
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateReader;
 
 public class JsonStateReader implements StateReader {
-    // private static final Logger LOG =
-    // Logger.getLogger(FileStateReader.class);
+    
+    // private static final Logger LOG = Logger.getLogger(FileStateReader.class);
+    
     private JSONObject instance;
 
     public JsonStateReader(final String data) {
@@ -85,19 +86,24 @@ public class JsonStateReader implements 
         }
     }
 
-    @Override
-    public String readObjectType() {
-        return readRequiredField("_type");
-    }
-
-    @Override
-    public String readId() {
-        return readRequiredField("_id");
-    }
+//    @Override
+//    public String readObjectType() {
+//        return readRequiredField("_type");
+//    }
+//
+//    @Override
+//    public String readId() {
+//        return readRequiredField("_id");
+//    }
+
+      @Override
+      public String readOid() {
+          return readRequiredField(PropertyNames.OID);
+      }
 
     @Override
     public String readVersion() {
-        return readRequiredField("_version");
+        return readRequiredField(PropertyNames.VERSION);
     }
 
     @Override
@@ -117,12 +123,12 @@ public class JsonStateReader implements 
 
     @Override
     public String readUser() {
-        return readRequiredField("_user");
+        return readRequiredField(PropertyNames.USER);
     }
 
     @Override
     public String readTime() {
-        return readRequiredField("_time");
+        return readRequiredField(PropertyNames.TIME);
     }
 
     private String readRequiredField(final String name) {

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/JsonStateWriter.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/JsonStateWriter.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/JsonStateWriter.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/JsonStateWriter.java Mon May 14 22:44:57 2012
@@ -26,6 +26,7 @@ import com.google.common.collect.Lists;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlStoreException;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateWriter;
 
@@ -33,8 +34,8 @@ public class JsonStateWriter implements 
 
     private final JSONObject dbObject = new JSONObject();
     
-    private String type;
-    private String oid;
+    private TypedOid oid;
+    
     private String currentVersion;
     private String newVersion;
 
@@ -49,38 +50,45 @@ public class JsonStateWriter implements 
         return jsonStateWriter;
     }
 
-    @Override
-    public void writeType(final String type) {
-        this.type = type;
-        writeField("_type", type);
-    }
-
-    @Override
-    public void writeId(final String oid) {
-        this.oid = oid;
-        writeField("_id", oid);
-    }
+//    @Override
+//    public void writeObjectType(final String type) {
+//        this.type = type;
+//        writeField("_type", type);
+//    }
+//
+//    @Override
+//    public void writeId(final String oid) {
+//        this.oid = oid;
+//        writeField("_id", oid);
+//    }
+
+      @Override
+      public void writeOid(final TypedOid typedOid) {
+          this.oid = typedOid;
+          writeField(PropertyNames.OID, typedOid.enString());
+      }
 
+    
     @Override
     public void writeEncryptionType(final String type) {
-        writeField("_encrypt", type);
+        writeField(PropertyNames.ENCRYPT, type);
     }
 
     @Override
     public void writeVersion(final String currentVersion, final String newVersion) {
         this.currentVersion = currentVersion;
         this.newVersion = newVersion;
-        writeField("_version", newVersion);
+        writeField(PropertyNames.VERSION, newVersion);
     }
 
     @Override
     public void writeTime(final String time) {
-        writeField("_time", time);
+        writeField(PropertyNames.TIME, time);
     }
 
     @Override
     public void writeUser(final String user) {
-        writeField("_user", user);
+        writeField(PropertyNames.USER, user);
     }
 
     @Override
@@ -102,7 +110,7 @@ public class JsonStateWriter implements 
     }
 
     public String getRequest() {
-        return type + " " + oid + " " + currentVersion + " " + newVersion;
+        return oid.enString() + " " + currentVersion + " " + newVersion;
     }
 
     public String getData() {

Added: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/PropertyNames.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/PropertyNames.java?rev=1338472&view=auto
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/PropertyNames.java (added)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/PropertyNames.java Mon May 14 22:44:57 2012
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.runtimes.dflt.objectstores.nosql.db.file;
+
+interface PropertyNames {
+    static final String ENCRYPT = "_encrypt";
+    
+//    static final String TYPE = "_type";
+//    static final String ID = "_id";
+    
+    static final String OID = "_oid";
+    static final String VERSION = "_version";
+    static final String TIME = "_time";
+    static final String USER = "_user";
+}
+

Propchange: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/PropertyNames.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/server/FileServer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/server/FileServer.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/server/FileServer.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/server/FileServer.java Mon May 14 22:44:57 2012
@@ -60,6 +60,7 @@ import org.apache.commons.configuration.
 import org.apache.log4j.Logger;
 import org.apache.log4j.PropertyConfigurator;
 
+import org.apache.isis.core.commons.lang.CastUtils;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlStoreException;
 
 public class FileServer {
@@ -89,12 +90,13 @@ public class FileServer {
 
         final String mode = cmd.getOptionValue("m");
 
+        final List<String> argList = CastUtils.cast(cmd.getArgList());
         if ("recovery".equals(mode)) {
             final FileServer fileServer = new FileServer();
-            fileServer.startRecovery(cmd.getArgList());
+            fileServer.startRecovery(argList);
         } else if ("archive".equals(mode)) {
             final FileServer fileServer = new FileServer();
-            fileServer.startArchive(cmd.getArgList());
+            fileServer.startArchive(argList);
         } else if ("secondary".equals(mode)) {
             final FileServer fileServer = new FileServer();
             fileServer.startSecondary();
@@ -433,7 +435,7 @@ public class FileServer {
         }
     }
 
-    private void startRecovery(final List list) {
+    private void startRecovery(final List<String> list) {
         LOG.info("starting recovery");
         final LogRange logFileRange = Util.logFileRange();
         if (logFileRange.noLogFile()) {
@@ -448,9 +450,9 @@ public class FileServer {
 
         final int size = list.size();
         if (size > 0) {
-            startId = Long.valueOf((String) list.get(0));
+            startId = Long.valueOf(list.get(0));
             if (size > 1) {
-                endId = Long.valueOf((String) list.get(1));
+                endId = Long.valueOf(list.get(1));
             }
         }
         if (startId < logFileRange.getFirst() || startId > lastId || endId > lastId) {
@@ -471,7 +473,7 @@ public class FileServer {
         LOG.info("recovery complete");
     }
 
-    private void startArchive(final List list) {
+    private void startArchive(final List<String> list) {
         LOG.info("starting archiving");
         final LogRange logFileRange = Util.logFileRange();
         if (logFileRange.noLogFile()) {

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoClientCommandContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoClientCommandContext.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoClientCommandContext.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoClientCommandContext.java Mon May 14 22:44:57 2012
@@ -21,6 +21,7 @@ package org.apache.isis.runtimes.dflt.ob
 
 import com.mongodb.DB;
 
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlCommandContext;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateWriter;
 
@@ -40,12 +41,12 @@ public class MongoClientCommandContext i
     public void end() {}
 
     @Override
-    public StateWriter createStateWriter(String specName) {
-        return new MongoStateWriter(db, specName);
+    public StateWriter createStateWriter(ObjectSpecId objectSpecId) {
+        return new MongoStateWriter(db, objectSpecId);
     }
 
     @Override
-    public void delete(String specificationName, String key, String version) {
+    public void delete(ObjectSpecId objectSpecId, String key, String version) {
         // TODO
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoDb.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoDb.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoDb.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoDb.java Mon May 14 22:44:57 2012
@@ -35,12 +35,13 @@ import com.mongodb.ObjectId;
 
 import org.apache.log4j.Logger;
 
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlCommandContext;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlStoreException;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.NoSqlDataDatabase;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateReader;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateWriter;
-import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreator;
+import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreatorDefault;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.PersistenceCommand;
 
 public class MongoDb implements NoSqlDataDatabase {
@@ -54,19 +55,19 @@ public class MongoDb implements NoSqlDat
     private final String host;
     private final int port;
     private final String dbName;
-    private final KeyCreator keyCreator;
+    private final KeyCreatorDefault keyCreator;
     
 	private Mongo mongo;
 	private DB db;
 
-    public MongoDb(final String host, final int port, final String name, final KeyCreator keyCreator) {
+    public MongoDb(final String host, final int port, final String name, final KeyCreatorDefault keyCreator) {
         this.host = host;
         this.port = port == 0 ? DEFAULT_PORT : port;
         this.dbName = name;
         this.keyCreator = keyCreator;
     }
 
-    public KeyCreator getKeyCreator() {
+    public KeyCreatorDefault getKeyCreator() {
         return keyCreator;
     }
 
@@ -109,7 +110,7 @@ public class MongoDb implements NoSqlDat
     //////////////////////////////////////////////////
     
     @Override
-    public long nextSerialNumberBatch(final String name, final int batchSize) {
+    public long nextSerialNumberBatch(final ObjectSpecId name, final int batchSize) {
         long next = readSerialNumber();
         writeSerialNumber(next + batchSize);
         return next + 1;
@@ -143,16 +144,16 @@ public class MongoDb implements NoSqlDat
     //////////////////////////////////////////////////
 
     @Override
-    public boolean hasInstances(final String specificationName) {
-        final DBCollection instances = db.getCollection(specificationName);
+    public boolean hasInstances(final ObjectSpecId objectSpecId) {
+        final DBCollection instances = db.getCollection(objectSpecId.asString());
         return instances.getCount() > 0;
     }
 
     @Override
-    public Iterator<StateReader> instancesOf(final String specificationName) {
-        final DBCollection instances = db.getCollection(specificationName);
+    public Iterator<StateReader> instancesOf(final ObjectSpecId objectSpecId) {
+        final DBCollection instances = db.getCollection(objectSpecId.asString());
         final DBCursor cursor = instances.find();
-        LOG.info("searching for instances of: " + specificationName);
+        LOG.info("searching for instances of: " + objectSpecId);
         return new Iterator<StateReader>() {
             @Override
             public boolean hasNext() {
@@ -173,16 +174,16 @@ public class MongoDb implements NoSqlDat
     }
 
     @Override
-    public StateReader getInstance(final String key, final String specName) {
-        return new MongoStateReader(db, specName, key);
+    public StateReader getInstance(final String key, final ObjectSpecId objectSpecId) {
+        return new MongoStateReader(db, objectSpecId, key);
     }
 
     //////////////////////////////////////////////////
     // write, delete
     //////////////////////////////////////////////////
 
-    public StateWriter createStateWriter(final String specName) {
-        return new MongoStateWriter(db, specName);
+    public StateWriter createStateWriter(final ObjectSpecId objectSpecId) {
+        return new MongoStateWriter(db, objectSpecId);
     }
 
 
@@ -194,8 +195,8 @@ public class MongoDb implements NoSqlDat
         }
     }
 
-    public void delete(final String specificationName, final String key) {
-        final DBCollection instances = db.getCollection(specificationName);
+    public void delete(final ObjectSpecId objectSpecId, final String key) {
+        final DBCollection instances = db.getCollection(objectSpecId.asString());
         final ObjectId id = new ObjectId(key);
         final DBObject object = instances.findOne(id);
         instances.remove(object);
@@ -208,21 +209,21 @@ public class MongoDb implements NoSqlDat
     //////////////////////////////////////////////////
 
     @Override
-    public void addService(final String name, final String key) {
+    public void addService(final ObjectSpecId objectSpecId, final String key) {
         final DBCollection services = db.getCollection("services");
-        services.insert(new BasicDBObject().append("name", name).append("key", key));
-        LOG.info("service added " + name + ":" + key);
+        services.insert(new BasicDBObject().append("name", objectSpecId.asString()).append("key", key));
+        LOG.info("service added " + objectSpecId + ":" + key);
     }
 
     @Override
-    public String getService(final String name) {
+    public String getService(final ObjectSpecId objectSpecId) {
         final DBCollection services = db.getCollection("services");
-        final DBObject object = services.findOne(new BasicDBObject().append("name", name));
+        final DBObject object = services.findOne(new BasicDBObject().append("name", objectSpecId.asString()));
         if (object == null) {
             return null;
         } else {
             final String id = (String) object.get("key");
-            LOG.info("service found " + name + ":" + id);
+            LOG.info("service found " + objectSpecId + ":" + id);
             return id;
         }
     }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoPersistorMechanismInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoPersistorMechanismInstaller.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoPersistorMechanismInstaller.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoPersistorMechanismInstaller.java Mon May 14 22:44:57 2012
@@ -23,7 +23,6 @@ import org.apache.isis.core.commons.conf
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.NoSqlDataDatabase;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.NoSqlPersistorMechanismInstaller;
-import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreator;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreatorDefault;
 
 public class MongoPersistorMechanismInstaller extends NoSqlPersistorMechanismInstaller {
@@ -43,7 +42,7 @@ public class MongoPersistorMechanismInst
         final String host = configuration.getString(DB_HOST, "localhost");
         final int port = configuration.getInteger(DB_PORT, 0);
         final String name = configuration.getString(DB_NAME, "isis");
-        final KeyCreator keyCreator = new KeyCreatorDefault();
+        final KeyCreatorDefault keyCreator = new KeyCreatorDefault();
         db = new MongoDb(host, port, name, keyCreator);
         return db;
     }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateReader.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateReader.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateReader.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateReader.java Mon May 14 22:44:57 2012
@@ -28,25 +28,31 @@ import com.mongodb.DBObject;
 import org.apache.log4j.Logger;
 
 import org.apache.isis.core.commons.exceptions.UnexpectedCallException;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateReader;
 import org.apache.isis.runtimes.dflt.runtime.persistence.ObjectNotFoundException;
 
-public class MongoStateReader implements StateReader, PropertyNames {
-     private static final Logger LOG = Logger.getLogger(MongoStateReader.class);
+public class MongoStateReader implements StateReader {
+    
+    private static final Logger LOG = Logger.getLogger(MongoStateReader.class);
     private final DBObject instance;
 
-    public MongoStateReader(final DB db, final String specName, final String key) {
-        final DBCollection instances = db.getCollection(specName);
-        instance = instances.findOne(key);
+    public MongoStateReader(final DB db, final ObjectSpecId objectSpecId, final String mongoId) {
+        final DBCollection instances = db.getCollection(objectSpecId.asString());
+        instance = instances.findOne(mongoId);
         if (instance == null) {
-            throw new ObjectNotFoundException(key);
+            throw new ObjectNotFoundException(mongoId);
+        }
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("loading " + instance);
         }
-        LOG.debug("loading " + instance);
     }
 
     public MongoStateReader(final DBObject instance) {
         this.instance = instance;
-        LOG.debug("loading " + instance);
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("loading " + instance);
+        }
     }
 
     @Override
@@ -54,9 +60,8 @@ public class MongoStateReader implements
         final Object value = instance.get(id);
         if (value == null || value.equals("null")) {
             return 0;
-        } else {
-            return Long.valueOf((String) value);
-        }
+        } 
+        return Long.valueOf((String) value);
     }
 
     @Override
@@ -71,32 +76,33 @@ public class MongoStateReader implements
 
     @Override
     public String readEncrytionType() {
-        return (String) instance.get(ENCRYPT);
+        return (String) instance.get(PropertyNames.ENCRYPT);
     }
 
-    @Override
-    public String readObjectType() {
-        return (String) instance.get(TYPE);
-    }
+//    @Override
+//    public String readObjectType() {
+//        return (String) instance.get(TYPE);
+//    }
+//
 
     @Override
-    public String readId() {
-        return readField(ID);
+    public String readOid() {
+        return readField(PropertyNames.OID);
     }
 
     @Override
     public String readVersion() {
-        return readField(VERSION);
+        return readField(PropertyNames.VERSION);
     }
 
     @Override
     public String readUser() {
-        return readField(USER);
+        return readField(PropertyNames.USER);
     }
 
     @Override
     public String readTime() {
-        return readField(TIME);
+        return readField(PropertyNames.TIME);
     }
 
     @Override

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateWriter.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateWriter.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateWriter.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateWriter.java Mon May 14 22:44:57 2012
@@ -28,31 +28,45 @@ import com.mongodb.DBCollection;
 import org.apache.log4j.Logger;
 
 import org.apache.isis.core.commons.exceptions.UnexpectedCallException;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.db.StateWriter;
 
-public class MongoStateWriter implements StateWriter, PropertyNames {
+public class MongoStateWriter implements StateWriter {
+    
     private static final Logger LOG = Logger.getLogger(MongoStateWriter.class);
     private final BasicDBObject dbObject;
     private final DBCollection instances;
 
-    public MongoStateWriter(final DB db, final String specName) {
+    public MongoStateWriter(final DB db, final ObjectSpecId objectSpecId) {
         dbObject = new BasicDBObject();
-        instances = db.getCollection(specName);
+        instances = db.getCollection(objectSpecId.asString());
     }
 
     public void flush() {
         instances.save(dbObject);
-        LOG.debug("saved " + dbObject);
-    }
-
-    @Override
-    public void writeId(final String oid) {
-        writeField(ID, oid);
-    }
-
-    @Override
-    public void writeType(final String type) {
-        writeField(TYPE, type);
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("saved " + dbObject);
+        }
+    }
+
+//    public void writeId(final String oid) {
+//        writeField(ID, oid);
+//    }
+//
+//    @Override
+//    public void writeObjectType(final String type) {
+//        writeField(TYPE, type);
+//    }
+
+    @Override
+    public void writeOid(final TypedOid typedOid) {
+        writeField(PropertyNames.OID, typedOid.enString());
+        if(typedOid instanceof RootOid) {
+            RootOid rootOid = (RootOid) typedOid;
+            writeField(PropertyNames.MONGO_INTERNAL_ID, rootOid.getIdentifier());
+        }
     }
 
     @Override
@@ -67,22 +81,22 @@ public class MongoStateWriter implements
 
     @Override
     public void writeEncryptionType(final String type) {
-        writeField(ENCRYPT, type);
+        writeField(PropertyNames.ENCRYPT, type);
     }
 
     @Override
     public void writeVersion(final String currentVersion, final String newVersion) {
-         writeField(VERSION, newVersion);
+         writeField(PropertyNames.VERSION, newVersion);
     }
 
     @Override
     public void writeTime(final String time) {
-        writeField(TIME, time);
+        writeField(PropertyNames.TIME, time);
     }
 
     @Override
     public void writeUser(final String user) {
-        writeField(USER, user);
+        writeField(PropertyNames.USER, user);
     }
 
     @Override

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/PropertyNames.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/PropertyNames.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/PropertyNames.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/PropertyNames.java Mon May 14 22:44:57 2012
@@ -19,13 +19,19 @@
 
 package org.apache.isis.runtimes.dflt.objectstores.nosql.db.mongo;
 
-interface PropertyNames {
+public final class PropertyNames {
+    
+    private PropertyNames(){}
+    
     static final String ENCRYPT = "_encrypt";
-    static final String TYPE = "_type";
-    static final String ID = "_id";
+    
+//    static final String TYPE = "_type";
+//    static final String ID = "_id";
+    
+    static final String MONGO_INTERNAL_ID = "_id";
+    static final String OID = "_oid";
     static final String VERSION = "_version";
     static final String TIME = "_time";
     static final String USER = "_user";
-
 }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/keys/KeyCreatorDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/keys/KeyCreatorDefault.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/keys/KeyCreatorDefault.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/keys/KeyCreatorDefault.java Mon May 14 22:44:57 2012
@@ -21,63 +21,73 @@ package org.apache.isis.runtimes.dflt.ob
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
+import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.NoSqlStoreException;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 
-public class KeyCreatorDefault implements KeyCreator {
+public class KeyCreatorDefault {
 
-    public KeyCreatorDefault() {
-    }
-    
-    @Override
-    public String key(final Oid oid) {
+    /**
+     * returns {@link RootOid#getIdentifier()} (oid must be {@link RootOid}, and must be persistent). 
+     */
+    public String getIdentifierForPersistentRoot(final Oid oid) {
         if (!(oid instanceof RootOid)) {
             throw new NoSqlStoreException("Oid is not a RootOid: " + oid);
         } 
-        RootOid rootOid = (RootOidDefault) oid;
+        RootOid rootOid = (RootOid) oid;
         if (rootOid.isTransient()) {
             throw new NoSqlStoreException("Oid is not for a persistent object: " + oid);
         }
         return rootOid.getIdentifier();
     }
 
-    @Override
-    public String reference(final ObjectAdapter adapter) {
+    /**
+     * Equivalent to the {@link Oid#enString()} for the adapter's Oid.
+     */
+    public String oidStrFor(final ObjectAdapter adapter) {
         if(adapter == null) {
             return null;
         }
         try {
-            return adapter.getSpecification().getFullIdentifier() + "@" + key(adapter.getOid());
+            //return adapter.getSpecification().getFullIdentifier() + "@" + key(adapter.getOid());
+            return adapter.getOid().enString();
         } catch (final NoSqlStoreException e) {
             throw new NoSqlStoreException("Failed to create refence for " + adapter, e);
         }
     }
 
-    @Override
-    public RootOid oid(ObjectSpecification objectSpecification, final String id) {
-        final String objectType = objectSpecification.getObjectType();
-        return RootOidDefault.create(objectType, id);
-    }
-
-    @Override
-    public RootOid oidFromReference(final String ref) {
-        final ObjectSpecification objectSpecification = specificationFromReference(ref);
-        final String id = ref.split("@")[1];
-        return oid(objectSpecification, id);
-    }
-
-    @Override
-    public ObjectSpecification specificationFromReference(final String ref) {
-        final String name = ref.split("@")[0];
-        return getSpecificationLoader().loadSpecification(name);
+    public RootOid createRootOid(ObjectSpecification objectSpecification, final String identifier) {
+        final ObjectSpecId objectSpecId = objectSpecification.getSpecId();
+        return RootOidDefault.create(objectSpecId, identifier);
+    }
+
+    public RootOid unmarshal(final String oidStr) {
+//        final ObjectSpecification objectSpecification = specificationFromReference(ref);
+//        final String id = ref.split("@")[1];
+//        return oid(objectSpecification, id);
+        return getOidMarshaller().unmarshal(oidStr, RootOid.class);
+    }
+
+    public ObjectSpecification specificationFromOidStr(final String oidStr) {
+//        final String name = ref.split("@")[0];
+//        return getSpecificationLoader().loadSpecification(name);
+        final TypedOid oid = getOidMarshaller().unmarshal(oidStr, TypedOid.class);
+        return getSpecificationLoader().lookupBySpecId(oid.getObjectSpecId());
     }
 
     protected SpecificationLoader getSpecificationLoader() {
         return IsisContext.getSpecificationLoader();
     }
 
+    protected OidMarshaller getOidMarshaller() {
+        return new OidMarshaller();
+    }
+
+
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/test/java/org/apache/isis/runtimes/dflt/objectstores/nosql/DestroyObjectCommandImplementationTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/test/java/org/apache/isis/runtimes/dflt/objectstores/nosql/DestroyObjectCommandImplementationTest.java?rev=1338472&r1=1338471&r2=1338472&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/test/java/org/apache/isis/runtimes/dflt/objectstores/nosql/DestroyObjectCommandImplementationTest.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/test/java/org/apache/isis/runtimes/dflt/objectstores/nosql/DestroyObjectCommandImplementationTest.java Mon May 14 22:44:57 2012
@@ -26,12 +26,13 @@ import org.junit.Rule;
 import org.junit.Test;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
 import org.apache.isis.core.metamodel.adapter.version.SerialNumberVersion;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode;
-import org.apache.isis.runtimes.dflt.objectstores.nosql.keys.KeyCreatorDefault;
 import org.apache.isis.runtimes.dflt.objectstores.nosql.versions.VersionCreatorDefault;
 
 public class DestroyObjectCommandImplementationTest {
@@ -45,33 +46,40 @@ public class DestroyObjectCommandImpleme
     private ObjectSpecification specification;
     @Mock
     private ObjectAdapter adapter;
-    @Mock
-    private RootOidDefault oid;
+    
     @Mock
     private VersionCreatorDefault versionCreator;
     @Mock
-    private KeyCreatorDefault keyCreator;
-    @Mock
     private SerialNumberVersion version;
 
+    //private KeyCreatorDefault keyCreator;
+
+    private final ObjectSpecId specId = ObjectSpecId.of("com.foo.bar.SomeClass");
 
     private long id = 123;
     private String keyStr = Long.toString(id, 16);
-    
+
+    private RootOid rootOid = RootOidDefault.create(specId, keyStr);
+
     private NoSqlDestroyObjectCommand command;
 
     @Before
     public void setup() {
+        //keyCreator = new KeyCreatorDefault();
+        
         context.checking(new Expectations(){{
 
             allowing(specification).getFullIdentifier();
             will(returnValue("com.foo.bar.SomeClass"));
 
+            allowing(specification).getSpecId();
+            will(returnValue(specId));
+
             allowing(adapter).getSpecification();
             will(returnValue(specification));
             
             allowing(adapter).getOid();
-            will(returnValue(oid));
+            will(returnValue(rootOid));
 
             allowing(adapter).getVersion();
             will(returnValue(version));
@@ -86,17 +94,17 @@ public class DestroyObjectCommandImpleme
 
         context.checking(new Expectations() {
             {
-                one(keyCreator).key(oid);
-                will(returnValue(keyStr));
+//                one(keyCreator).getIdentifierForPersistentRoot(oid);
+//                will(returnValue(keyStr));
 
                 one(versionCreator).versionString(version);
                 will(returnValue(versionStr));
 
-                one(commandContext).delete(specification.getFullIdentifier(), keyStr, versionStr);
+                one(commandContext).delete(specification.getSpecId(), keyStr, versionStr);
             }
         });
 
-        command = new NoSqlDestroyObjectCommand(keyCreator, versionCreator, adapter);
+        command = new NoSqlDestroyObjectCommand(versionCreator, adapter);
         command.execute(commandContext);
     }
 }