Author: michiel
Date: 2010-04-19 13:16:24 +0200 (Mon, 19 Apr 2010)
New Revision: 41950
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockCloud.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockCloudContext.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockNode.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockNodeManager.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockRelation.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockRelationManager.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockTransaction.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/NodeQueryHandler.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/util/AbstractCloud.java
mmbase/trunk/bridge/src/test/java/org/mmbase/bridge/mock/MockTest.java
Log:
support for aliases in mock
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockCloud.java
===================================================================
--- mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockCloud.java
2010-04-19 10:55:24 UTC (rev 41949)
+++ mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockCloud.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -35,8 +35,8 @@
}
- Node getNode(final Map<String, Object> m, final NodeManager nm, boolean n)
{
- return new MockNode(m, this, nm, n);
+ Node getNode(MockCloudContext.NodeDescription nd, boolean n) {
+ return new MockNode(nd, this, n);
}
@Override
@@ -49,9 +49,19 @@
return
getNodeManager(org.mmbase.util.Casting.toString(nd.values.get("name")));
} else {
NodeManager nm = getNodeManager(nd.type);
- return getNode(nd.values, nm, false);
+ return getNode(nd, false);
}
}
+ @Override
+ public Node getNodeByAlias(String alias) throws NotFoundException {
+ System.out.println("Fing node with alias " + alias + " in " +
cloudContext.nodes);
+ for (Map.Entry<Integer, MockCloudContext.NodeDescription> nd :
cloudContext.nodes.entrySet()) {
+ if (nd.getValue().aliases.contains(alias)) {
+ return getNode(nd.getKey());
+ }
+ }
+ throw new NotFoundException("No node with alias " + alias + " found in
" + this);
+ }
@Override
public boolean hasNode(int number) {
@@ -106,7 +116,7 @@
if (nm.getName().equals("typedef")) {
return
MockCloud.this.getNodeManager(Casting.toString(m.get("name")));
} else {
- return MockCloud.this.getNode(m, nm, false);
+ return
MockCloud.this.getNode(Casting.toInt(m.get("number")));
}
}
}
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockCloudContext.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockCloudContext.java
2010-04-19 10:55:24 UTC (rev 41949)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockCloudContext.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -61,13 +61,14 @@
public static class NodeDescription {
public final String type;
public final Map<String, Object> values;
+ public final Set<String> aliases = new HashSet<String>();
public NodeDescription(String t, Map<String, Object> v) {
type = t;
values = v;
}
@Override
public String toString() {
- return type + ":" + values;
+ return type + ":" + values + (aliases.size() > 0 ? aliases : "");
}
}
@@ -264,9 +265,13 @@
}
public synchronized int addNode(String type, Map<String, Object> map) {
+ return addNode(new NodeDescription(type, map));
+ }
+
+ synchronized int addNode(NodeDescription nd) {
int number = ++lastNodeNumber;
- nodes.put(number, new NodeDescription(type, map));
- map.put("number", number);
+ nodes.put(number, nd);
+ nd.values.put("number", number);
//System.out.println("produced " + number + " " + map);
return number;
}
@@ -274,7 +279,10 @@
synchronized void setNodeType(int node, String type) {
NodeDescription nd = nodes.get(node);
if (!nd.type.equals(type)) {
- nodes.put(node, new NodeDescription(type, nd.values));
+ NodeDescription newDesc = new NodeDescription(type, nd.values);
+ newDesc.aliases.addAll(nd.aliases);
+ nodes.put(node, newDesc);
+
}
}
Modified: mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockNode.java
===================================================================
--- mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockNode.java
2010-04-19 10:55:24 UTC (rev 41949)
+++ mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockNode.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -12,6 +12,7 @@
import java.util.*;
import org.mmbase.bridge.*;
+import org.mmbase.bridge.implementation.*;
import org.mmbase.bridge.util.*;
/**
@@ -26,15 +27,16 @@
*/
public class MockNode extends MapNode<Object> implements Node {
+ private final MockCloudContext.NodeDescription nodeDescription;
- private final Map<String, Object> originalMap;
+
protected final MockCloud cloud;
private String context = "default";
private boolean isNew;
- MockNode(Map<String, Object> map, MockCloud cloud, NodeManager nm, boolean
isNew) {
- super(new HashMap<String, Object>(map), nm);
- originalMap = map;
+ MockNode(MockCloudContext.NodeDescription nodeDescription, MockCloud
cloud, boolean isNew) {
+ super(new HashMap<String, Object>(nodeDescription.values),
cloud.getNodeManager(nodeDescription.type));
+ this.nodeDescription = nodeDescription;
this.cloud = cloud;
this.isNew = isNew;
}
@@ -45,12 +47,12 @@
if (errors.size() > 0) {
throw new IllegalArgumentException("node " + getNumber() +
getChanged() + ", builder '" + nodeManager.getName() + "' " + errors);
}
- if (! originalMap.containsKey("number")) {
+ if (! nodeDescription.values.containsKey("number")) {
// This is a new node, so generate a number first
- int number =
cloud.getCloudContext().addNode(getNodeManager().getName(), values);
+ int number = cloud.getCloudContext().addNode(nodeDescription);
values.put("number", number);
}
- originalMap.putAll(values);
+ nodeDescription.values.putAll(values);
cloud.getCloudContext().setNodeType(getNumber(),
getNodeManager().getName());
isNew = false;
}
@@ -92,4 +94,20 @@
public String toString() {
return getNodeManager().toString() + values;
}
+
+ @Override
+ public StringList getAliases() {
+ return new BasicStringList(nodeDescription.aliases);
+ }
+
+ @Override
+ public void createAlias(String aliasName) {
+ nodeDescription.aliases.add(aliasName);
+ }
+
+ @Override
+ public void deleteAlias(String aliasName) {
+ nodeDescription.aliases.remove(aliasName);
+ }
+
}
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockNodeManager.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockNodeManager.java
2010-04-19 10:55:24 UTC (rev 41949)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockNodeManager.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -93,7 +93,8 @@
Map<String, Object> map = new HashMap<String, Object>();
map.put("otype", oType);
map.put("owner", vcloud.getUser().getOwnerField());
- return vcloud.getNode(map, this, true);
+ MockCloudContext.NodeDescription desc = new
MockCloudContext.NodeDescription(getName(), map);
+ return vcloud.getNode(desc, true);
}
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockRelation.java
===================================================================
--- mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockRelation.java
2010-04-19 10:55:24 UTC (rev 41949)
+++ mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockRelation.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -21,8 +21,8 @@
public class MockRelation extends MockNode implements Relation {
- MockRelation(Map<String, Object> map, MockCloud cloud, NodeManager nm,
boolean isNew) {
- super(new HashMap<String, Object>(map), cloud, nm, isNew);
+ MockRelation(MockCloudContext.NodeDescription nd, MockCloud cloud, boolean
isNew) {
+ super(nd, cloud, isNew);
}
@Override
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockRelationManager.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockRelationManager.java
2010-04-19 10:55:24 UTC (rev 41949)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockRelationManager.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -71,7 +71,7 @@
v.put("dnumber", destinationNode.getNumber());
v.put("rnumber", vcloud.getCloudContext().roles.get(role).number);
NodeManager nm =
vcloud.getNodeManager(vcloud.getCloudContext().roles.get(role).nodeManager);
- return new MockRelation(v, vcloud, nm, true);
+ return new MockRelation(new
MockCloudContext.NodeDescription(nm.getName(), v), vcloud, true);
}
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockTransaction.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockTransaction.java
2010-04-19 10:55:24 UTC (rev 41949)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/MockTransaction.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -61,8 +61,8 @@
@Override
- Node getNode(final Map<String, Object> m, final NodeManager nm, boolean n)
{
- Node node = super.getNode(m, nm, n);
+ Node getNode(MockCloudContext.NodeDescription nd, boolean n) {
+ Node node = super.getNode(nd, n);
nodes.add(node);
return node;
}
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/NodeQueryHandler.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/NodeQueryHandler.java
2010-04-19 10:55:24 UTC (rev 41949)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/mock/NodeQueryHandler.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -12,6 +12,7 @@
import java.util.*;
import org.mmbase.bridge.*;
+import org.mmbase.util.*;
/**
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/util/AbstractCloud.java
===================================================================
--- mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/util/AbstractCloud.java
2010-04-19 10:55:24 UTC (rev 41949)
+++ mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/util/AbstractCloud.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -48,13 +48,18 @@
@Override
public Node getNode(String number) throws NotFoundException {
- return getNode(Integer.parseInt(number));
+ try {
+ int n = Integer.parseInt(number);
+ return getNode(n);
+ } catch (NumberFormatException nfe) {
+ return getNodeByAlias(number);
+ }
}
@Override
public Node getNodeByAlias(String alias) throws NotFoundException {
- throw new NotFoundException();
+ throw new NotFoundException("No node with alias '" + alias + "'
(aliases not supported)");
}
@Override
Modified: mmbase/trunk/bridge/src/test/java/org/mmbase/bridge/mock/MockTest.java
===================================================================
--- mmbase/trunk/bridge/src/test/java/org/mmbase/bridge/mock/MockTest.java
2010-04-19 10:55:24 UTC (rev 41949)
+++ mmbase/trunk/bridge/src/test/java/org/mmbase/bridge/mock/MockTest.java
2010-04-19 11:16:24 UTC (rev 41950)
@@ -91,6 +91,26 @@
}
@Test
+ public void alias() {
+ Cloud cloud = getCloudContext().getCloud("mmbase");
+ Node news = cloud.getNodeManager("object").createNode();
+ news.createAlias("testalias");
+ news.commit();
+ assertEquals(1, news.getAliases().size());
+ Node news2 = cloud.getNode("testalias");
+ assertEquals(news.getNumber(), news2.getNumber());
+ assertEquals(1, news2.getAliases().size());
+ news2.deleteAlias("testalias");
+ news2.commit();
+ try {
+ cloud.getNode("testalias");
+ fail("Should have thrown exception");
+ } catch (NotFoundException nfe) {
+ }
+
+ }
+
+ @Test
public void builderReader() throws Exception {
Cloud cloud = getCloudContext().getCloud("mmbase");
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs