r9846 - in helma/helma/trunk/src/helma: objectmodel/db scripting/rhino

[email protected] Thu, 30 Jul 2009 11:48:58 +0200 (CEST)
Newsgroups gmane.comp.java.helma.cvs
Message-ID <20090730094858.57C2D3D0E3@mia>
Author: hannes
Date: 2009-07-30 11:48:58 +0200 (Thu, 30 Jul 2009)
New Revision: 9846

Modified:
   helma/helma/trunk/src/helma/objectmodel/db/DbKey.java
   helma/helma/trunk/src/helma/objectmodel/db/DbMapping.java
   helma/helma/trunk/src/helma/scripting/rhino/HopObjectCtor.java
Log:
Make sure nodes created by HopObject.getCollection have a valid id. Fixes bug 663.

Details at http://dev.helma.org/trac/helma/changeset/9846

Modified: helma/helma/trunk/src/helma/objectmodel/db/DbKey.java
===================================================================
--- helma/helma/trunk/src/helma/objectmodel/db/DbKey.java	2009-07-30 09:04:43 UTC (rev 9845)
+++ helma/helma/trunk/src/helma/objectmodel/db/DbKey.java	2009-07-30 09:48:58 UTC (rev 9846)
@@ -45,6 +45,9 @@
      * 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();
     }

Modified: helma/helma/trunk/src/helma/objectmodel/db/DbMapping.java
===================================================================
--- helma/helma/trunk/src/helma/objectmodel/db/DbMapping.java	2009-07-30 09:04:43 UTC (rev 9845)
+++ helma/helma/trunk/src/helma/objectmodel/db/DbMapping.java	2009-07-30 09:48:58 UTC (rev 9846)
@@ -147,6 +147,14 @@
     /**
      * 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
+     */
     public DbMapping(Application app, String typename, Properties props) {
         this.app = app;
         // create a unique instance of the string. This is useful so

Modified: helma/helma/trunk/src/helma/scripting/rhino/HopObjectCtor.java
===================================================================
--- helma/helma/trunk/src/helma/scripting/rhino/HopObjectCtor.java	2009-07-30 09:04:43 UTC (rev 9845)
+++ helma/helma/trunk/src/helma/scripting/rhino/HopObjectCtor.java	2009-07-30 09:48:58 UTC (rev 9846)
@@ -23,6 +23,7 @@
 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 @@
 
     static Method hopObjCtor;
 
+    static long collectionId = 0;    
+
     static {
         try {
             hopObjCtor = HopObjectCtor.class.getMethod("jsConstructor", new Class[] {
@@ -203,11 +206,13 @@
                 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);