You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2011/10/18 22:21:34 UTC

svn commit: r1185834 - in /incubator/isis/trunk/framework/viewer/json: json-applib/src/main/java/org/apache/isis/viewer/json/applib/ json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ json-applib/src/test/java/org/apache/isis/v...

Author: danhaywood
Date: Tue Oct 18 20:21:33 2011
New Revision: 1185834

URL: http://svn.apache.org/viewvc?rev=1185834&view=rev
Log:
ISIS-109: enhanced JsonRepresentation to support criteria in path syntax

Added:
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/PathNode.java
      - copied, changed from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/Node.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_equalsHashcode.java
      - copied, changed from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_equalsHashcode.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_parse.java
      - copied, changed from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_parse.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/GraphUtil.java
      - copied, changed from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ListUtil.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/GraphTest_asGraph.java
      - copied, changed from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/ListUtilTest_asGraph.java
Removed:
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ListUtil.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/Node.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/ListUtilTest_asGraph.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_equalsHashcode.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_parse.java
Modified:
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationWalker.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_size.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/resources/org/apache/isis/viewer/json/applib/map.json
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_accept.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_accept.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/stories/UserStoryTest.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java Tue Oct 18 20:21:33 2011
@@ -8,6 +8,7 @@ import java.io.StringReader;
 import java.lang.reflect.Constructor;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Iterator;
@@ -29,6 +30,7 @@ import org.codehaus.jackson.JsonParseExc
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.node.ArrayNode;
 import org.codehaus.jackson.node.JsonNodeFactory;
+import org.codehaus.jackson.node.NullNode;
 import org.codehaus.jackson.node.ObjectNode;
 import org.codehaus.jackson.node.POJONode;
 import org.jdom.Element;
@@ -38,6 +40,9 @@ import org.jdom.output.XMLOutputter;
 import org.jdom.xpath.XPath;
 
 import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterables;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -160,8 +165,11 @@ public class JsonRepresentation {
     // getRepresentation
     /////////////////////////////////////////////////////////////////////////
 
-    public JsonRepresentation getRepresentation(String path) {
-        JsonNode node = getNode(path);
+    public JsonRepresentation getRepresentation(String pathTemplate, Object... args) {
+        final String pathStr = String.format(pathTemplate, args);
+        
+        JsonNode node = getNode(pathStr);
+        
         if (representsNull(node)) {
             return null;
         }
@@ -185,7 +193,6 @@ public class JsonRepresentation {
         return !representsNull(node) && node.isArray();
     }
 
-
     public JsonRepresentation getArray(String path) {
         return getArray(path, getNode(path));
     }
@@ -686,7 +693,7 @@ public class JsonRepresentation {
 
     
     /////////////////////////////////////////////////////////////////////////
-    // xpath support
+    // path support (with an xpath-like DSL)
     /////////////////////////////////////////////////////////////////////////
 
     /**
@@ -1096,14 +1103,58 @@ public class JsonRepresentation {
     /////////////////////////////////////////////////////////////////////////
 
     private JsonNode getNode(String path) {
-        JsonNode node = jsonNode;
+        JsonNode jsonNode = this.jsonNode;
         String[] keys = path.split("\\.");
         for(String key: keys) {
-            node = node.path(key);
+            final PathNode pathNode = PathNode.parse(key);
+            if(!pathNode.getKey().isEmpty()) {
+                jsonNode = jsonNode.path(pathNode.getKey());
+            } else {
+                // pathNode is criteria only; don't change jsonNode
+            }
+            if(jsonNode.isNull()) {
+                return jsonNode;
+            }
+            if(!pathNode.hasCriteria()) {
+                continue;
+            } 
+            if (!jsonNode.isArray()) {
+                return NullNode.getInstance();
+            }
+            jsonNode = matching(jsonNode, pathNode);
+            if(jsonNode.isNull()) {
+                return jsonNode;
+            }
+        }
+        return jsonNode;
+    }
+
+    private JsonNode matching(JsonNode jsonNode, final PathNode pathNode) {
+        final JsonRepresentation asList = new JsonRepresentation(jsonNode);
+        final Iterable<JsonNode> filtered = Iterables.filter(asList.arrayIterable(JsonNode.class), new Predicate<JsonNode>() {
+            @Override
+            public boolean apply(JsonNode input) {
+                return pathNode.matches(new JsonRepresentation(input));
+            }
+        });
+        final List<JsonNode> matching = Lists.newArrayList(filtered);
+        return toJsonNode(matching);
+    }
+
+    private static JsonNode toJsonNode(List<JsonNode> matching) {
+        switch(matching.size()) {
+        case 0:
+            return NullNode.getInstance();
+        case 1:
+            return matching.get(0);
+        default:
+            final ArrayNode arrayNode = new ArrayNode(JsonNodeFactory.instance);    
+            arrayNode.addAll(matching);
+            return arrayNode;
         }
-        return node;
     }
 
+
     private static void checkValue(String path, JsonNode node, String requiredType) {
         if (node.isValueNode()) {
             return;
@@ -1146,4 +1197,6 @@ public class JsonRepresentation {
 
 
 
+
+
 }

Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/PathNode.java (from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/Node.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/PathNode.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/PathNode.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/Node.java&r1=1183125&r2=1185834&rev=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/Node.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/PathNode.java Tue Oct 18 20:21:33 2011
@@ -1,21 +1,22 @@
-package org.apache.isis.viewer.json.viewer.representations;
+package org.apache.isis.viewer.json.applib;
 
 import java.util.Collections;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import com.google.common.base.Objects;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Maps;
 
-class Node {
-    private static final Pattern NODE = Pattern.compile("^([^\\[]+)(\\[(.+)\\])?$");
+public class PathNode {
+    private static final Pattern NODE = Pattern.compile("^([^\\[]*)(\\[(.+)\\])?$");
     private static final Pattern WHITESPACE = Pattern.compile("\\s+");
     private static final Pattern KEY_VALUE = Pattern.compile("^([^=]+)=(.+)$");
     
-    public static final Node NULL = new Node("", Collections.<String,String>emptyMap());
+    public static final PathNode NULL = new PathNode("", Collections.<String,String>emptyMap());
     
-    public static Node parse(String path) {
+    public static PathNode parse(String path) {
         Matcher nodeMatcher = NODE.matcher(path);
         if(!nodeMatcher.matches()) {
             return null;
@@ -36,12 +37,12 @@ class Node {
             }
         }
 
-        return new Node(key, criteria);
+        return new PathNode(key, criteria);
     }
     
     private final String key;
     private final Map<String,String> criteria;
-    private Node(String key, Map<String, String> criteria) {
+    private PathNode(String key, Map<String, String> criteria) {
         this.key = key;
         this.criteria = Collections.unmodifiableMap(criteria);
     }
@@ -51,6 +52,25 @@ class Node {
     public Map<String, String> getCriteria() {
         return criteria;
     }
+
+    public boolean hasCriteria() {
+        return !getCriteria().isEmpty();
+    }
+
+    public boolean matches(JsonRepresentation repr) {
+        if(!repr.isMap()) {
+            return false;
+        }
+        for(Map.Entry<String,String> criterium: getCriteria().entrySet()) {
+            final String requiredValue = criterium.getValue();
+            final String actualValue = repr.getString(criterium.getKey());
+            if(!Objects.equal(requiredValue, actualValue)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
@@ -66,7 +86,7 @@ class Node {
             return false;
         if (getClass() != obj.getClass())
             return false;
-        Node other = (Node) obj;
+        PathNode other = (PathNode) obj;
         if (key == null) {
             if (other.key != null)
                 return false;

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationWalker.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationWalker.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationWalker.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationWalker.java Tue Oct 18 20:21:33 2011
@@ -77,7 +77,11 @@ public class RepresentationWalker {
         return step;
     }
 
-    public void walk(String key) {
+    public void walk(String path) {
+        walk(path, null);
+    }
+
+    public void walk(String path, JsonRepresentation invokeBody) {
         Step previousStep = currentStep();
         if(previousStep.error!=null) {
             return;
@@ -88,86 +92,86 @@ public class RepresentationWalker {
         try {
             entity = jsonResponse.getEntity();
         } catch (Exception e) {
-            addStep(key, null, null, null, "exception: " + e.getMessage(), e);
+            addStep(path, null, null, null, "exception: " + e.getMessage(), e);
             return;
         }
         
         Link link;
         try {
-            link = entity.getLink(key);
+            link = entity.getLink(path);
         } catch (Exception e) {
-            addStep(key, null, null, null, "exception: " + e.getMessage(), e);
+            addStep(path, null, null, null, "exception: " + e.getMessage(), e);
             return;
         }
         if(link == null) {
-            addStep(key, null, null, null, "no such link '" + key + "'", null);
+            addStep(path, null, null, null, "no such link '" + path + "'", null);
             return;
         }
         
         Response response;
         try {
-            response = restfulClient.follow(link);
-        } catch (Exception e) {
-            addStep(key, link, null, null, "failed to follow link: " + e.getMessage(), e);
-            return;
-        }
-        
-        addStep(key, link, null, RestfulResponse.of(response), null, null);
-    }
-
-    public void walkXpath(String linkXpath) {
-        walkXpath(linkXpath, null);
-    }
-
-    public void walkXpath(String linkXpath, JsonRepresentation invokeBody) {
-        JsonRepresentation entity = getEntityElseMarkStepInError();
-        if(entity == null) {
-            return;
-        }
-        
-        Link link = null;
-        try {
-            JsonRepresentation matching = entity.xpath(linkXpath);
-            if (matching == null) {
-                addStep(linkXpath, null, null, null, "no such link '" + linkXpath + "'", null);
-                return;
-            }
-
-            link = matching.mapValueAsLink();
-            if(link.getHref() == null) {
-                addStep(linkXpath, link, null, null, "key does not identify a link '" + linkXpath + "'", null);
-                return;
-            }
-
-            Response response;
             if(invokeBody != null) {
                 response = restfulClient.follow(link, invokeBody);
             } else {
                 response = restfulClient.follow(link);
             }
-            addStep(linkXpath, link, null, RestfulResponse.of(response), null, null);
-            
-        } catch (RuntimeException e) {
-            // if xpath fails
-            addStep(linkXpath, null, null, null, "exception: " + e.getMessage(), e);
-            return;
         } catch (Exception e) {
-            // if follow fails
-            addStep(linkXpath, link, null, null, "failed to follow link: " + e.getMessage(), e);
+            addStep(path, link, null, null, "failed to follow link: " + e.getMessage(), e);
             return;
         }
+        
+        addStep(path, link, null, RestfulResponse.of(response), null, null);
     }
 
-    private JsonRepresentation getEntityElseMarkStepInError() {
-        try {
-            return getEntity();
-        } catch (Exception e) {
-            Step previousStep = currentStep();
-            previousStep.error = "exception: " + e.getMessage();
-            previousStep.exception = e;
-            return null;
-        }
-    }
+//    public void walkXpath(String path, JsonRepresentation invokeBody) {
+//        JsonRepresentation entity = getEntityElseMarkStepInError();
+//        if(entity == null) {
+//            return;
+//        }
+//        
+//        Link link = null;
+//        try {
+//            JsonRepresentation matching = entity.xpath(path);
+//            if (matching == null) {
+//                addStep(path, null, null, null, "no such link '" + path + "'", null);
+//                return;
+//            }
+//
+//            link = matching.mapValueAsLink();
+//            if(link.getHref() == null) {
+//                addStep(path, link, null, null, "key does not identify a link '" + path + "'", null);
+//                return;
+//            }
+//
+//            Response response;
+//            if(invokeBody != null) {
+//                response = restfulClient.follow(link, invokeBody);
+//            } else {
+//                response = restfulClient.follow(link);
+//            }
+//            addStep(path, link, null, RestfulResponse.of(response), null, null);
+//            
+//        } catch (RuntimeException e) {
+//            // if xpath fails
+//            addStep(path, null, null, null, "exception: " + e.getMessage(), e);
+//            return;
+//        } catch (Exception e) {
+//            // if follow fails
+//            addStep(path, link, null, null, "failed to follow link: " + e.getMessage(), e);
+//            return;
+//        }
+//    }
+//
+//    private JsonRepresentation getEntityElseMarkStepInError() {
+//        try {
+//            return getEntity();
+//        } catch (Exception e) {
+//            Step previousStep = currentStep();
+//            previousStep.error = "exception: " + e.getMessage();
+//            previousStep.exception = e;
+//            return null;
+//        }
+//    }
 
     /**
      * The entity returned from the previous walk.

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java Tue Oct 18 20:21:33 2011
@@ -31,11 +31,11 @@ public class DomainObjectRepresentation 
     }
 
     public JsonRepresentation getProperties() {
-        return xpath("/*[memberType='property']");
+        return getRepresentation("members[memberType=property]");
     }
 
     public JsonRepresentation getActions() {
-        return xpath("/*[memberType='action']");
+        return getRepresentation("members[memberType=action]");
     }
     
     public JsonRepresentation getLinks() {

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getRepresentation.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getRepresentation.java Tue Oct 18 20:21:33 2011
@@ -63,5 +63,40 @@ public class JsonRepresentationTest_getR
         assertThat(listRepresentation.isArray(), is(true));
     }
     
-    
+    @Test
+    public void forPath() throws JsonParseException, JsonMappingException, IOException {
+        JsonRepresentation representation = jsonRepresentation.getRepresentation("aSubMap.aLink");
+        assertThat(representation.isMap(), is(true));
+        assertThat(representation.getString("href"), is("http://foo/bar"));
+    }
+
+    @Test
+    public void forListwithCriteria() throws JsonParseException, JsonMappingException, IOException {
+        JsonRepresentation representation = jsonRepresentation.getRepresentation("anotherSubMap.aListOfLinks[rel=aRel]");
+        assertThat(representation.isLink(), is(true));
+        assertThat(representation.asLink().getHref(), is("http://foo/bar"));
+    }
+
+    @Test
+    public void forListWithCriteriaMatchingOne() throws JsonParseException, JsonMappingException, IOException {
+        JsonRepresentation representation = jsonRepresentation.getRepresentation("anotherSubMap.aListOfLinks[rel=multiRel data=someData]");
+        assertThat(representation.isLink(), is(true));
+        assertThat(representation.asLink().getHref(), is("http://foo/bar/multiRel1"));
+    }
+
+    @Test
+    public void forListWithMultipleCriteriaMatchingMultiple() throws JsonParseException, JsonMappingException, IOException {
+        JsonRepresentation representation = jsonRepresentation.getRepresentation("anotherSubMap.aListOfLinks[rel=multiRel method=GET]");
+        assertThat(representation.isArray(), is(true));
+        assertThat(representation.size(), is(2));
+    }
+
+    @Test
+    public void whenStartingWithList() throws JsonParseException, JsonMappingException, IOException {
+        JsonRepresentation listRepresentation = jsonRepresentation.getRepresentation("anotherSubMap.aListOfLinks");
+        JsonRepresentation representation = listRepresentation.getRepresentation("[rel=multiRel method=GET]");
+        assertThat(representation.isArray(), is(true));
+        assertThat(representation.size(), is(2));
+    }
+
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_size.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_size.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_size.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_size.java Tue Oct 18 20:21:33 2011
@@ -41,7 +41,7 @@ public class JsonRepresentationTest_size
     @Test
     public void size_forNonEmptyMap() throws JsonParseException, JsonMappingException, IOException {
         jsonRepresentation = new JsonRepresentation(readJson("map.json"));
-        assertThat(jsonRepresentation.size(), is(14));
+        assertThat(jsonRepresentation.size(), is(15));
     }
 
     @Test

Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_equalsHashcode.java (from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_equalsHashcode.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_equalsHashcode.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_equalsHashcode.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_equalsHashcode.java&r1=1183125&r2=1185834&rev=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_equalsHashcode.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_equalsHashcode.java Tue Oct 18 20:21:33 2011
@@ -1,38 +1,38 @@
-package org.apache.isis.viewer.json.viewer.representations;
+package org.apache.isis.viewer.json.applib;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
 import org.junit.Test;
 
-public class NodeTest_equalsHashcode {
+public class PathNodeTest_equalsHashcode {
 
 
     @Test
     public void simple() throws Exception {
-        final Node node = Node.parse("foo");
-        final Node node2 = Node.parse("foo");
+        final PathNode node = PathNode.parse("foo");
+        final PathNode node2 = PathNode.parse("foo");
         assertEquals(node, node2);
     }
 
     @Test
     public void oneCriterium() throws Exception {
-        final Node node = Node.parse("a[b=c]");
-        final Node node2 = Node.parse("a");
+        final PathNode node = PathNode.parse("a[b=c]");
+        final PathNode node2 = PathNode.parse("a");
         assertEquals(node, node2);
     }
 
     @Test
     public void moreThanOneCriterium() throws Exception {
-        final Node node = Node.parse("a[b=c d=e]");
-        final Node node2 = Node.parse("a");
+        final PathNode node = PathNode.parse("a[b=c d=e]");
+        final PathNode node2 = PathNode.parse("a");
         assertEquals(node, node2);
     }
 
     @Test
     public void notEqual() throws Exception {
-        final Node node = Node.parse("a[b=c d=e]");
-        final Node node2 = Node.parse("b");
+        final PathNode node = PathNode.parse("a[b=c d=e]");
+        final PathNode node2 = PathNode.parse("b");
         assertFalse(node.equals(node2));
     }
 

Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_parse.java (from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_parse.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_parse.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_parse.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_parse.java&r1=1183125&r2=1185834&rev=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/NodeTest_parse.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/PathNodeTest_parse.java Tue Oct 18 20:21:33 2011
@@ -1,4 +1,4 @@
-package org.apache.isis.viewer.json.viewer.representations;
+package org.apache.isis.viewer.json.applib;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
@@ -7,19 +7,19 @@ import java.util.Map;
 
 import org.junit.Test;
 
-public class NodeTest_parse {
+public class PathNodeTest_parse {
 
 
     @Test
     public void simple() throws Exception {
-        final Node node = Node.parse("foo");
+        final PathNode node = PathNode.parse("foo");
         assertThat(node.getKey(), is("foo"));
         assertThat(node.getCriteria().isEmpty(), is(true));
     }
 
     @Test
     public void oneCriterium() throws Exception {
-        final Node node = Node.parse("foo[bar=coz]");
+        final PathNode node = PathNode.parse("foo[bar=coz]");
         assertThat(node.getKey(), is("foo"));
         final Map<String, String> criteria = node.getCriteria();
         assertThat(criteria.isEmpty(), is(false));
@@ -29,7 +29,7 @@ public class NodeTest_parse {
 
     @Test
     public void moreThanOneCriterium() throws Exception {
-        final Node node = Node.parse("foo[bar=coz dat=ein]");
+        final PathNode node = PathNode.parse("foo[bar=coz dat=ein]");
         assertThat(node.getKey(), is("foo"));
         final Map<String, String> criteria = node.getCriteria();
         assertThat(criteria.isEmpty(), is(false));
@@ -40,7 +40,7 @@ public class NodeTest_parse {
 
     @Test
     public void whiteSpace() throws Exception {
-        final Node node = Node.parse("foo[bar=coz\tdat=ein]");
+        final PathNode node = PathNode.parse("foo[bar=coz\tdat=ein]");
         assertThat(node.getKey(), is("foo"));
         final Map<String, String> criteria = node.getCriteria();
         assertThat(criteria.isEmpty(), is(false));

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/resources/org/apache/isis/viewer/json/applib/map.json
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/resources/org/apache/isis/viewer/json/applib/map.json?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/resources/org/apache/isis/viewer/json/applib/map.json (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/resources/org/apache/isis/viewer/json/applib/map.json Tue Oct 18 20:21:33 2011
@@ -29,5 +29,34 @@
   },
   "aSubList": [
     "a", "b", "c"
-  ]
+  ],
+  "anotherSubMap": {
+    "aListOfLinks": [
+      {
+        "href": "http://foo/bar",
+        "method": "GET",
+        "rel": "aRel"
+      },
+      {
+        "href": "http://foo/bar/otherRel",
+        "method": "GET",
+        "rel": "otherRel"
+      },
+      {
+        "href": "http://foo/bar/multiRel1",
+        "method": "GET",
+        "rel": "multiRel",
+        "data": "someData"
+      },
+      {
+        "href": "http://foo/bar/multiRel2",
+        "method": "GET",
+        "rel": "multiRel",
+        "data": "someOtherData"
+      }
+    ],
+    "aMap": "aValue",
+    "anEmptyList": [
+     ]
+  }
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java Tue Oct 18 20:21:33 2011
@@ -11,7 +11,6 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.apache.isis.viewer.json.applib.blocks.Method;
-import org.apache.isis.viewer.json.tck.RepresentationMatchers.AbstractMatcherBuilder;
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 import org.hamcrest.TypeSafeMatcher;

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_accept.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_accept.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_accept.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_accept.java Tue Oct 18 20:21:33 2011
@@ -13,7 +13,6 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.applib.RestfulResponse;
 import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.json.applib.capabilities.CapabilitiesRepresentation;
-import org.apache.isis.viewer.json.applib.homepage.HomePageRepresentation;
 import org.apache.isis.viewer.json.tck.IsisWebServerRule;
 import org.junit.Before;
 import org.junit.Rule;

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java Tue Oct 18 20:21:33 2011
@@ -73,15 +73,15 @@ public class HomePageResourceTest_xrofol
         
         JsonRepresentation service;
         
-        service = serviceLinkList.xpath("/e[key='%s']", "simples");
-        assertThat(service.getRepresentation("e"), isMap());
-        assertThat(service.getString("e.key"), is("simples"));
-        assertThat(service.getRepresentation("e.value"), is(not(nullValue())));
-
-        service = serviceLinkList.xpath("/e[key='%s']", "applibValuedEntities");
-        assertThat(service.getRepresentation("e"), isMap());
-        assertThat(service.getString("e.key"), is("applibValuedEntities"));
-        assertThat(service.getRepresentation("e.value"), is(not(nullValue())));
+        service = serviceLinkList.getRepresentation("[key=%s]", "simples");
+        assertThat(service, isMap());
+        assertThat(service.getString("key"), is("simples"));
+        assertThat(service.getRepresentation("value"), is(not(nullValue())));
+
+        service = serviceLinkList.getRepresentation("[key=%s]", "applibValuedEntities");
+        assertThat(service, isMap());
+        assertThat(service.getString("key"), is("applibValuedEntities"));
+        assertThat(service.getRepresentation("value"), is(not(nullValue())));
     }
 
     @Test
@@ -97,13 +97,13 @@ public class HomePageResourceTest_xrofol
         
         JsonRepresentation service;
         
-        service = serviceLinkList.xpath("/e[key='%s']", "simples");
-        assertThat(service.getRepresentation("e"), isMap());
-        assertThat(service.getString("e.key"), is("simples"));
-        assertThat(service.getRepresentation("e.value"), is(not(nullValue())));
+        service = serviceLinkList.getRepresentation("[key=%s]", "simples");
+        assertThat(service, isMap());
+        assertThat(service.getString("key"), is("simples"));
+        assertThat(service.getRepresentation("value"), is(not(nullValue())));
 
-        service = serviceLinkList.xpath("/e[key='%s']", "applibValuedEntities");
-        assertThat(service.getRepresentation("e.value"), is(nullValue()));
+        service = serviceLinkList.getRepresentation("[key=%s]", "applibValuedEntities");
+        assertThat(service.getRepresentation("value"), is(nullValue()));
     }
 
     private HomePageRepresentation whenExecuteWith(final String uriTemplate, final String followLinks) throws JsonParseException, JsonMappingException, IOException {

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java Tue Oct 18 20:21:33 2011
@@ -9,7 +9,6 @@ import java.io.IOException;
 
 import javax.ws.rs.core.Response;
 
-import org.apache.isis.applib.annotation.Ignore;
 import org.apache.isis.runtimes.dflt.webserver.WebServer;
 import org.apache.isis.viewer.json.applib.HttpMethod;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
@@ -37,6 +36,8 @@ public class DomainServiceResourceTest_i
     public IsisWebServerRule webServerRule = new IsisWebServerRule();
     
     private RestfulClient client;
+    
+    @SuppressWarnings("unused")
     private DomainServiceResource resource;
 
     @Before
@@ -94,8 +95,8 @@ public class DomainServiceResourceTest_i
         RestfulResponse<DomainObjectRepresentation> restfulResponse = RestfulResponse.ofT(response);
         final DomainObjectRepresentation objectRepr = restfulResponse.getEntity();
         
-        assertThat(objectRepr.xpath("//members/e[propertyId='%s']/value", "name").getString("value"), is("New Name"));
-        assertThat(objectRepr.xpath("//members/e[propertyId='%s']/value", "flag").getBoolean("value"), is(true));
+        assertThat(objectRepr.getRepresentation("members[propertyId=%s].value", "name").asString(), is("New Name"));
+        assertThat(objectRepr.getRepresentation("members[propertyId=%s].value", "flag").asBoolean(), is(true));
     }
 
     @org.junit.Ignore("up to here")
@@ -124,8 +125,8 @@ public class DomainServiceResourceTest_i
         RestfulResponse<DomainObjectRepresentation> restfulResponse = RestfulResponse.ofT(response);
         final DomainObjectRepresentation objectRepr = restfulResponse.getEntity();
         
-        assertThat(objectRepr.xpath("//members/e[propertyId='%s']/value", "name").getString("value"), is("New Name"));
-        assertThat(objectRepr.xpath("//members/e[propertyId='%s']/value", "flag").getBoolean("value"), is(true));
+        assertThat(objectRepr.getRepresentation("members[propertyId=%s].value", "name").asString(), is("New Name"));
+        assertThat(objectRepr.getRepresentation("members[propertyId=%s].value", "flag").asBoolean(), is(true));
     }
 
 
@@ -139,8 +140,8 @@ public class DomainServiceResourceTest_i
         assertThat(restfulResponse.getStatus(), is(HttpStatusCode.OK));
         final DomainObjectRepresentation repr = restfulResponse.getEntity();
         
-        JsonRepresentation actionLinkRepr = repr.xpath("/members/e[actionId='%s']", actionId);
-        return actionLinkRepr.getRepresentation("e.details.value");
+        JsonRepresentation actionLinkRepr = repr.getRepresentation("members[actionId=%s]", actionId);
+        return actionLinkRepr.getRepresentation("details.value");
     }
 
 
@@ -149,7 +150,7 @@ public class DomainServiceResourceTest_i
         final Response response = resource.services();
         final ListRepresentation services = RestfulResponse.<ListRepresentation>ofT(response).getEntity();
 
-        return services.xpath("//*[key='%s']", serviceId).getLink("e").getHref();
+        return services.getRepresentation("values[key=%s]", serviceId).asLink().getHref();
     }
 
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_accept.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_accept.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_accept.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_accept.java Tue Oct 18 20:21:33 2011
@@ -18,11 +18,9 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectRepresentation;
 import org.apache.isis.viewer.json.applib.domainobjects.DomainServiceResource;
 import org.apache.isis.viewer.json.applib.domainobjects.ListRepresentation;
-import org.apache.isis.viewer.json.applib.homepage.HomePageRepresentation;
 import org.apache.isis.viewer.json.tck.IsisWebServerRule;
 import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.map.JsonMappingException;
-import org.jboss.resteasy.spi.Link;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -81,7 +79,7 @@ public class DomainServiceResourceTest_s
         final Response response = resource.services();
         final ListRepresentation services = RestfulResponse.<ListRepresentation>ofT(response).getEntity();
 
-        final String href = services.xpath("//*[key='%s']", "simples").getLink("e").getHref();
+        final String href = services.getRepresentation("values.[key=%s]", "simples").asLink().getHref();
         return href;
     }
 

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java Tue Oct 18 20:21:33 2011
@@ -56,13 +56,13 @@ public class DomainServiceResourceTest_s
         
         JsonRepresentation actionRepr;
         
-        actionRepr = membersList.xpath("/e[actionId='%s']", "list");
-        assertThat(actionRepr.getRepresentation("e.details"), is(not(nullValue())));
-        assertThat(actionRepr.getRepresentation("e.details.value"), is(not(nullValue()))); // followed
+        actionRepr = membersList.getRepresentation("[actionId=%s]", "list");
+        assertThat(actionRepr.getRepresentation("details"), is(not(nullValue())));
+        assertThat(actionRepr.getRepresentation("details.value"), is(not(nullValue()))); // followed
         
-        actionRepr = membersList.xpath("/e[actionId='%s']", "newTransientEntity");
-        assertThat(actionRepr.getRepresentation("e.details"), is(not(nullValue())));
-        assertThat(actionRepr.getRepresentation("e.details.value"), is(nullValue())); // not followed
+        actionRepr = membersList.getRepresentation("[actionId=%s]", "newTransientEntity");
+        assertThat(actionRepr.getRepresentation("details"), is(not(nullValue())));
+        assertThat(actionRepr.getRepresentation("details.value"), is(nullValue())); // not followed
     }
 
 
@@ -71,7 +71,7 @@ public class DomainServiceResourceTest_s
         final Response response = resource.services();
         final ListRepresentation services = RestfulResponse.<ListRepresentation>ofT(response).getEntity();
 
-        return services.xpath("//*[key='%s']", serviceId).getLink("e").getHref();
+        return services.getRepresentation("values[key=%s]", serviceId).asLink().getHref();
     }
 
 

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java Tue Oct 18 20:21:33 2011
@@ -34,7 +34,6 @@ import org.apache.isis.viewer.json.tck.I
 import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/stories/UserStoryTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/stories/UserStoryTest.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/stories/UserStoryTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/stories/UserStoryTest.java Tue Oct 18 20:21:33 2011
@@ -46,15 +46,15 @@ public class UserStoryTest {
         walker.walk("services");
         
         // and when locate the ApplibValues repo and walk the its 'object' link
-        walker.walkXpath("/*[title='ApplibValues']/link[rel='object']");
+        walker.walk("values[title=ApplibValues].links[rel=object]");
         
         // and when locate the AppLibValues repo's "newEntity" action and walk to its details
-        walker.walkXpath("/newEntity[memberType='action']/details");
+        walker.walk("values[memberType=action].details");
         
         // and when find the invoke body for the "newEntity" action and then walk the action using the body 
         JsonRepresentation newEntityActionDetails = walker.getEntity();
         JsonRepresentation newEntityActionInvokeBody = newEntityActionDetails.getArray("invoke.body");
-        walker.walkXpath("/invoke", newEntityActionInvokeBody);
+        walker.walk("invoke", newEntityActionInvokeBody);
         
         // and when walk the link to the returned object
         walker.walk("link");

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java Tue Oct 18 20:21:33 2011
@@ -18,9 +18,7 @@
  */
 package org.apache.isis.viewer.json.viewer;
 
-import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/GraphUtil.java (from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ListUtil.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/GraphUtil.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/GraphUtil.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ListUtil.java&r1=1183125&r2=1185834&rev=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ListUtil.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/GraphUtil.java Tue Oct 18 20:21:33 2011
@@ -4,31 +4,33 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.isis.viewer.json.applib.PathNode;
+
 import com.google.common.collect.Maps;
 
 @SuppressWarnings({"rawtypes","unchecked"})
-public final class ListUtil {
+public final class GraphUtil {
     
-    private ListUtil(){}
+    private GraphUtil(){}
 
-    public final static Map<Node,Map> asGraph(List<List<String>> links) {
+    public final static Map<PathNode,Map> asGraph(List<List<String>> links) {
         if(links == null) {
             return Collections.emptyMap();
         }
-        final Map<Node, Map> map = Maps.newHashMap();
+        final Map<PathNode, Map> map = Maps.newHashMap();
         for (List<String> link : links) {
-            ListUtil.mergeInto(link, map);
+            GraphUtil.mergeInto(link, map);
         }
         return map;
     }
 
-    private static void mergeInto(List<String> list, Map<Node, Map> map) {
+    private static void mergeInto(List<String> list, Map<PathNode, Map> map) {
         if(list.size() == 0) {
             return;
         }
         final String str = list.get(0);
-        final Node node = Node.parse(str);
-        Map<Node,Map> submap = map.get(node);
+        final PathNode node = PathNode.parse(str);
+        Map<PathNode,Map> submap = map.get(node);
         if(submap == null) {
             submap = Maps.newHashMap(); 
             map.put(node, submap);

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java?rev=1185834&r1=1185833&r2=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java Tue Oct 18 20:21:33 2011
@@ -6,17 +6,17 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
-
-import com.google.common.base.Objects;
+import org.apache.isis.viewer.json.applib.PathNode;
 
 
 
 @SuppressWarnings({"rawtypes","unchecked"})
 public final class LinkFollower {
 
+
     public final static LinkFollower create(List<List<String>> links) {
-        final Map<Node, Map> graph = ListUtil.asGraph(links);
-        return new LinkFollower(graph, Mode.FOLLOWING, Node.NULL);
+        final Map<PathNode, Map> graph = GraphUtil.asGraph(links);
+        return new LinkFollower(graph, Mode.FOLLOWING, PathNode.NULL);
     }
 
     private enum Mode {
@@ -24,11 +24,11 @@ public final class LinkFollower {
         TERMINATED;
     }
 
-    private final Map<Node, Map> graph;
+    private final Map<PathNode, Map> graph;
     private Mode mode;
-    private final Node root;
+    private final PathNode root;
 
-    private LinkFollower(Map<Node, Map> graph, Mode mode, Node root) {
+    private LinkFollower(Map<PathNode, Map> graph, Mode mode, PathNode root) {
         this.graph = graph;
         this.mode = mode;
         this.root = root;
@@ -39,16 +39,16 @@ public final class LinkFollower {
      */
     public LinkFollower follow(String path) {
         if(path == null) {
-            return terminated(Node.NULL);
+            return terminated(PathNode.NULL);
         }
         if(mode == Mode.TERMINATED) {
             return terminated(this.root);
         }
-        Node node = Node.parse(path);
+        PathNode node = PathNode.parse(path);
         if(mode == Mode.FOLLOWING) {
-            Map<Node, Map> remaining = graph.get(node);
+            Map<PathNode, Map> remaining = graph.get(node);
             if(remaining != null) {
-                Node key = findKey(node);
+                PathNode key = findKey(node);
                 return new LinkFollower(remaining, Mode.FOLLOWING, key);
             } else {
                 return terminated(node);
@@ -59,11 +59,11 @@ public final class LinkFollower {
 
     /**
      * somewhat bizarre, but we have to find the actual node that is in the graph;
-     * the one we matching on doesn't match on the {@link Node#getCriteria()} map.
+     * the one we matching on doesn't match on the {@link PathNode#getCriteria()} map.
      */
-    private Node findKey(Node node) {
-        final Set<Node> keySet = graph.keySet();
-        for(Node key: keySet) {
+    private PathNode findKey(PathNode node) {
+        final Set<PathNode> keySet = graph.keySet();
+        for(PathNode key: keySet) {
             if(key.equals(node)) {
                 return key;
             }
@@ -72,7 +72,7 @@ public final class LinkFollower {
         return node;
     }
 
-    private static LinkFollower terminated(Node node) {
+    private static LinkFollower terminated(PathNode node) {
         return new LinkFollower(null, Mode.TERMINATED, node);
     }
 
@@ -98,14 +98,8 @@ public final class LinkFollower {
         if(!isFollowing()) {
             return false;
         }
-        for(Map.Entry<String,String> criterium: root.getCriteria().entrySet()) {
-            final String requiredValue = criterium.getValue();
-            final String actualValue = map.getString(criterium.getKey());
-            if(!Objects.equal(requiredValue, actualValue)) {
-                return false;
-            }
-        }
-        return true;
+        return root == null || root.matches(map);
     }
 
+
 }

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/GraphTest_asGraph.java (from r1183125, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/ListUtilTest_asGraph.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/GraphTest_asGraph.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/GraphTest_asGraph.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/ListUtilTest_asGraph.java&r1=1183125&r2=1185834&rev=1185834&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/ListUtilTest_asGraph.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/GraphTest_asGraph.java Tue Oct 18 20:21:33 2011
@@ -7,46 +7,47 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.isis.viewer.json.applib.Parser;
+import org.apache.isis.viewer.json.applib.PathNode;
 import org.junit.Test;
 
 @SuppressWarnings({"rawtypes", "unchecked"})
-public class ListUtilTest_asGraph {
+public class GraphTest_asGraph {
 
     @Test
     public void simple() throws Exception {
         List<List<String>> links = asListOfLists("a.b.c,a.b.d,d.b,e,e");
-        final Map<Node, Map> root = ListUtil.asGraph(links);
+        final Map<PathNode, Map> root = GraphUtil.asGraph(links);
         
         assertThat(root.size(), is(3));
-        Map<String,Map> nodeA = root.get(Node.parse("a"));
+        Map<String,Map> nodeA = root.get(PathNode.parse("a"));
         assertThat(nodeA.size(), is(1));
-        Map<String,Map> nodeAB = nodeA.get(Node.parse("b"));
+        Map<String,Map> nodeAB = nodeA.get(PathNode.parse("b"));
         assertThat(nodeAB.size(), is(2));
-        Map<String,Map> nodeABC = nodeAB.get(Node.parse("c"));
+        Map<String,Map> nodeABC = nodeAB.get(PathNode.parse("c"));
         assertThat(nodeABC.size(), is(0));
-        Map<String,Map> nodeABD = nodeAB.get(Node.parse("d"));
+        Map<String,Map> nodeABD = nodeAB.get(PathNode.parse("d"));
         assertThat(nodeABD.size(), is(0));
         
-        Map<String,Map> nodeD = root.get(Node.parse("d"));
+        Map<String,Map> nodeD = root.get(PathNode.parse("d"));
         assertThat(nodeD.size(), is(1));
-        Map<String,Map> nodeDB = nodeD.get(Node.parse("b"));
+        Map<String,Map> nodeDB = nodeD.get(PathNode.parse("b"));
         assertThat(nodeDB.size(), is(0));
         
-        Map<String,Map> nodeE = root.get(Node.parse("e"));
+        Map<String,Map> nodeE = root.get(PathNode.parse("e"));
         assertThat(nodeE.size(), is(0));
     }
 
     @Test
     public void empty() throws Exception {
         List<List<String>> links = asListOfLists("");
-        final Map<Node, Map> root = ListUtil.asGraph(links);
+        final Map<PathNode, Map> root = GraphUtil.asGraph(links);
         
         assertThat(root.size(), is(0));
     }
 
     @Test
     public void whenNull() throws Exception {
-        final Map<Node, Map> root = ListUtil.asGraph(null);
+        final Map<PathNode, Map> root = GraphUtil.asGraph(null);
         
         assertThat(root.size(), is(0));
     }