Removed all conversion between different implementations of INode.
Removed all reference checking, since we don't do garbage collection on transient nodes.
This commit is contained in:
parent
33c9f4cc8c
commit
9d78bde488
1 changed files with 4 additions and 76 deletions
|
@ -13,9 +13,9 @@ import java.io.*;
|
||||||
import helma.util.*;
|
import helma.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A transient implementation of INode. If a transient node is stored in a
|
* A transient implementation of INode. An instance of this class can't be
|
||||||
* database, it is automatically (along with all reachable subnodes) rebuilt
|
* made persistent by reachability from a persistent node. To make a persistent-capable
|
||||||
* as a persistent node.
|
* object, class helma.objectmodel.db.Node has to be used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class Node implements INode, Serializable {
|
public class Node implements INode, Serializable {
|
||||||
|
@ -64,48 +64,6 @@ public class Node implements INode, Serializable {
|
||||||
created = lastmodified = System.currentTimeMillis ();
|
created = lastmodified = System.currentTimeMillis ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a clone of a given node that implements this class
|
|
||||||
*/
|
|
||||||
public Node (INode node, Hashtable ntable, boolean conversionRoot) {
|
|
||||||
this.id = generateID ();
|
|
||||||
this.name = node.getName ();
|
|
||||||
created = lastmodified = System.currentTimeMillis ();
|
|
||||||
ntable.put (node, this);
|
|
||||||
adoptName = !conversionRoot; // only take over name from property if this is not the transient root
|
|
||||||
for (Enumeration e = node.getSubnodes (); e.hasMoreElements (); ) {
|
|
||||||
INode next = (INode) e.nextElement ();
|
|
||||||
Node nextc = (Node) ntable.get (next);
|
|
||||||
if (nextc == null)
|
|
||||||
nextc = new Node (next, ntable, true);
|
|
||||||
addNode (nextc);
|
|
||||||
}
|
|
||||||
for (Enumeration e = node.properties (); e.hasMoreElements (); ) {
|
|
||||||
IProperty next = node.get ((String) e.nextElement (), false);
|
|
||||||
if (next == null)
|
|
||||||
continue;
|
|
||||||
int t = next.getType ();
|
|
||||||
if (t == IProperty.NODE) {
|
|
||||||
INode n = next.getNodeValue ();
|
|
||||||
Node nextc = (Node) ntable.get (n);
|
|
||||||
if (nextc == null)
|
|
||||||
nextc = new Node (n, ntable, true);
|
|
||||||
setNode (next.getName (), nextc);
|
|
||||||
} else if (t == IProperty.STRING) {
|
|
||||||
setString (next.getName (), next.getStringValue ());
|
|
||||||
} else if (t == IProperty.INTEGER) {
|
|
||||||
setInteger (next.getName (), next.getIntegerValue ());
|
|
||||||
} else if (t == IProperty.FLOAT) {
|
|
||||||
setFloat (next.getName (), next.getFloatValue ());
|
|
||||||
} else if (t == IProperty.BOOLEAN) {
|
|
||||||
setBoolean (next.getName (), next.getBooleanValue ());
|
|
||||||
} else if (t == IProperty.DATE) {
|
|
||||||
setDate (next.getName (), next.getDateValue ());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
adoptName = true; // switch back to normal name adoption behaviour
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setDbMapping (DbMapping dbmap) {
|
public void setDbMapping (DbMapping dbmap) {
|
||||||
this.dbmap = dbmap;
|
this.dbmap = dbmap;
|
||||||
|
@ -253,9 +211,6 @@ public class Node implements INode, Serializable {
|
||||||
node.parent = this;
|
node.parent = this;
|
||||||
node.anonymous = true;
|
node.anonymous = true;
|
||||||
}
|
}
|
||||||
/* if (node.parent != null && (node.parent != this || !node.anonymous)) {
|
|
||||||
node.registerLink (this);
|
|
||||||
} */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lastmodified = System.currentTimeMillis ();
|
lastmodified = System.currentTimeMillis ();
|
||||||
|
@ -434,7 +389,7 @@ public class Node implements INode, Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Property makeVirtualNode (String propname, Relation rel) {
|
private Property makeVirtualNode (String propname, Relation rel) {
|
||||||
INode node = new helma.objectmodel.db.Node (rel.propname, dbmap.getWrappedNodeManager());
|
INode node = new helma.objectmodel.db.Node (rel.propname, rel.prototype, dbmap.getWrappedNodeManager());
|
||||||
// node.setState (TRANSIENT);
|
// node.setState (TRANSIENT);
|
||||||
// make a db mapping good enough that the virtual node finds its subnodes
|
// make a db mapping good enough that the virtual node finds its subnodes
|
||||||
DbMapping dbm = new DbMapping ();
|
DbMapping dbm = new DbMapping ();
|
||||||
|
@ -605,8 +560,6 @@ public class Node implements INode, Serializable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Server.throwNodeEvent (new NodeEvent (this, NodeEvent.SUBNODE_ADDED, n));
|
|
||||||
// Server.throwNodeEvent (new NodeEvent (this, NodeEvent.PROPERTIES_CHANGED));
|
|
||||||
lastmodified = System.currentTimeMillis ();
|
lastmodified = System.currentTimeMillis ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -615,29 +568,10 @@ public class Node implements INode, Serializable {
|
||||||
return;
|
return;
|
||||||
try {
|
try {
|
||||||
Property p = (Property) propMap.remove (propname.toLowerCase ());
|
Property p = (Property) propMap.remove (propname.toLowerCase ());
|
||||||
/* if (p != null && p.type == Property.NODE)
|
|
||||||
p.unregisterNode (); */
|
|
||||||
// Server.throwNodeEvent (new NodeEvent (this, NodeEvent.PROPERTIES_CHANGED));
|
|
||||||
lastmodified = System.currentTimeMillis ();
|
lastmodified = System.currentTimeMillis ();
|
||||||
} catch (Exception ignore) {}
|
} catch (Exception ignore) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* protected void registerPropLink (Property p) {
|
|
||||||
if (proplinks == null)
|
|
||||||
proplinks = new Vector ();
|
|
||||||
proplinks.addElement (p);
|
|
||||||
// IServer.getLogger().log ("registered proplink from "+p.node.getFullName ());
|
|
||||||
// the NodeEvent is thrown later, since the node is not yet in the prop table
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void unregisterPropLink (Property p) {
|
|
||||||
if (proplinks != null)
|
|
||||||
proplinks.removeElement (p);
|
|
||||||
// IServer.getLogger().log ("unregistered proplink from "+p.node.getFullName ());
|
|
||||||
// Server.throwNodeEvent (new NodeEvent (this, NodeEvent.NODE_REMOVED));
|
|
||||||
// Server.throwNodeEvent (new NodeEvent (p.node, NodeEvent.SUBNODE_REMOVED, this));
|
|
||||||
} */
|
|
||||||
|
|
||||||
|
|
||||||
public String getUrl (INode root, INode users, String tmpname, String rootproto) {
|
public String getUrl (INode root, INode users, String tmpname, String rootproto) {
|
||||||
throw new RuntimeException ("HREFs on transient (non-db based) Nodes not supported");
|
throw new RuntimeException ("HREFs on transient (non-db based) Nodes not supported");
|
||||||
|
@ -657,12 +591,6 @@ public class Node implements INode, Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected Node convert (INode n) {
|
|
||||||
Hashtable ntable = new Hashtable ();
|
|
||||||
Node converted = new Node (n, ntable, false);
|
|
||||||
return converted;
|
|
||||||
}
|
|
||||||
|
|
||||||
INode cacheNode;
|
INode cacheNode;
|
||||||
/**
|
/**
|
||||||
* Get the cache node for this node. This can be used to store transient cache data per node from Javascript.
|
* Get the cache node for this node. This can be used to store transient cache data per node from Javascript.
|
||||||
|
|
Loading…
Add table
Reference in a new issue