From 66eb75456420f099021e4c146ddd97c357128e8c Mon Sep 17 00:00:00 2001 From: hns Date: Thu, 30 Jul 2009 09:48:58 +0000 Subject: [PATCH] Make sure nodes created by HopObject.getCollection have a valid id. Fixes bug 663. --- src/helma/objectmodel/db/DbKey.java | 3 +++ src/helma/objectmodel/db/DbMapping.java | 8 ++++++++ src/helma/scripting/rhino/HopObjectCtor.java | 9 +++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/helma/objectmodel/db/DbKey.java b/src/helma/objectmodel/db/DbKey.java index b644b077..3636b3d9 100644 --- a/src/helma/objectmodel/db/DbKey.java +++ b/src/helma/objectmodel/db/DbKey.java @@ -45,6 +45,9 @@ public final class DbKey implements Key, Serializable { * make a key for a persistent Object, describing its datasource and id. */ public DbKey(DbMapping dbmap, String id) { + if (id == null) { + throw new IllegalArgumentException("id null in DbKey"); + } this.id = id; this.storageName = (dbmap == null) ? null : dbmap.getStorageTypeName(); } diff --git a/src/helma/objectmodel/db/DbMapping.java b/src/helma/objectmodel/db/DbMapping.java index 9f26d048..90306657 100644 --- a/src/helma/objectmodel/db/DbMapping.java +++ b/src/helma/objectmodel/db/DbMapping.java @@ -144,6 +144,14 @@ public final class DbMapping { } } + /** + * Create a DbMapping from a type.properties property file + */ + public DbMapping(Application app, String typename, Properties props, boolean virtual) { + this(app, typename, props); + isVirtual = virtual; + } + /** * Create a DbMapping from a type.properties property file */ diff --git a/src/helma/scripting/rhino/HopObjectCtor.java b/src/helma/scripting/rhino/HopObjectCtor.java index 5494dd92..e8f9ce58 100644 --- a/src/helma/scripting/rhino/HopObjectCtor.java +++ b/src/helma/scripting/rhino/HopObjectCtor.java @@ -23,6 +23,7 @@ import helma.objectmodel.INode; import helma.objectmodel.db.DbMapping; import helma.objectmodel.db.DbKey; import helma.objectmodel.db.Node; +import helma.objectmodel.db.WrappedNodeManager; import org.mozilla.javascript.*; @@ -36,6 +37,8 @@ public class HopObjectCtor extends FunctionObject { static Method hopObjCtor; + static long collectionId = 0; + static { try { hopObjCtor = HopObjectCtor.class.getMethod("jsConstructor", new Class[] { @@ -203,11 +206,13 @@ public class HopObjectCtor extends FunctionObject { childmapping.put("collection", HopObjectCtor.this.getFunctionName()); } - Node node = new Node("HopQuery", null, core.app.getWrappedNodeManager()); Properties props = new Properties(); props.put("_children", childmapping); - DbMapping dbmap = new DbMapping(core.app, null, props); + DbMapping dbmap = new DbMapping(core.app, null, props, true); dbmap.update(); + + WrappedNodeManager nmgr = core.app.getWrappedNodeManager(); + Node node = new Node("HopQuery", Long.toString(collectionId++), null, nmgr); node.setDbMapping(dbmap); node.setState(Node.VIRTUAL); return new HopObject("HopQuery", core, node, core.hopObjectProto);