You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by rm...@apache.org on 2012/08/09 12:41:09 UTC

svn commit: r1371153 - in /incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql: ./ db/file/ db/mongo/

Author: rmatthews
Date: Thu Aug  9 10:41:08 2012
New Revision: 1371153

URL: http://svn.apache.org/viewvc?rev=1371153&view=rev
Log:
ISIS-234 - implemented store-aggregate methods so that aggregated objects are embedded in their parent's document.

Modified:
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/NoSqlObjectStore.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/ObjectReader.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/file/JsonStateWriter.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateReader.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/db/mongo/MongoStateWriter.java

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/NoSqlObjectStore.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/NoSqlObjectStore.java?rev=1371153&r1=1371152&r2=1371153&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/NoSqlObjectStore.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/nosql/src/main/java/org/apache/isis/runtimes/dflt/objectstores/nosql/NoSqlObjectStore.java Thu Aug  9 10:41:08 2012
@@ -19,14 +19,10 @@
 
 package org.apache.isis.runtimes.dflt.objectstores.nosql;
 
-import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.AggregatedOid;
@@ -55,6 +51,9 @@ import org.apache.isis.runtimes.dflt.run
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceQuery;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
 public class NoSqlObjectStore implements ObjectStore {
     
     private final KeyCreatorDefault keyCreator = new KeyCreatorDefault();

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=1371153&r1=1371152&r2=1371153&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 Thu Aug  9 10:41:08 2012
@@ -135,16 +135,12 @@ public class ObjectReader {
     }
 
     private ObjectAdapter restoreAggregatedObject(final StateReader aggregateReader, final AggregatedOid aggregatedOid, final DataEncryption dataEncrypter) {
-        
         final ObjectSpecification specification = getSpecificationLoader().lookupBySpecId(aggregatedOid.getObjectSpecId());
-
         final ObjectAdapter fieldObject = getAdapter(specification, aggregatedOid);
-        if (fieldObject.isGhost()) {
-            final ResolveState resolveState = ResolveState.RESOLVING;
-            fieldObject.changeState(resolveState);
-            readFields(aggregateReader, fieldObject, dataEncrypter);
-            fieldObject.changeState(resolveState.getEndState());
-        }
+        final ResolveState resolveState = ResolveState.RESOLVING;
+        fieldObject.changeState(resolveState);
+        readFields(aggregateReader, fieldObject, dataEncrypter);
+        fieldObject.changeState(resolveState.getEndState());
         return fieldObject;
     }
 

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=1371153&r1=1371152&r2=1371153&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 Thu Aug  9 10:41:08 2012
@@ -50,24 +50,11 @@ public class JsonStateWriter implements 
         return jsonStateWriter;
     }
 
-//    @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 writeOid(final TypedOid typedOid) {
+        this.oid = typedOid;
+        writeField(PropertyNames.OID, typedOid.enString());
+    }
     
     @Override
     public void writeEncryptionType(final String type) {

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=1371153&r1=1371152&r2=1371153&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 Thu Aug  9 10:41:08 2012
@@ -19,18 +19,18 @@
 
 package org.apache.isis.runtimes.dflt.objectstores.nosql.db.mongo;
 
+import java.util.ArrayList;
 import java.util.List;
 
-import com.mongodb.DB;
-import com.mongodb.DBCollection;
-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;
+import org.apache.log4j.Logger;
+
+import com.mongodb.BasicDBList;
+import com.mongodb.DB;
+import com.mongodb.DBCollection;
+import com.mongodb.DBObject;
 
 public class MongoStateReader implements StateReader {
     
@@ -79,12 +79,6 @@ public class MongoStateReader implements
         return (String) instance.get(PropertyNames.ENCRYPT);
     }
 
-//    @Override
-//    public String readObjectType() {
-//        return (String) instance.get(TYPE);
-//    }
-//
-
     @Override
     public String readOid() {
         return readField(PropertyNames.OID);
@@ -107,12 +101,21 @@ public class MongoStateReader implements
 
     @Override
     public StateReader readAggregate(final String id) {
-        throw new UnexpectedCallException();
+        DBObject object = (DBObject) instance.get(id);
+        return object == null ? null : new MongoStateReader(object);
     }
 
     @Override
     public List<StateReader> readCollection(final String id) {
-        throw new UnexpectedCallException();
+        BasicDBList array = (BasicDBList) instance.get(id);
+        final List<StateReader> readers = new ArrayList<StateReader>();
+        if (array != null) {
+            final int size = array.size();
+            for (int i = 0; i < size; i++) {
+                readers.add(new MongoStateReader((DBObject) array.get(i)));
+            }
+        }
+        return readers;
     }
 
 }

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=1371153&r1=1371152&r2=1371153&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 Thu Aug  9 10:41:08 2012
@@ -21,29 +21,34 @@ package org.apache.isis.runtimes.dflt.ob
 
 import java.util.List;
 
-import com.mongodb.BasicDBObject;
-import com.mongodb.DB;
-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;
+import org.apache.log4j.Logger;
+
+import com.google.common.collect.Lists;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DB;
+import com.mongodb.DBCollection;
 
 public class MongoStateWriter implements StateWriter {
     
     private static final Logger LOG = Logger.getLogger(MongoStateWriter.class);
+    private final DB db;
     private final BasicDBObject dbObject;
-    private final DBCollection instances;
+    private DBCollection instances;
 
     public MongoStateWriter(final DB db, final ObjectSpecId objectSpecId) {
-        dbObject = new BasicDBObject();
+        this(db);
         instances = db.getCollection(objectSpecId.asString());
     }
 
+    private MongoStateWriter(final DB db) {
+        this.db = db;
+        dbObject = new BasicDBObject();
+    }
+
     public void flush() {
         instances.save(dbObject);
         if(LOG.isDebugEnabled()) {
@@ -51,15 +56,6 @@ public class MongoStateWriter implements
         }
     }
 
-//    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());
@@ -101,15 +97,22 @@ public class MongoStateWriter implements
 
     @Override
     public StateWriter addAggregate(final String id) {
-        throw new UnexpectedCallException();
+        final MongoStateWriter stateWriter = new MongoStateWriter(db);
+        dbObject.put(id, stateWriter.dbObject);
+        return stateWriter;
     }
 
     @Override
     public StateWriter createElementWriter() {
-        return null;
+        return new MongoStateWriter(db);
     }
 
     @Override
     public void writeCollection(final String id, final List<StateWriter> elements) {
+        final List<BasicDBObject> collection = Lists.newArrayList();
+        for (final StateWriter writer : elements) {
+            collection.add(((MongoStateWriter) writer).dbObject);
+        }
+        dbObject.put(id, collection);
     }
 }