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);
}
}