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 21:47:18 UTC
svn commit: r1179398 [2/2] - 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-tck/src/test/java/org/apache/isis/viewer/json/...
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.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/HomePageReprRenderer.java?rev=1179398&r1=1179397&r2=1179398&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java Wed Oct 5 19:47:17 2011
@@ -5,14 +5,15 @@ import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
import org.apache.isis.viewer.json.applib.RepresentationType;
-import org.apache.isis.viewer.json.applib.RestfulRequest.QueryParameter;
import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.PathFollower;
import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
import org.apache.isis.viewer.json.viewer.representations.RendererFactory;
import org.apache.isis.viewer.json.viewer.representations.RendererFactoryRegistry;
import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
+import org.apache.isis.viewer.json.viewer.resources.capabilities.CapabilitiesReprRenderer;
import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainServiceLinkToBuilder;
import org.apache.isis.viewer.json.viewer.resources.domainobjects.ListReprRenderer;
import org.apache.isis.viewer.json.viewer.resources.user.UserReprRenderer;
@@ -25,13 +26,13 @@ public class HomePageReprRenderer extend
}
@Override
- public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
- return new HomePageReprRenderer(resourceContext, getRepresentationType(), representation);
+ public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, PathFollower pathFollower, JsonRepresentation representation) {
+ return new HomePageReprRenderer(resourceContext, pathFollower, getRepresentationType(), representation);
}
}
- private HomePageReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
- super(resourceContext, representationType, representation);
+ private HomePageReprRenderer(ResourceContext resourceContext, PathFollower pathFollower, RepresentationType representationType, JsonRepresentation representation) {
+ super(resourceContext, pathFollower, representationType, representation);
}
@Override
@@ -44,7 +45,7 @@ public class HomePageReprRenderer extend
// self
if(includesSelf) {
- withSelf("");
+ putLinkToSelf(representation);
}
// user
@@ -59,48 +60,71 @@ public class HomePageReprRenderer extend
// links and extensions
representation.mapPut("links", JsonRepresentation.newArray());
representation.mapPut("extensions", JsonRepresentation.newMap());
-
+
return representation;
}
+ private void putLinkToSelf(JsonRepresentation representation) {
+ final LinkBuilder linkBuilder = LinkBuilder.newBuilder(resourceContext, "self", getRepresentationType(), "");
+
+ final PathFollower pathFollower = getPathFollower().follow("self");
+ if(!pathFollower.isTerminated()) {
+
+ final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.HOME_PAGE);
+ final HomePageReprRenderer renderer = (HomePageReprRenderer) factory.newRenderer(getResourceContext(), pathFollower, JsonRepresentation.newMap());
+
+ linkBuilder.withValue(renderer.render());
+ }
+ representation.mapPut("self", linkBuilder.build());
+ }
+
private void putLinkToCapabilities(final JsonRepresentation representation) {
- representation.mapPut("capabilities",
- LinkBuilder.newBuilder(getResourceContext(), "capabilities", RepresentationType.CAPABILITIES, "capabilities").build());
+ final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), "capabilities", RepresentationType.CAPABILITIES, "capabilities");
+
+ final PathFollower pathFollower = getPathFollower().follow("capabilities");
+ if(!pathFollower.isTerminated()) {
+
+ final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.CAPABILITIES);
+ final CapabilitiesReprRenderer renderer = (CapabilitiesReprRenderer) factory.newRenderer(getResourceContext(), pathFollower, JsonRepresentation.newMap());
+
+ linkBuilder.withValue(renderer.render());
+ }
+
+ representation.mapPut("capabilities", linkBuilder.build());
}
private void putLinkToServices(JsonRepresentation representation) {
- final LinkBuilder servicesLinkBuilder =
+ final LinkBuilder linkBuilder =
LinkBuilder.newBuilder(getResourceContext(), "services", RepresentationType.LIST, "services");
- final List<String> followLinks = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
- if(followLinks.contains("services")) {
+ final PathFollower pathFollower = getPathFollower().follow("services");
+ if(!pathFollower.isTerminated()) {
final List<ObjectAdapter> serviceAdapters = getResourceContext().getPersistenceSession().getServices();
final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.LIST);
- final ListReprRenderer renderer = (ListReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+ final ListReprRenderer renderer = (ListReprRenderer) factory.newRenderer(getResourceContext(), pathFollower, JsonRepresentation.newMap());
renderer.usingLinkToBuilder(new DomainServiceLinkToBuilder())
.withSelf("services")
.with(serviceAdapters);
- servicesLinkBuilder.withValue(renderer.render());
+ linkBuilder.withValue(renderer.render());
}
- representation.mapPut("services", servicesLinkBuilder.build());
+ representation.mapPut("services", linkBuilder.build());
}
private void putLinkToUser(JsonRepresentation representation) {
final LinkBuilder userLinkBuilder =
LinkBuilder.newBuilder(getResourceContext(), "user", RepresentationType.USER, "user");
- final List<String> followLinks = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
- if(followLinks.contains("user")) {
-
+ final PathFollower pathFollower = getPathFollower().follow("user");
+ if(!pathFollower.isTerminated()) {
final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.USER);
final UserReprRenderer renderer =
- (UserReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+ (UserReprRenderer) factory.newRenderer(getResourceContext(), pathFollower, JsonRepresentation.newMap());
renderer.with(getResourceContext().getAuthenticationSession());
userLinkBuilder.withValue(renderer.render());
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=1179398&r1=1179397&r2=1179398&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 19:47:17 2011
@@ -19,8 +19,6 @@
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;
@@ -28,8 +26,6 @@ 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;
@@ -46,15 +42,12 @@ public class HomePageResourceServerside
RepresentationType representationType = RepresentationType.HOME_PAGE;
init(representationType);
- //final List<List<String>> arg = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
-
final RendererFactory factory = rendererFactoryRegistry.find(representationType);
final HomePageReprRenderer renderer =
- (HomePageReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+ (HomePageReprRenderer) factory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
renderer.includesSelf();
return responseOfOk(Caching.ONE_DAY, renderer).build();
}
-
}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserReprRenderer.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/user/UserReprRenderer.java?rev=1179398&r1=1179397&r2=1179398&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserReprRenderer.java Wed Oct 5 19:47:17 2011
@@ -20,6 +20,7 @@ import org.apache.isis.core.commons.auth
import org.apache.isis.viewer.json.applib.JsonRepresentation;
import org.apache.isis.viewer.json.applib.RepresentationType;
import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.PathFollower;
import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
@@ -33,13 +34,13 @@ public class UserReprRenderer extends Re
}
@Override
- public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
- return new UserReprRenderer(resourceContext, getRepresentationType(), representation);
+ public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, PathFollower pathFollower, JsonRepresentation representation) {
+ return new UserReprRenderer(resourceContext, pathFollower, getRepresentationType(), representation);
}
}
- private UserReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
- super(resourceContext, representationType, representation);
+ private UserReprRenderer(ResourceContext resourceContext, PathFollower pathFollower, RepresentationType representationType, JsonRepresentation representation) {
+ super(resourceContext, pathFollower, representationType, representation);
}
@Override
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.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/user/UserResourceServerside.java?rev=1179398&r1=1179397&r2=1179398&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.java Wed Oct 5 19:47:17 2011
@@ -39,7 +39,7 @@ public class UserResourceServerside exte
final RendererFactory factory = rendererFactoryRegistry.find(user);
final UserReprRenderer renderer =
- (UserReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+ (UserReprRenderer) factory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
renderer.includesSelf()
.with(getAuthenticationSession());
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/ResourceContextTest_ensureCompatibleAcceptHeader.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/ResourceContextTest_ensureCompatibleAcceptHeader.java?rev=1179398&r1=1179397&r2=1179398&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/ResourceContextTest_ensureCompatibleAcceptHeader.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/ResourceContextTest_ensureCompatibleAcceptHeader.java Wed Oct 5 19:47:17 2011
@@ -1,17 +1,14 @@
package org.apache.isis.viewer.json.viewer;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
-import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import org.apache.isis.viewer.json.applib.RepresentationType;
-import org.apache.isis.viewer.json.viewer.util.MapUtils;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
@@ -21,64 +18,84 @@ import org.junit.Test;
public class ResourceContextTest_ensureCompatibleAcceptHeader {
private HttpHeaders httpHeaders;
- private ResourceContext resourceContext;
+ private HttpServletRequest httpServletRequest;
private Mockery context = new JUnit4Mockery();
@Before
public void setUp() throws Exception {
httpHeaders = context.mock(HttpHeaders.class);
- resourceContext = new ResourceContext(httpHeaders, null, null, null, null, null, null, null, null, null, null);
+ httpServletRequest = context.mock(HttpServletRequest.class);
+ context.checking(new Expectations() {
+ {
+ allowing(httpServletRequest).getParameterMap();
+ will(returnValue(Collections.emptyMap()));
+ }
+ });
}
@Test
public void noop() throws Exception {
- givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList(RepresentationType.HOME_PAGE.getMediaType()));
- resourceContext.ensureCompatibleAcceptHeader(null);
+ final RepresentationType representationType = RepresentationType.HOME_PAGE;
+ givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList(representationType.getMediaType()));
+
+ instantiateResourceContext(representationType);
}
@Test
public void happyCase() throws Exception {
- final RepresentationType homePage = RepresentationType.HOME_PAGE;
- givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList(homePage.getMediaType()));
- resourceContext.ensureCompatibleAcceptHeader(homePage);
+ final RepresentationType representationType = RepresentationType.HOME_PAGE;
+ givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList(representationType.getMediaType()));
+
+ instantiateResourceContext(representationType);
}
@Test
public void acceptGenericAndProduceGeneric() throws Exception {
+ RepresentationType representationType = RepresentationType.GENERIC;
givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList(MediaType.APPLICATION_JSON_TYPE));
- resourceContext.ensureCompatibleAcceptHeader(RepresentationType.GENERIC);
+
+ instantiateResourceContext(representationType);
}
@Test
public void acceptGenericAndProduceSpecific() throws Exception {
- final RepresentationType homePage = RepresentationType.HOME_PAGE;
+ final RepresentationType representationType = RepresentationType.HOME_PAGE;
givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList(MediaType.APPLICATION_JSON_TYPE));
- resourceContext.ensureCompatibleAcceptHeader(homePage);
+
+ instantiateResourceContext(representationType);
}
@Test(expected = JsonApplicationException.class)
public void nonMatching() throws Exception {
+ RepresentationType representationType = RepresentationType.HOME_PAGE;
givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList(MediaType.APPLICATION_ATOM_XML_TYPE));
- resourceContext.ensureCompatibleAcceptHeader(RepresentationType.HOME_PAGE);
+
+ instantiateResourceContext(representationType);
}
@Test(expected = JsonApplicationException.class)
public void nonMatchingProfile() throws Exception {
+ RepresentationType representationType = RepresentationType.HOME_PAGE;
givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList(RepresentationType.USER.getMediaType()));
- resourceContext.ensureCompatibleAcceptHeader(RepresentationType.HOME_PAGE);
+
+ instantiateResourceContext(representationType);
}
@Test(expected = JsonApplicationException.class)
public void nonMatchingProfile_ignoreGeneric() throws Exception {
+ RepresentationType representationType = RepresentationType.HOME_PAGE;
givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList(RepresentationType.USER.getMediaType(), MediaType.APPLICATION_JSON_TYPE));
- resourceContext.ensureCompatibleAcceptHeader(RepresentationType.HOME_PAGE);
+
+ instantiateResourceContext(representationType);
}
@Test(expected = JsonApplicationException.class)
public void emptyList() throws Exception {
+ RepresentationType representationType = RepresentationType.HOME_PAGE;
givenHttpHeadersGetAcceptableMediaTypesReturns(Arrays.<MediaType>asList());
- resourceContext.ensureCompatibleAcceptHeader(RepresentationType.HOME_PAGE);
+
+ instantiateResourceContext(representationType);
}
private void givenHttpHeadersGetAcceptableMediaTypesReturns(final List<MediaType> mediaTypes) {
@@ -89,4 +106,10 @@ public class ResourceContextTest_ensureC
}
});
}
+
+ private ResourceContext instantiateResourceContext(final RepresentationType representationType) {
+ return new ResourceContext(representationType, httpHeaders, null, null, httpServletRequest, null, null, null, null, null, null, null);
+ }
+
+
}
Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/ResourceContextTest_getArg.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/ResourceContextTest_getArg.java?rev=1179398&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/ResourceContextTest_getArg.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/ResourceContextTest_getArg.java Wed Oct 5 19:47:17 2011
@@ -0,0 +1,58 @@
+package org.apache.isis.viewer.json.viewer;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulRequest.QueryParameter;
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.jmock.integration.junit4.JMock;
+import org.jmock.integration.junit4.JUnit4Mockery;
+import org.jmock.lib.legacy.ClassImposteriser;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(JMock.class)
+public class ResourceContextTest_getArg {
+
+ private HttpServletRequest httpServletRequest;
+
+ private ResourceContext resourceContext;
+ private Mockery context = new JUnit4Mockery() {{
+ setImposteriser(ClassImposteriser.INSTANCE);
+ }
+ };
+
+ private QueryParameter<?> queryParameter;
+
+
+ @Before
+ public void setUp() throws Exception {
+ httpServletRequest = context.mock(HttpServletRequest.class);
+ queryParameter = context.mock(QueryParameter.class);
+
+ }
+
+ @Test
+ public void delegatesToQueryParam() throws Exception {
+ final Map<?, ?> parameterMap = context.mock(Map.class);
+ context.checking(new Expectations() {
+ {
+ one(httpServletRequest).getParameterMap();
+ will(returnValue(parameterMap));
+ one(queryParameter).valueOf(parameterMap);
+ }
+ });
+ resourceContext = new ResourceContext(null, null, null, null, httpServletRequest, null, null, null, null, null, null, null) {
+ @Override
+ void init(RepresentationType representationType) {
+ //
+ }
+ };
+ resourceContext.getArg(queryParameter);
+ }
+
+}