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/09/05 14:40:14 UTC
svn commit: r1165265 [1/2] - 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/capabilities/
json-applib/src/main/java/org/apache/i...
Author: danhaywood
Date: Mon Sep 5 12:40:11 2011
New Revision: 1165265
URL: http://svn.apache.org/viewvc?rev=1165265&view=rev
Log:
ISIS-109: creating some test infrastructure and helpers
Added:
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/
- copied from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesRepresentation.java
- copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ScalarValueRepresentation.java
- copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ActionInvocationRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java
- copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java
- copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java
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/UserStoryTest.java
- copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/ResourceRepresentationTest.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/
- copied from r1165222, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/
- copied from r1165222, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/reptypes/
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java
- copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/reptypes/RepresentationTypeResourceServerside.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/RestfulClient.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionInvocationRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionPromptRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/CollectionDetailsRepresentation.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/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/PropertyDetailsRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ServicesRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getBigInteger.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getDouble.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_putXxx.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/ResourceRepresentationTest.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/JsonApplication.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/LinkRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/BodyArgs.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberRepType.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/RepresentationTypeResourceServerside.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objectlist/DomainObjectListRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/reptypes/
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/services/DomainServiceListRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/services/DomainServicesResourceServerside.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.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=1165265&r1=1165264&r2=1165265&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 Mon Sep 5 12:40:11 2011
@@ -5,7 +5,6 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
-import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
@@ -32,8 +31,6 @@ import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java Mon Sep 5 12:40:11 2011
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.json.applib;
+
+import org.apache.isis.viewer.json.applib.blocks.Link;
+
+public interface LinksToSelf {
+
+ public Link getSelf();
+}
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulClient.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulClient.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulClient.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulClient.java Mon Sep 5 12:40:11 2011
@@ -24,8 +24,8 @@ import javax.ws.rs.core.Response;
import org.apache.commons.httpclient.HttpClient;
import org.apache.isis.viewer.json.applib.blocks.Link;
-import org.apache.isis.viewer.json.applib.domain.DomainObjectResource;
-import org.apache.isis.viewer.json.applib.domain.DomainServicesResource;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectResource;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainServicesResource;
import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
import org.apache.isis.viewer.json.applib.types.TypeResource;
import org.apache.isis.viewer.json.applib.user.UserResource;
@@ -65,7 +65,7 @@ public class RestfulClient {
return homePageResource;
}
- public DomainServicesResource getServicesResource() {
+ public DomainServicesResource getDomainServicesResource() {
return servicesResource;
}
Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java Mon Sep 5 12:40:11 2011
@@ -0,0 +1,18 @@
+package org.apache.isis.viewer.json.applib.capabilities;
+
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
+import org.codehaus.jackson.JsonNode;
+
+public class CapabilitiesRepresentation extends JsonRepresentation implements LinksToSelf {
+
+ public CapabilitiesRepresentation(JsonNode jsonNode) {
+ super(jsonNode);
+ }
+
+ public Link getSelf() {
+ return getLink("self");
+ }
+
+}
Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java Mon Sep 5 12:40:11 2011
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.json.applib.capabilities;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.jboss.resteasy.annotations.ClientResponseType;
+
+@Path("/capabilities")
+public interface CapabilitiesResource {
+
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON })
+ @ClientResponseType(entityType=String.class)
+ public Response capabilities();
+
+}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionPromptRepresentation.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/ActionPromptRepresentation.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionPromptRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionPromptRepresentation.java Mon Sep 5 12:40:11 2011
@@ -1,13 +1,19 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
import org.codehaus.jackson.JsonNode;
-public class ActionPromptRepresentation extends JsonRepresentation {
+public class ActionPromptRepresentation extends JsonRepresentation implements LinksToSelf {
public ActionPromptRepresentation(JsonNode jsonNode) {
super(jsonNode);
}
+
+ public Link getSelf() {
+ return getLink("self");
+ }
}
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/CollectionDetailsRepresentation.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/CollectionDetailsRepresentation.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/CollectionDetailsRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/CollectionDetailsRepresentation.java Mon Sep 5 12:40:11 2011
@@ -1,13 +1,20 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
import org.codehaus.jackson.JsonNode;
-public class CollectionDetailsRepresentation extends JsonRepresentation {
+public class CollectionDetailsRepresentation extends JsonRepresentation implements LinksToSelf {
public CollectionDetailsRepresentation(JsonNode jsonNode) {
super(jsonNode);
}
+
+ public Link getSelf() {
+ return getLink("self");
+ }
+
}
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=1165265&r1=1165222&r2=1165265&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 Mon Sep 5 12:40:11 2011
@@ -1,15 +1,33 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
import org.codehaus.jackson.JsonNode;
-public class DomainObjectRepresentation extends JsonRepresentation {
+public class DomainObjectRepresentation extends JsonRepresentation implements LinksToSelf {
public DomainObjectRepresentation(JsonNode jsonNode) {
super(jsonNode);
}
+ public Link getSelf() {
+ return getLink("self");
+ }
+
+ public Link getDomainType() {
+ return getLink("domainType");
+ }
+
+ public String getOid() {
+ return getString("oid");
+ }
+
+ public String getTitle() {
+ return getString("title");
+ }
+
/**
* Requires xom:xom:1.1 (LGPL) to be added as a dependency.
*/
@@ -24,4 +42,5 @@ public class DomainObjectRepresentation
return xpath("/*[memberType='action']");
}
+
}
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectResource.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/DomainObjectResource.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectResource.java Mon Sep 5 12:40:11 2011
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
import java.io.InputStream;
import java.util.List;
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesRepresentation.java (from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesRepresentation.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/DomainServicesRepresentation.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesRepresentation.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesRepresentation.java&r1=1165222&r2=1165265&rev=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesRepresentation.java Mon Sep 5 12:40:11 2011
@@ -1,20 +1,17 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
import org.apache.isis.viewer.json.applib.blocks.Link;
import org.codehaus.jackson.JsonNode;
-public class ServicesRepresentation extends JsonRepresentation {
+public class DomainServicesRepresentation extends JsonRepresentation implements LinksToSelf {
- public ServicesRepresentation(JsonNode jsonNode) {
+ public DomainServicesRepresentation(JsonNode jsonNode) {
super(jsonNode);
}
- public Link getRepresentationType() {
- return getLink("representationType");
- }
-
public Link getSelf() {
return getLink("self");
}
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesResource.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/DomainServicesResource.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesResource.java Mon Sep 5 12:40:11 2011
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/PropertyDetailsRepresentation.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/PropertyDetailsRepresentation.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/PropertyDetailsRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/PropertyDetailsRepresentation.java Mon Sep 5 12:40:11 2011
@@ -1,13 +1,20 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
import org.codehaus.jackson.JsonNode;
-public class PropertyDetailsRepresentation extends JsonRepresentation {
+public class PropertyDetailsRepresentation extends JsonRepresentation implements LinksToSelf {
public PropertyDetailsRepresentation(JsonNode jsonNode) {
super(jsonNode);
}
+
+ public Link getSelf() {
+ return getLink("self");
+ }
+
}
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ScalarValueRepresentation.java (from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ActionInvocationRepresentation.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/ScalarValueRepresentation.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ScalarValueRepresentation.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ActionInvocationRepresentation.java&r1=1165222&r2=1165265&rev=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ActionInvocationRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ScalarValueRepresentation.java Mon Sep 5 12:40:11 2011
@@ -1,13 +1,19 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
import org.codehaus.jackson.JsonNode;
-public class ActionInvocationRepresentation extends JsonRepresentation {
+public class ScalarValueRepresentation extends JsonRepresentation implements LinksToSelf {
- public ActionInvocationRepresentation(JsonNode jsonNode) {
+ public ScalarValueRepresentation(JsonNode jsonNode) {
super(jsonNode);
}
+
+ public Link getSelf() {
+ return getLink("self");
+ }
}
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java (from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java&r1=1165222&r2=1165265&rev=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java Mon Sep 5 12:40:11 2011
@@ -1,12 +1,13 @@
-package org.apache.isis.viewer.json.applib.reptypes;
+package org.apache.isis.viewer.json.applib.domaintypes;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
import org.apache.isis.viewer.json.applib.blocks.Link;
import org.codehaus.jackson.JsonNode;
-public class RepresentationTypeRepresentation extends JsonRepresentation {
+public class DomainTypeRepresentation extends JsonRepresentation implements LinksToSelf {
- public RepresentationTypeRepresentation(JsonNode jsonNode) {
+ public DomainTypeRepresentation(JsonNode jsonNode) {
super(jsonNode);
}
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java (from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java&r1=1165222&r2=1165265&rev=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java Mon Sep 5 12:40:11 2011
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.viewer.json.applib.reptypes;
+package org.apache.isis.viewer.json.applib.domaintypes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -27,7 +27,7 @@ import javax.ws.rs.core.Response;
import org.jboss.resteasy.annotations.ClientResponseType;
@Path("/representationTypes")
-public interface RepresentationTypeResource {
+public interface DomainTypeResource {
@GET
@Path("/{representationTypeName}")
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java Mon Sep 5 12:40:11 2011
@@ -1,18 +1,16 @@
package org.apache.isis.viewer.json.applib.homepage;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
import org.apache.isis.viewer.json.applib.blocks.Link;
import org.codehaus.jackson.JsonNode;
-public class HomePageRepresentation extends JsonRepresentation {
+public class HomePageRepresentation extends JsonRepresentation implements LinksToSelf {
public HomePageRepresentation(JsonNode jsonNode) {
super(jsonNode);
}
- public Link getRepresentationType() {
- return getLink("representationType");
- }
public Link getSelf() {
return getLink("self");
}
@@ -22,11 +20,13 @@ public class HomePageRepresentation exte
public Link getServices() {
return getLink("services");
}
+ public Link getCapabilities() {
+ return getLink("capabilities");
+ }
public JsonRepresentation getLinks() {
- return getArray("services");
+ return getArray("links");
}
-
public JsonRepresentation getMetadata() {
return getArray("metadata");
}
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java Mon Sep 5 12:40:11 2011
@@ -1,18 +1,19 @@
package org.apache.isis.viewer.json.applib.user;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
import org.apache.isis.viewer.json.applib.blocks.Link;
import org.codehaus.jackson.JsonNode;
-public class UserRepresentation extends JsonRepresentation {
+public class UserRepresentation extends JsonRepresentation implements LinksToSelf {
public UserRepresentation(JsonNode jsonNode) {
super(jsonNode);
}
- public Link getRepresentationType() {
- return getLink("representationType");
+ public Link getSelf() {
+ return getLink("self");
}
public String getUserName() {
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java Mon Sep 5 12:40:11 2011
@@ -5,7 +5,6 @@ import static org.junit.Assert.assertTha
import javax.ws.rs.core.Response.Status.Family;
-import org.apache.isis.viewer.json.applib.HttpStatusCode;
import org.junit.Test;
public class HttpStatusCodeTest {
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getBigInteger.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_getBigInteger.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getBigInteger.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getBigInteger.java Mon Sep 5 12:40:11 2011
@@ -25,7 +25,6 @@ import static org.junit.Assert.assertTha
import static org.junit.Assert.fail;
import java.io.IOException;
-import java.math.BigDecimal;
import java.math.BigInteger;
import org.codehaus.jackson.JsonParseException;
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getDouble.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_getDouble.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getDouble.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getDouble.java Mon Sep 5 12:40:11 2011
@@ -25,7 +25,6 @@ import static org.junit.Assert.assertTha
import static org.junit.Assert.fail;
import java.io.IOException;
-import java.math.BigDecimal;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_putXxx.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_putXxx.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_putXxx.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_putXxx.java Mon Sep 5 12:40:11 2011
@@ -18,7 +18,6 @@
*/
package org.apache.isis.viewer.json.applib;
-import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java Mon Sep 5 12:40:11 2011
@@ -0,0 +1,263 @@
+package org.apache.isis.viewer.json.tck;
+
+import static org.apache.isis.core.commons.matchers.IsisMatchers.matches;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status.Family;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.tck.dom.scalars.ApplibValuedEntity;
+import org.apache.isis.tck.objstore.dflt.scalars.ApplibValuedEntityRepositoryDefault;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.blocks.Link;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.apache.isis.viewer.json.applib.domainobjects.ActionPromptRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectResource;
+import org.apache.isis.viewer.json.applib.domainobjects.PropertyDetailsRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.ScalarValueRepresentation;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+
+
+public class DomainObjectResourceTest {
+
+ @Rule
+ public IsisWebServerRule webServerRule = new IsisWebServerRule();
+
+ protected RestfulClient client;
+
+ @Before
+ public void setUp() throws Exception {
+ WebServer webServer = webServerRule.getWebServer();
+ client = new RestfulClient(webServer.getBase());
+ }
+
+
+ @Ignore("to get working again")
+ @Test
+ public void returnsDomainObjectRepresentation() throws Exception {
+
+ // given
+ DomainObjectResource domainObjectResource = client.getDomainObjectResource();
+
+ // when
+ Response domainObjectResp = domainObjectResource.object("OID:1");
+ RestfulResponse<DomainObjectRepresentation> domainObjectJsonResp = RestfulResponse.of(domainObjectResp, DomainObjectRepresentation.class);
+ assertThat(domainObjectJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+
+ // then
+ DomainObjectRepresentation domainObjectRepr = domainObjectJsonResp.getEntity();
+
+ Link self = domainObjectRepr.getSelf();
+ assertThat(self,
+ isLink().rel("object").href(matches(".+objects/OID:1")).method(Method.GET));
+ assertThat(domainObjectRepr.getDomainType(),
+ isLink().rel("type").href(matches(".+" + ApplibValuedEntityRepositoryDefault.class.getName() + ".+")).method(Method.GET));
+
+ assertThat(domainObjectRepr.getTitle(), is("ApplibValues"));
+ assertThat(domainObjectRepr.getOid(), is("OID:1"));
+
+ // _self.icon
+ Link selfIcon = domainObjectRepr.getLink("_self.icon");
+ // TODO: shouldn't really be present since no icon available; or should point to a default, perhaps
+ assertThat(selfIcon, isLink().rel("icon").href(matches(".+" + "/images/" + "null\\.png")).method(Method.GET));
+
+ // properties
+ JsonRepresentation properties = domainObjectRepr.getProperties();
+ assertThat(properties.mapSize(), is(1));
+
+ // id property
+ JsonRepresentation idProperty = properties.getRepresentation("id");
+ assertThat(idProperty.getString("memberType"), is("property"));
+ assertThat(idProperty.getString("propertyId"), is("id"));
+ assertThat(idProperty.getString("value"), is(org.apache.isis.tck.objstore.dflt.scalars.ApplibValuedEntityRepositoryDefault.class.getName()));
+ assertThat(idProperty.getString("disabledReason"), is(not(nullValue())));
+
+ Link idPropertyType = idProperty.getLink("type");
+ assertThat(idPropertyType, isLink().rel("type").href(matches(".+vnd\\.string\\+json")).method(Method.GET));
+
+ Link idPropertyDetails = idProperty.getLink("details");
+ assertThat(idPropertyDetails, isLink().rel("property").href(self.getHref() + "/properties/id").method(Method.GET));
+
+ // actions
+ JsonRepresentation actions = domainObjectRepr.getActions();
+ assertThat(actions.mapSize(), is(2));
+
+ JsonRepresentation listAction = actions.getRepresentation("list");
+ assertThat(listAction.getString("memberType"), is("action"));
+ assertThat(listAction.getString("actionId"), is("list"));
+ assertThat(listAction.getString("actionType"), is("USER"));
+ assertThat(listAction.getInt("numParameters"), is(0));
+
+ Link listActionType = listAction.getLink("type");
+ assertThat(listActionType.getRel(), is("type"));
+ assertThat(listActionType.getHref(), matches(".+vnd\\.list\\+json"));
+ assertThat(listActionType.getMethod(), is(Method.GET));
+
+ Link listActionDetails = listAction.getLink("details");
+ assertThat(listActionDetails.getRel(), is("action"));
+ assertThat(listActionDetails.getHref(), is(self.getHref() + "/actions/list"));
+ assertThat(listActionDetails.getMethod(), is(Method.GET));
+
+ JsonRepresentation newEntityAction = actions.getRepresentation("newEntity");
+ assertThat(newEntityAction.getString("memberType"), is("action"));
+ assertThat(newEntityAction.getString("actionType"), is("USER"));
+ assertThat(newEntityAction.getInt("numParameters"), is(0));
+
+ Link newEntityActionType = newEntityAction.getLink("type");
+ assertThat(newEntityActionType.getRel(), is("type"));
+ assertThat(newEntityActionType.getHref(), matches(".+vnd\\." +
+ ApplibValuedEntity.class.getName() +
+ "\\+json"));
+ assertThat(newEntityActionType.getMethod(), is(Method.GET));
+
+ Link newEntityActionDetails = newEntityAction.getLink("details");
+ assertThat(newEntityActionDetails.getRel(), is("action"));
+ assertThat(newEntityActionDetails.getHref(), is(self.getHref() + "/actions/newEntity"));
+ assertThat(newEntityActionDetails.getMethod(), is(Method.GET));
+ }
+
+ @Ignore("to get working again")
+ @Test
+ public void propertyDetails() throws Exception {
+ // given
+ DomainObjectResource domainObjectResource = client.getDomainObjectResource();
+
+ // when
+ Response idPropertyResp = domainObjectResource.propertyDetails("OID:1", "id");
+ RestfulResponse<PropertyDetailsRepresentation> idPropertyJsonResp = RestfulResponse.of(idPropertyResp, PropertyDetailsRepresentation.class);
+ assertThat(idPropertyJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+
+ // then
+ PropertyDetailsRepresentation propertyDetailsRepr = idPropertyJsonResp.getEntity();
+
+ // _self.link
+ Link selfLink = propertyDetailsRepr.getLink("_self.link");
+ assertThat(selfLink.getRel(), is("member"));
+ assertThat(selfLink.getHref(), matches(".+objects/OID:1/properties/id"));
+ assertThat(selfLink.getMethod(), is(Method.GET));
+
+ // _self.object
+ Link selfObject = propertyDetailsRepr.getLink("_self.object");
+ assertThat(selfObject.getRel(), is("object"));
+ assertThat(selfObject.getHref(), matches(".+objects/OID:1"));
+ assertThat(selfObject.getMethod(), is(Method.GET));
+
+ // type
+ Link type = propertyDetailsRepr.getLink("type");
+ assertThat(type.getRel(), is("type"));
+ assertThat(type.getHref(), matches(".+vnd\\.string\\+json"));
+ assertThat(type.getMethod(), is(Method.GET));
+
+ assertThat(propertyDetailsRepr.getString("memberType"), is("property"));
+ assertThat(propertyDetailsRepr.getString("value"), is(org.apache.isis.tck.objstore.dflt.scalars.ApplibValuedEntityRepositoryDefault.class.getName()));
+ assertThat(propertyDetailsRepr.getString("disabledReason"), is(not(nullValue())));
+ }
+
+
+ @Ignore("to get working again")
+ @Test
+ public void actionPrompt() throws Exception {
+ // given
+ DomainObjectResource domainObjectResource = client.getDomainObjectResource();
+
+ // when
+ Response actionPromptResp = domainObjectResource.actionPrompt("OID:1", "list");
+ RestfulResponse<ActionPromptRepresentation> actionPromptJsonResp = RestfulResponse.of(actionPromptResp, ActionPromptRepresentation.class);
+ assertThat(actionPromptJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+
+ // then
+ ActionPromptRepresentation actionPromptRepr = actionPromptJsonResp.getEntity();
+
+ // _self.link
+ Link selfLink = actionPromptRepr.getLink("_self.link");
+ assertThat(selfLink.getRel(), is("member"));
+ assertThat(selfLink.getHref(), matches(".+objects/OID:1/actions/list"));
+ assertThat(selfLink.getMethod(), is(Method.GET));
+
+ // _self.object
+ Link selfObject = actionPromptRepr.getLink("_self.object");
+ assertThat(selfObject.getRel(), is("object"));
+ assertThat(selfObject.getHref(), matches(".+objects/OID:1"));
+ assertThat(selfObject.getMethod(), is(Method.GET));
+
+ // type
+ Link type = actionPromptRepr.getLink("type");
+ assertThat(type.getRel(), is("type"));
+ assertThat(type.getHref(), matches(".+vnd\\.list\\+json"));
+ assertThat(type.getMethod(), is(Method.GET));
+
+ assertThat(actionPromptRepr.getString("memberType"), is("action"));
+ assertThat(actionPromptRepr.getString("actionType"), is("USER"));
+ assertThat(actionPromptRepr.getInt("numParameters"), is(0));
+ assertThat(actionPromptRepr.getArray("parameters").arraySize(), is(0));
+
+ Link invokeLink = actionPromptRepr.getLink("invoke");
+ assertThat(invokeLink.getRel(), is("invoke"));
+ assertThat(invokeLink.getHref(), matches(".+objects/OID:1/actions/list/invoke"));
+ assertThat(invokeLink.getMethod(), is(Method.POST));
+ assertThat(invokeLink.getArguments(), is(not(nullValue())));
+ assertThat(invokeLink.getArguments().isArray(), is(true));
+ assertThat(invokeLink.getArguments().arraySize(), is(0));
+ }
+
+ @Ignore("TODO")
+ @Test
+ public void collectionDetails() throws Exception {
+ fail();
+ }
+
+
+ @Ignore("to get working again")
+ @Test
+ public void actionPostInvoke_returningList() throws Exception {
+
+ // given
+ DomainObjectResource domainObjectResource = client.getDomainObjectResource();
+
+ JsonRepresentation body = JsonRepresentation.newArray();
+
+ // when
+ Response actionInvokeResp = domainObjectResource.invokeAction("OID:1", "list", body.asInputStream());
+ RestfulResponse<ScalarValueRepresentation> actionInvokeJsonResp = RestfulResponse.of(actionInvokeResp, ScalarValueRepresentation.class);
+ assertThat(actionInvokeJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+
+ // then
+ ScalarValueRepresentation actionInvokeRepr = actionInvokeJsonResp.getEntity();
+ assertThat(actionInvokeRepr.isArray(), is(true));
+ assertThat(actionInvokeRepr.arraySize(), is(5));
+
+ JsonRepresentation domainObjectRefRepr = actionInvokeRepr.elementAt(0);
+
+ assertThat(domainObjectRefRepr, is(not(nullValue())));
+ assertThat(domainObjectRefRepr.getString("title"), is("Untitled Applib Values Entity")); // TODO
+
+ Link domainObjectLink = domainObjectRefRepr.getLink("link");
+ assertThat(domainObjectLink.getRel(), is("object"));
+ assertThat(domainObjectLink.getHref(), matches("http://localhost:\\d+/objects/OID:7"));
+
+ Link domainObjectTypeLink = domainObjectRefRepr.getLink("type");
+ assertThat(domainObjectTypeLink.getRel(), is("type"));
+ assertThat(domainObjectTypeLink.getHref(), matches("http://localhost:\\d+/types/application/vnd." +
+ org.apache.isis.tck.dom.scalars.ApplibValuedEntity.class.getName() +
+ "\\+json"));
+
+ Link domainObjectIconLink = domainObjectRefRepr.getLink("icon");
+ assertThat(domainObjectIconLink.getRel(), is("icon"));
+ assertThat(domainObjectIconLink.getHref(), matches("http://localhost:\\d+/images/null.png")); // TODO
+ }
+
+}
+
\ No newline at end of file
Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java Mon Sep 5 12:40:11 2011
@@ -0,0 +1,119 @@
+package org.apache.isis.viewer.json.tck;
+
+import static org.apache.isis.core.commons.matchers.IsisMatchers.greaterThan;
+import static org.apache.isis.core.commons.matchers.IsisMatchers.matches;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isArray;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isFollowableLinkToSelf;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isMap;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status.Family;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.blocks.Link;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainServicesRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainServicesResource;
+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;
+
+
+public class DomainServiceResourceTest {
+
+ @Rule
+ public IsisWebServerRule webServerRule = new IsisWebServerRule();
+
+ private RestfulClient client;
+ private DomainServicesResource resource;
+
+ @Before
+ public void setUp() throws Exception {
+ WebServer webServer = webServerRule.getWebServer();
+ client = new RestfulClient(webServer.getBase());
+
+ resource = client.getDomainServicesResource();
+ }
+
+
+ @Ignore("to get working again")
+ @Test
+ public void returnsServicesRepresentation() throws Exception {
+
+
+ // when
+ Response servicesResp = resource.services();
+ RestfulResponse<DomainServicesRepresentation> servicesJsonResp = RestfulResponse.of(servicesResp, DomainServicesRepresentation.class);
+ assertThat(servicesJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+
+ // then
+ DomainServicesRepresentation servicesRepr = servicesJsonResp.getEntity();
+
+ assertThat(servicesRepr, isMap());
+
+ assertThat(servicesRepr.getSelf(), isLink().method(Method.GET));
+
+ assertThat(servicesRepr.getString("title"), is("ApplibValues"));
+
+ JsonRepresentation serviceValues = servicesRepr.xpath("/value/e[rel='service']");
+ assertThat(serviceValues, isArray());
+ assertThat(serviceValues.arraySize(), is(greaterThan(0)));
+
+ Link serviceLink = serviceValues.elementAt(0).asLink();
+ assertThat(serviceLink, isLink().rel("service").href(matches("http://localhost:\\d+/services/.*$")).method(Method.GET));
+ }
+
+
+
+ @org.junit.Ignore("to get working")
+ @Test
+ public void linksToSelf() throws Exception {
+ // given
+ DomainServicesRepresentation servicesRepr = givenRepresentation();
+
+ // when, then
+ assertThat(servicesRepr, isFollowableLinkToSelf(client));
+ }
+
+
+ @Ignore("to get working again")
+ @Test
+ public void linksToDomainServiceResources() throws Exception {
+
+ // given
+ DomainServicesRepresentation servicesRepr = givenRepresentation();
+
+ JsonRepresentation repoRepr = servicesRepr.elementAt(0);
+ Link repoObjLink = repoRepr.getLink("link");
+
+ // and when
+ Response repoFollowResp = client.follow(repoObjLink);
+ RestfulResponse<DomainObjectRepresentation> repoFollowJsonResp = RestfulResponse.of(repoFollowResp, DomainObjectRepresentation.class);
+
+ // then
+ DomainObjectRepresentation domainObjectRepr = repoFollowJsonResp.getEntity();
+ Link domainObjectReprLink = domainObjectRepr.getLink("_self.link");
+ assertThat(domainObjectReprLink, is(repoObjLink));
+ }
+
+
+ private DomainServicesRepresentation givenRepresentation() throws JsonParseException, JsonMappingException, IOException {
+ return RepresentationMatchers.entityOf(resource.services(), DomainServicesRepresentation.class);
+ }
+
+
+}
+
\ No newline at end of file
Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java Mon Sep 5 12:40:11 2011
@@ -0,0 +1,103 @@
+package org.apache.isis.viewer.json.tck;
+
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.entityOf;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isFollowableLinkToSelf;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status.Family;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.viewer.json.applib.HttpStatusCode;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.apache.isis.viewer.json.applib.homepage.HomePageRepresentation;
+import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+
+public class HomePageResourceTest {
+
+ @Rule
+ public IsisWebServerRule webServerRule = new IsisWebServerRule();
+
+ private RestfulClient client;
+ private HomePageResource resource;
+
+ @Before
+ public void setUp() throws Exception {
+ WebServer webServer = webServerRule.getWebServer();
+ client = new RestfulClient(webServer.getBase());
+
+ resource = client.getHomePageResource();
+ }
+
+ @org.junit.Ignore("to get working")
+ @Test
+ public void returnsHomePageRepresentation() throws Exception {
+
+ // given
+ Response resourcesResp = resource.resources();
+
+ // when
+ RestfulResponse<HomePageRepresentation> homePageJsonResp = RestfulResponse.of(resourcesResp, HomePageRepresentation.class);
+ assertThat(homePageJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+
+ // then
+ assertThat(homePageJsonResp.getStatus(), is(HttpStatusCode.OK));
+
+ HomePageRepresentation homePageRepr = homePageJsonResp.getEntity();
+ assertThat(homePageRepr, is(not(nullValue())));
+ assertThat(homePageRepr.isMap(), is(true));
+
+ assertThat(homePageRepr.getSelf(), isLink(client).method(Method.GET));
+ assertThat(homePageRepr.getUser(), isLink(client).method(Method.GET));
+ assertThat(homePageRepr.getServices(), isLink(client).method(Method.GET));
+ assertThat(homePageRepr.getCapabilities(), isLink(client).method(Method.GET));
+
+ assertThat(homePageRepr.getLinks(), is(not(nullValue())));
+ assertThat(homePageRepr.getMetadata(), is(not(nullValue())));
+ }
+
+ @Test
+ public void linksToSelf() throws Exception {
+ // given
+ HomePageRepresentation homePageRepr = givenRepresentation();
+
+ // when, then
+ assertThat(homePageRepr, isFollowableLinkToSelf(client));
+ }
+
+ @org.junit.Ignore("to get working")
+ @Test
+ public void links() throws Exception {
+
+ HomePageRepresentation homePageRepr = givenRepresentation();
+
+ // when, then
+ assertThat(homePageRepr.getServices(), isLink(client).returning(HttpStatusCode.OK));
+ assertThat(homePageRepr.getUser(), isLink(client).returning(HttpStatusCode.OK));
+ assertThat(homePageRepr.getCapabilities(), isLink(client).returning(HttpStatusCode.OK));
+ }
+
+ private HomePageRepresentation givenRepresentation() throws JsonParseException, JsonMappingException, IOException {
+ return entityOf(resource.resources(), HomePageRepresentation.class);
+ }
+
+ //
+}
+
+
+
\ No newline at end of file
Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java Mon Sep 5 12:40:11 2011
@@ -0,0 +1,28 @@
+package org.apache.isis.viewer.json.tck;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.junit.rules.MethodRule;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.Statement;
+
+public class IsisWebServerRule implements MethodRule {
+
+ private static ThreadLocal<WebServer> WEBSERVER = new ThreadLocal<WebServer>() {
+ protected WebServer initialValue() {
+ WebServer webServer = new WebServer();
+ webServer.run(39393);
+ return webServer;
+ };
+ };
+
+ @Override
+ public Statement apply(Statement base, FrameworkMethod method, Object target) {
+ getWebServer(); // creates and starts running if required
+ return base;
+ }
+
+ public WebServer getWebServer() {
+ return WEBSERVER.get();
+ }
+
+}
Added: 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=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java Mon Sep 5 12:40:11 2011
@@ -0,0 +1,248 @@
+package org.apache.isis.viewer.json.tck;
+
+import java.io.IOException;
+
+import javax.ws.rs.core.Response;
+
+import org.apache.isis.viewer.json.applib.HttpStatusCode;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.blocks.Link;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+import org.junit.Assert;
+
+
+public class RepresentationMatchers {
+
+ public static <T extends JsonRepresentation> T entityOf(Response resp, Class<T> representationType) throws JsonParseException, JsonMappingException, IOException {
+ RestfulResponse<T> jsonResp = RestfulResponse.of(resp, representationType);
+ return jsonResp.getEntity();
+ }
+
+
+ public static <T extends JsonRepresentation> Matcher<T> isMap() {
+ return new TypeSafeMatcher<T>() {
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("map");
+ }
+
+ @Override
+ public boolean matchesSafely(T item) {
+ return item != null && item.isMap();
+ }
+ };
+ }
+
+ public static <T extends JsonRepresentation> Matcher<T> isArray() {
+ return new TypeSafeMatcher<T>() {
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("array");
+ }
+
+ @Override
+ public boolean matchesSafely(T item) {
+ return item != null && item.isArray();
+ }
+ };
+ }
+
+ public static Matcher<Link> isLink(final Method method) {
+ return new TypeSafeMatcher<Link>() {
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("link with method " + method.name());
+ }
+
+ @Override
+ public boolean matchesSafely(Link item) {
+ return item != null && item.getMethod() == method;
+ }
+ };
+ }
+
+ public static <T extends JsonRepresentation> Matcher<T> isFollowableLinkToSelf(final RestfulClient client) {
+ return new TypeSafeMatcher<T>() {
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("links to self");
+ }
+
+ @Override
+ public boolean matchesSafely(T item) {
+ LinksToSelf initialRepr = (LinksToSelf) item; // no easy way to do this with Hamcrest
+ // when
+ Response servicesResp;
+ try {
+ servicesResp = client.follow(initialRepr.getSelf());
+ RestfulResponse<T> followedResp = RestfulResponse.of(servicesResp, asT(item));
+
+ // then
+ T repr2 = followedResp.getEntity();
+ LinksToSelf repr2AsLinksToSelf = (LinksToSelf)repr2;
+ return initialRepr.getSelf().equals(repr2AsLinksToSelf.getSelf());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <T> Class<T> asT(T initialRepr) {
+ return (Class<T>) initialRepr.getClass();
+ }
+
+
+ public static <T> void assertThat(T actual, AbstractMatcherBuilder<T> matcherBuilder) {
+ Assert.assertThat(actual, matcherBuilder.build());
+ }
+
+ public static LinkMatcherBuilder isLink(RestfulClient client) {
+ return new LinkMatcherBuilder(client);
+ }
+
+ public static LinkMatcherBuilder isLink() {
+ return new LinkMatcherBuilder(null);
+ }
+
+
+ public static abstract class AbstractMatcherBuilder<T> {
+ protected RestfulClient client;
+
+ public AbstractMatcherBuilder(RestfulClient client) {
+ this.client = client;
+ }
+
+ public abstract Matcher<T> build();
+ }
+
+ public static class LinkMatcherBuilder extends AbstractMatcherBuilder<Link> {
+ private HttpStatusCode statusCode;
+ private Method method;
+ private String rel;
+ private String href;
+ private Matcher<String> hrefMatcher;
+
+ private LinkMatcherBuilder(RestfulClient client) {
+ super(client);
+ }
+
+ public LinkMatcherBuilder rel(String rel) {
+ this.rel = rel;
+ return this;
+ }
+
+ public LinkMatcherBuilder href(String href) {
+ this.href = href;
+ return this;
+ }
+
+ public LinkMatcherBuilder href(Matcher<String> methodMatcher) {
+ this.hrefMatcher = methodMatcher;
+ return this;
+ }
+
+ public LinkMatcherBuilder method(Method method) {
+ this.method = method;
+ return this;
+ }
+
+
+ public LinkMatcherBuilder returning(HttpStatusCode statusCode) {
+ this.statusCode = statusCode;
+ return this;
+ }
+
+ @Override
+ public Matcher<Link> build() {
+
+ return new TypeSafeMatcher<Link>() {
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("a link ");
+ if(rel != null) {
+ description.appendText(" with rel ").appendText(rel);
+ }
+ if(href != null) {
+ description.appendText(" with href ").appendText(href);
+ }
+ if(hrefMatcher != null) {
+ description.appendText(" with href ");
+ hrefMatcher.describeTo(description);
+ }
+ if(method != null) {
+ description.appendText(" with method ").appendValue(method);
+ }
+
+ // trigger link being followed
+ if(statusCode != null) {
+ if(client == null) {
+ description.appendText(" !!! provide client in matcher's constructor !!!");
+ }
+ description.appendText(" that when followed");
+ }
+
+ // assertions on response
+ if(statusCode != null) {
+ description.appendText(" returns ").appendValue(statusCode);
+ }
+ }
+
+ @Override
+ public boolean matchesSafely(Link link) {
+ if(rel != null && !rel.equals(link.getRel())) {
+ return false;
+ }
+ if(href != null && !href.equals(link.getHref())) {
+ return false;
+ }
+ if(hrefMatcher != null && !hrefMatcher.matches(link.getHref())) {
+ return false;
+ }
+ if(method != null && !method.equals(link.getMethod())) {
+ return false;
+ }
+
+ // follow link if criteria require it
+ Response linkedResp = null;
+ if(statusCode != null) {
+ if(client == null) {
+ return false;
+ }
+ try {
+ linkedResp = client.follow(link);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ // assertions based on provided criteria
+ if(statusCode != null) {
+ RestfulResponse<JsonRepresentation> jsonResp = RestfulResponse.of(linkedResp, JsonRepresentation.class);
+ if(jsonResp.getStatus() != statusCode) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ };
+ }
+ }
+
+}
+
\ No newline at end of file