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

Reply via email to