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/05 09:44:09 UTC

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

Author: danhaywood
Date: Wed Oct  5 07:44:08 2011
New Revision: 1179083

URL: http://svn.apache.org/viewvc?rev=1179083&view=rev
Log:
ISIS-109: utility methods to support parsing of x-ro-follow-links query param

Modified:
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/Parser.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/ParserTest.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/Parser.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/Parser.java?rev=1179083&r1=1179082&r2=1179083&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/Parser.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/Parser.java Wed Oct  5 07:44:08 2011
@@ -2,7 +2,6 @@ package org.apache.isis.viewer.json.appl
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
@@ -187,7 +186,61 @@ public abstract class Parser<T> {
             }
         };
     }
-    
+
+    public static Parser<List<List<String>>> forListOfListOfStrings() {
+        return new Parser<List<List<String>>>() {
+
+            @Override
+            public List<List<String>> valueOf(List<String> str) {
+                if(str == null) {
+                    return null;
+                }
+                if(str.size()==0)
+                    return null;
+                List<List<String>> listOfLists = Lists.newArrayList();
+                for (String s : str) {
+                    final Iterable<String> split = Splitter.on('.').split(s);
+                    listOfLists.add(Lists.newArrayList(split));
+                }
+                return listOfLists;
+            }
+            
+            @Override
+            public List<List<String>> valueOf(String[] str) {
+                if(str == null) {
+                    return null;
+                }
+                if(str.length==0)
+                    return null;
+                return valueOf(Arrays.asList(str));
+            }
+
+            @Override
+            public List<List<String>> valueOf(String str) {
+                final Iterable<String> listOfStrings = Splitter.on(',').split(str);
+                return Lists.transform(Lists.newArrayList(listOfStrings), new Function<String, List<String>>() {
+
+                    @Override
+                    public List<String> apply(String input) {
+                        return Lists.newArrayList(Splitter.on('.').split(input));
+                    }
+                });
+            }
+
+            @Override
+            public String asString(List<List<String>> listOfLists) {
+                List<String> listOfStrings = Lists.transform(listOfLists, new Function<List<String>, String>() {
+                    @Override
+                    public String apply(List<String> listOfStrings) {
+                        return Joiner.on('.').join(listOfStrings);
+                    }
+                });
+                return Joiner.on(',').join(listOfStrings);
+            }
+        };
+    }
+
+
     public static Parser<String[]> forArrayOfStrings() {
         return new Parser<String[]>() {
 
@@ -261,5 +314,5 @@ public abstract class Parser<T> {
             }
         };
     }
-
+    
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java?rev=1179083&r1=1179082&r2=1179083&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java Wed Oct  5 07:44:08 2011
@@ -35,7 +35,7 @@ public final class RestfulRequest {
     
     public static class QueryParameter<Q> {
 
-        public static QueryParameter<List<String>> FOLLOW_LINKS = new QueryParameter<List<String>>("x-ro-follow-links", Parser.forListOfStrings());
+        public static QueryParameter<List<List<String>>> FOLLOW_LINKS = new QueryParameter<List<List<String>>>("x-ro-follow-links", Parser.forListOfListOfStrings());
         public static QueryParameter<Integer> PAGE = new QueryParameter<Integer>("x-ro-page", Parser.forInteger());
         public static QueryParameter<Integer> PAGE_SIZE = new QueryParameter<Integer>("x-ro-page-size", Parser.forInteger());
         public static QueryParameter<List<String>> SORT_BY = new QueryParameter<List<String>>("x-ro-sort-by", Parser.forListOfStrings());

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/ParserTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/ParserTest.java?rev=1179083&r1=1179082&r2=1179083&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/ParserTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/ParserTest.java Wed Oct  5 07:44:08 2011
@@ -2,6 +2,7 @@ package org.apache.isis.viewer.json.appl
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertThat;
 
 import java.util.Arrays;
@@ -21,23 +22,34 @@ public class ParserTest {
 
     @Test
     public void forBoolean() {
+        Parser<Boolean> parser = Parser.forBoolean();
         for (Boolean v : new Boolean[] {Boolean.TRUE, Boolean.FALSE}) {
-            assertRoundTrips(Parser.forBoolean(), v);
+            final String asString = parser.asString(v);
+            final Boolean valueOf = parser.valueOf(asString);
+            assertThat(v, is(equalTo(valueOf)));
         }
+        
+        final Boolean valueOf = parser.valueOf(Arrays.asList(parser.asString(Boolean.TRUE), parser.asString(Boolean.FALSE)));
+        assertThat(valueOf, is(Boolean.TRUE));
     }
 
     @Test
     public void forString() {
+        Parser<String> parser = Parser.forString();
+        
         for (String v : new String[] {"", "foo", "foz"}) {
-            assertRoundTrips(Parser.forString(), v);
+            final String asString = parser.asString(v);
+            final String valueOf = parser.valueOf(asString);
+            assertThat(v, is(equalTo(valueOf)));
         }
     }
 
     @Test
     public void forListOfStrings() {
         Parser<List<String>> parser = Parser.forListOfStrings();
-        String[] strings = { "", "foo", "foz" };
-        List<String> v = Arrays.asList(strings);
+        
+        List<String> v = Arrays.asList("", "foo", "foz" );
+        
         final String asString = parser.asString(v);
         final List<String> valueOf = parser.valueOf(asString);
         
@@ -45,52 +57,122 @@ public class ParserTest {
     }
 
     @Test
+    public void forListOfListOfStringsDottedNotation() {
+        Parser<List<List<String>>> parser = Parser.forListOfListOfStrings();
+        
+        final List<List<String>> valueOf = parser.valueOf(Arrays.asList("a", "b.c", "d.e.f" ));
+        
+        assertThat(valueOf.size(), is(3));
+        assertThat(valueOf.get(0).size(), is(1));
+        assertThat(valueOf.get(0).get(0), is("a"));
+        assertThat(valueOf.get(1).size(), is(2));
+        assertThat(valueOf.get(1).get(0), is("b"));
+        assertThat(valueOf.get(1).get(1), is("c"));
+        assertThat(valueOf.get(2).size(), is(3));
+        assertThat(valueOf.get(2).get(0), is("d"));
+        assertThat(valueOf.get(2).get(1), is("e"));
+        assertThat(valueOf.get(2).get(2), is("f"));
+        
+        assertThat(parser.asString(valueOf), is("a,b.c,d.e.f"));
+    }
+
+    @Test
+    public void forListOfListOfStringsCommaSeparated() {
+        Parser<List<List<String>>> parser = Parser.forListOfListOfStrings();
+        
+        final List<List<String>> valueOf = parser.valueOf("a,b.c,d.e.f");
+        
+        assertThat(valueOf.size(), is(3));
+        assertThat(valueOf.get(0).size(), is(1));
+        assertThat(valueOf.get(0).get(0), is("a"));
+        assertThat(valueOf.get(1).size(), is(2));
+        assertThat(valueOf.get(1).get(0), is("b"));
+        assertThat(valueOf.get(1).get(1), is("c"));
+        assertThat(valueOf.get(2).size(), is(3));
+        assertThat(valueOf.get(2).get(0), is("d"));
+        assertThat(valueOf.get(2).get(1), is("e"));
+        assertThat(valueOf.get(2).get(2), is("f"));
+    }
+
+    @Test
+    public void forMediaTypes() {
+        Parser<MediaType> parser = Parser.forMediaType();
+        MediaType mediaType = RepresentationType.DOMAIN_OBJECT.getMediaType();
+        final String asString = parser.asString(mediaType);
+        final MediaType valueOf = parser.valueOf(asString);
+        
+        assertThat(valueOf, is(mediaType));
+    }
+
+
+    @Test
+    public void forListOfMediaTypes() {
+        Parser<List<MediaType>> parser = Parser.forListOfMediaTypes();
+        MediaType mediaType = RepresentationType.DOMAIN_OBJECT.getMediaType();
+        List<MediaType> v = Arrays.asList(mediaType, MediaType.APPLICATION_JSON_TYPE);
+        final String asString = parser.asString(v);
+        final List<MediaType> valueOf = parser.valueOf(asString);
+        
+        assertThat(v, sameContentsAs(valueOf));
+    }
+
+    @Test
     public void forDate() {
+        Parser<Date> parser = Parser.forDate();
+        
         final Calendar cal = Calendar.getInstance();
         cal.setTime(new Date());
         cal.set(Calendar.MILLISECOND, 0);
         Date nowToNearestSecond = cal.getTime();
         for (Date v : new Date[] {nowToNearestSecond}) {
-            assertRoundTrips(Parser.forDate(), v);
+            final String asString = parser.asString(v);
+            final Date valueOf = parser.valueOf(asString);
+            assertThat(v, is(equalTo(valueOf)));
         }
     }
 
     @Test
     public void forInteger() {
+        Parser<Integer> parser = Parser.forInteger();
+        
         for (Integer v : new Integer[] {1, 2, 3, -5, -100, 0, Integer.MAX_VALUE, Integer.MIN_VALUE}) {
-            assertRoundTrips(Parser.forInteger(), v);
+            final String asString = parser.asString(v);
+            final Integer valueOf = parser.valueOf(asString);
+            assertThat(v, is(equalTo(valueOf)));
         }
     }
 
     @Test
     public void forMediaType() {
+        Parser<MediaType> parser = Parser.forMediaType();
+        
         for (MediaType v : new MediaType[] { 
                 MediaType.APPLICATION_ATOM_XML_TYPE, 
                 MediaType.APPLICATION_JSON_TYPE, 
                 MediaType.APPLICATION_XHTML_XML_TYPE, 
                 MediaType.valueOf(RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT) }) {
-            assertRoundTrips(Parser.forMediaType(), v);
+            final String asString = parser.asString(v);
+            final MediaType valueOf = parser.valueOf(asString);
+            assertThat(v, is(equalTo(valueOf)));
         }
     }
 
 
     @Test
     public void forCacheControl() {
+        Parser<CacheControl> parser = Parser.forCacheControl();
+        
         final CacheControl cc1 = createCacheControl();
         cc1.setMaxAge(2000);
         final CacheControl cc2 = createCacheControl();
         cc2.setNoCache(true);
         for (CacheControl v : new CacheControl[] { cc1, cc2 }) {
-            assertRoundTrips(Parser.forCacheControl(), v);
+            final String asString = parser.asString(v);
+            final CacheControl valueOf = parser.valueOf(asString);
+            assertThat(v, is(equalTo(valueOf)));
         }
     }
 
-    private static <T> void assertRoundTrips(final Parser<T> parser, T v) {
-        final String asString = parser.asString(v);
-        final T valueOf = parser.valueOf(asString);
-        assertThat(v, is(equalTo(valueOf)));
-    }
-
     private static CacheControl createCacheControl() {
         final CacheControl cacheControl = new CacheControl();
         cacheControl.getCacheExtension(); // workaround for bug in CacheControl's equals() method

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java?rev=1179083&r1=1179082&r2=1179083&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java Wed Oct  5 07:44:08 2011
@@ -19,6 +19,8 @@
 package org.apache.isis.viewer.json.viewer.resources.home;
 
 
+import java.util.List;
+
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;
@@ -26,6 +28,8 @@ import javax.ws.rs.core.Response;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.applib.RestfulMediaType;
+import org.apache.isis.viewer.json.applib.RestfulRequest.Header;
+import org.apache.isis.viewer.json.applib.RestfulRequest.QueryParameter;
 import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactory;
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
@@ -42,7 +46,7 @@ public class HomePageResourceServerside 
         RepresentationType representationType = RepresentationType.HOME_PAGE;
         init(representationType);
         
-        getResourceContext().ensureCompatibleAcceptHeader(representationType);
+        //final List<List<String>> arg = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
         
         final RendererFactory factory = rendererFactoryRegistry.find(representationType);
         final HomePageReprRenderer renderer =