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/06/23 19:04:48 UTC
svn commit: r1138992 - in /incubator/isis/trunk/viewer/restful/viewer2/src:
main/java/META-INF/ main/java/org/apache/isis/viewer/restful/viewer2/
main/java/org/apache/isis/viewer/restful/viewer2/embedded/
main/java/org/apache/isis/viewer/restful/viewer...
Author: danhaywood
Date: Thu Jun 23 17:04:47 2011
New Revision: 1138992
URL: http://svn.apache.org/viewvc?rev=1138992&view=rev
Log:
more on restful viewer2
Added:
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/LinkRepBuilder.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/Representation.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/RepresentationBuilder.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/TypeBuilder.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectRepBuilder.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/MemberSelfRepBuilder.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/PropertyRepBuilder.java
Removed:
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/META-INF/
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/LinkRep.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/TypeRep.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/home/HomePageRep.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/ActionRep.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/CollectionRep.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectRep.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/MemberRep.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/PropertyRep.java
Modified:
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/RepContext.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/embedded/EmbeddedWebViewerRestful.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/ResourceAbstract.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/bootstrap/BootstrapResourceImpl.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/home/HomePageResourceImpl.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectResourceImpl.java
incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/services/ServicesResourceImpl.java
incubator/isis/trunk/viewer/restful/viewer2/src/test/java/org/apache/isis/viewer/restful/viewer2/RepresentationContextTest_relFor.java
Modified: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/RepContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/RepContext.java?rev=1138992&r1=1138991&r2=1138992&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/RepContext.java (original)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/RepContext.java Thu Jun 23 17:04:47 2011
@@ -20,14 +20,11 @@ package org.apache.isis.viewer.restful.v
import java.util.Arrays;
-import org.apache.isis.viewer.restful.viewer2.resources.objects.DomainObjectRep;
+import org.apache.isis.viewer.restful.viewer2.representations.Representation;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
-import com.google.common.base.Strings;
-import com.google.common.collect.Collections2;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
/**
* The context within which this representation is being requested.
@@ -41,7 +38,7 @@ import com.google.common.collect.Lists;
* representation will be keyed under. This is required in order that
* 'rel' links for attributes correctly concatenate. It is also used to
* infer whether member representations (which appear in summary form in
- * the {@link DomainObjectRep} and in more detail in their own resources)
+ * the {@link Representation} and in more detail in their own resources)
* should include a _self attribute or not.
*/
public class RepContext {
@@ -75,4 +72,11 @@ public class RepContext {
public boolean hasAttribute() {
return attribute != null;
}
+
+ /**
+ * Returns a new {@link RepContext} with a different attribute.
+ */
+ public RepContext underAttribute(String attribute) {
+ return resourceContext.repContext(attribute);
+ }
}
Modified: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/embedded/EmbeddedWebViewerRestful.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/embedded/EmbeddedWebViewerRestful.java?rev=1138992&r1=1138991&r2=1138992&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/embedded/EmbeddedWebViewerRestful.java (original)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/embedded/EmbeddedWebViewerRestful.java Thu Jun 23 17:04:47 2011
@@ -19,8 +19,8 @@
package org.apache.isis.viewer.restful.viewer2.embedded;
import org.apache.isis.core.commons.lang.MapUtils;
-import org.apache.isis.core.webapp.content.ResourceServlet;
import org.apache.isis.core.webapp.content.ResourceCachingFilter;
+import org.apache.isis.core.webapp.content.ResourceServlet;
import org.apache.isis.runtimes.dflt.runtime.viewer.web.WebAppSpecification;
import org.apache.isis.runtimes.dflt.runtime.web.EmbeddedWebViewer;
import org.apache.isis.runtimes.dflt.webapp.IsisSessionFilter;
Added: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/LinkRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/LinkRepBuilder.java?rev=1138992&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/LinkRepBuilder.java (added)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/LinkRepBuilder.java Thu Jun 23 17:04:47 2011
@@ -0,0 +1,63 @@
+/**
+ * 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.restful.viewer2.representations;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.viewer.restful.viewer2.RepContext;
+
+public class LinkRepBuilder extends RepresentationBuilder {
+
+ public static LinkRepBuilder newBuilder(RepContext repContext, String relSuffix, String url) {
+ return new LinkRepBuilder(repContext, relSuffix, url);
+ }
+ public static TypeBuilder newTypeBuilder(RepContext repContext, String relSuffix, ObjectSpecification objectSpec) {
+ return new TypeBuilder(repContext, relSuffix, objectSpec);
+ }
+
+ private final String relSuffix;
+ private final String url;
+
+ private HttpMethod method = HttpMethod.GET;
+ private String title;
+ private String body;
+
+ public LinkRepBuilder(RepContext repContext, String relSuffix, String url) {
+ super(repContext);
+ this.relSuffix = relSuffix;
+ this.url = url;
+ }
+ public LinkRepBuilder withMethod(HttpMethod method) {
+ this.method = method;
+ return this;
+ }
+ public LinkRepBuilder withTitle(String title) {
+ this.title = title;
+ return this;
+ }
+ public LinkRepBuilder withBody(String body) {
+ this.body = body;
+ return this;
+ }
+ public Representation build() {
+ representation.put("rel", repContext.relFor(relSuffix));
+ representation.put("url", repContext.urlFor(url));
+ representation.put("method", method);
+ representation.put("title", title);
+ representation.put("body", body);
+ return representation;
+ }
+}
\ No newline at end of file
Added: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/Representation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/Representation.java?rev=1138992&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/Representation.java (added)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/Representation.java Thu Jun 23 17:04:47 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.restful.viewer2.representations;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
+
+public class Representation extends LinkedHashMap<String, Object> {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Object put(String key, Object value) {
+ if(value ==null) {
+ return null;
+ }
+ return super.put(key, value);
+ }
+
+
+}
Added: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/RepresentationBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/RepresentationBuilder.java?rev=1138992&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/RepresentationBuilder.java (added)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/RepresentationBuilder.java Thu Jun 23 17:04:47 2011
@@ -0,0 +1,57 @@
+/**
+ * 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.restful.viewer2.representations;
+
+import org.apache.isis.applib.profiles.Localization;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.oid.stringable.OidStringifier;
+import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.viewer.restful.viewer2.RepContext;
+
+public abstract class RepresentationBuilder {
+
+ protected final RepContext repContext;
+ protected final Representation representation = new Representation();
+
+ public RepresentationBuilder(RepContext repContext) {
+ this.repContext = repContext;
+ }
+
+ protected OidStringifier getOidStringifier() {
+ return getOidGenerator().getOidStringifier();
+ }
+
+ protected OidGenerator getOidGenerator() {
+ return getPersistenceSession().getOidGenerator();
+ }
+
+ protected PersistenceSession getPersistenceSession() {
+ return IsisContext.getPersistenceSession();
+ }
+
+ protected AuthenticationSession getSession() {
+ return IsisContext.getAuthenticationSession();
+ }
+
+ protected Localization getLocalization() {
+ return IsisContext.getLocalization();
+ }
+
+
+}
\ No newline at end of file
Added: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/TypeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/TypeBuilder.java?rev=1138992&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/TypeBuilder.java (added)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/representations/TypeBuilder.java Thu Jun 23 17:04:47 2011
@@ -0,0 +1,72 @@
+/**
+ * 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.restful.viewer2.representations;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.viewer.restful.viewer2.RepContext;
+
+import com.google.common.collect.Maps;
+
+public class TypeBuilder extends LinkRepBuilder {
+
+ private static Map<String,String> WELL_KNOWN_TYPES =
+ mapOf(
+ java.lang.String.class.getName(), "string",
+ java.lang.Byte.class.getName(), "byte",
+ java.lang.Short.class.getName(), "short",
+ java.lang.Integer.class.getName(), "int",
+ java.lang.Long.class.getName(), "long",
+ java.lang.Float.class.getName(), "float",
+ java.lang.Double.class.getName(), "double",
+ java.math.BigInteger.class.getName(), "bigint",
+ java.math.BigDecimal.class.getName(), "bigdec"
+ );
+
+ public TypeBuilder(RepContext repContext, String relSuffix, ObjectSpecification objectSpec) {
+ super(repContext, relSuffix, urlFor(objectSpec));
+ }
+
+ private static String urlFor(ObjectSpecification objectSpec) {
+ return "types/application/vnd+" + map(objectSpec.getFullIdentifier());
+ }
+
+ private static String map(String className) {
+ String wellKnownType = WELL_KNOWN_TYPES.get(className);
+ return wellKnownType != null? wellKnownType: className;
+ }
+
+ /**
+ * Utility to converts varargs into an immutable map.
+ */
+ private static Map<String, String> mapOf(String... keyOrValues) {
+ Map<String, String> map = Maps.newLinkedHashMap();
+ String key = null;
+ for(String keyOrValue: keyOrValues) {
+ if(key != null) {
+ map.put(key, keyOrValue);
+ key = null;
+ } else {
+ key = keyOrValue;
+ }
+ }
+ return Collections.unmodifiableMap(map);
+ }
+
+}
\ No newline at end of file
Modified: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/ResourceAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/ResourceAbstract.java?rev=1138992&r1=1138991&r2=1138992&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/ResourceAbstract.java (original)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/ResourceAbstract.java Thu Jun 23 17:04:47 2011
@@ -43,7 +43,6 @@ import org.apache.isis.runtimes.dflt.run
import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
import org.apache.isis.viewer.restful.viewer2.ResourceContext;
-import org.apache.isis.viewer.restful.viewer2.resources.objects.DomainObjectRep;
import org.apache.isis.viewer.restful.viewer2.util.OidUtils;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
Modified: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/bootstrap/BootstrapResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/bootstrap/BootstrapResourceImpl.java?rev=1138992&r1=1138991&r2=1138992&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/bootstrap/BootstrapResourceImpl.java (original)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/bootstrap/BootstrapResourceImpl.java Thu Jun 23 17:04:47 2011
@@ -27,7 +27,6 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.apache.isis.viewer.restful.applib2.resources.BootstrapResource;
-import org.apache.isis.viewer.restful.applib2.resources.HomePageResource;
import org.apache.isis.viewer.restful.viewer2.resources.ResourceAbstract;
import com.google.common.io.ByteStreams;
Modified: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/home/HomePageResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/home/HomePageResourceImpl.java?rev=1138992&r1=1138991&r2=1138992&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/home/HomePageResourceImpl.java (original)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/home/HomePageResourceImpl.java Thu Jun 23 17:04:47 2011
@@ -23,7 +23,8 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.apache.isis.viewer.restful.applib2.resources.HomePageResource;
-import org.apache.isis.viewer.restful.viewer2.representations.LinkRep;
+import org.apache.isis.viewer.restful.viewer2.representations.LinkRepBuilder;
+import org.apache.isis.viewer.restful.viewer2.representations.Representation;
import org.apache.isis.viewer.restful.viewer2.resources.ResourceAbstract;
/**
@@ -39,15 +40,15 @@ public class HomePageResourceImpl extend
public String resources() {
init();
- HomePageRep homePageRepresentation = new HomePageRep();
- homePageRepresentation.setUser(linkTo("user"));
-
- homePageRepresentation.setServices(linkTo("services"));
- return asJson(homePageRepresentation);
+ Representation representation = new Representation();
+ representation.put("user", linkTo("user"));
+ representation.put("services", linkTo("services"));
+
+ return asJson(representation);
}
- protected LinkRep linkTo(String url) {
- return LinkRep.newBuilder(getResourceContext().repContext(url), null, url).build();
+ protected Representation linkTo(String url) {
+ return LinkRepBuilder.newBuilder(getResourceContext().repContext(url), null, url).build();
}
Added: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectRepBuilder.java?rev=1138992&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectRepBuilder.java (added)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectRepBuilder.java Thu Jun 23 17:04:47 2011
@@ -0,0 +1,104 @@
+/**
+ * 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.restful.viewer2.resources.objects;
+
+import java.util.Map;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.stringable.OidStringifier;
+import org.apache.isis.viewer.restful.viewer2.RepContext;
+import org.apache.isis.viewer.restful.viewer2.representations.LinkRepBuilder;
+import org.apache.isis.viewer.restful.viewer2.representations.Representation;
+import org.apache.isis.viewer.restful.viewer2.representations.RepresentationBuilder;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Maps;
+
+public class DomainObjectRepBuilder extends RepresentationBuilder{
+
+ public static DomainObjectRepBuilder newBuilder(RepContext representationContext, ObjectAdapter objectAdapter) {
+ return new DomainObjectRepBuilder(representationContext, objectAdapter);
+ }
+
+ private final ObjectAdapter objectAdapter;
+ private final Map<String, Representation> members = Maps.newLinkedHashMap();
+
+ public DomainObjectRepBuilder(RepContext repContext, ObjectAdapter objectAdapter) {
+ super(repContext);
+ this.objectAdapter = objectAdapter;
+ }
+
+ public Representation build() {
+ RepContext repContext = this.repContext.underAttribute("_self");
+ Representation selfLink = LinkRepBuilder.newBuilder(repContext, "link", urlFor(objectAdapter)).build();
+ Representation selfType = LinkRepBuilder.newTypeBuilder(repContext, "type", objectAdapter.getSpecification()).build();
+ String title = objectAdapter.titleString();
+ Representation iconLink = LinkRepBuilder.newBuilder(repContext, "icon", iconFor(objectAdapter)).build();
+ Representation self = new Representation();
+ self.put("link", selfLink);
+ self.put("type", selfType);
+ self.put("title", title);
+ self.put("icon", iconLink);
+ representation.put("_self", self);
+ if(!members.isEmpty()) {
+ for(Map.Entry<String, Representation> entry: members.entrySet()) {
+ String memberId = entry.getKey();
+ Representation memberRep = entry.getValue();
+ representation.put(memberId, memberRep);
+ }
+ }
+ return representation;
+ }
+
+ public void withProperty(String id, Representation propertyRep) {
+ members.put(id, propertyRep);
+ }
+
+ private String iconFor(ObjectAdapter objectAdapter) {
+ String iconName = objectAdapter.getIconName();
+ return "images/" + iconName + ".png";
+ }
+
+ private String urlFor(ObjectAdapter objectAdapter) {
+ OidStringifier oidStringifier = getOidStringifier();
+ return urlFor(objectAdapter, oidStringifier);
+ }
+
+ public static String urlFor(ObjectAdapter objectAdapter, OidStringifier oidStringifier) {
+ String oidStr = oidStringifier.enString(objectAdapter.getOid());
+ return "objects/" + oidStr;
+ }
+
+ public static Function<ObjectAdapter, Representation> fromAdapter(final RepContext repContext) {
+ return new Function<ObjectAdapter, Representation>() {
+ @Override
+ public Representation apply(ObjectAdapter input) {
+ return newBuilder(repContext, input).build();
+ }
+ };
+ }
+
+ public static Function<Representation, Representation> selfOf() {
+ return new Function<Representation, Representation>() {
+ @Override
+ public Representation apply(Representation input) {
+ return (Representation) input.get("_self");
+ }
+ };
+ }
+
+}
\ No newline at end of file
Modified: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectResourceImpl.java?rev=1138992&r1=1138991&r2=1138992&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectResourceImpl.java (original)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/DomainObjectResourceImpl.java Thu Jun 23 17:04:47 2011
@@ -32,15 +32,12 @@ import javax.ws.rs.core.MediaType;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
import org.apache.isis.viewer.restful.applib2.resources.ObjectResource;
-import org.apache.isis.viewer.restful.viewer2.RepContext;
+import org.apache.isis.viewer.restful.viewer2.representations.Representation;
import org.apache.isis.viewer.restful.viewer2.resources.ResourceAbstract;
-import org.apache.isis.viewer.restful.viewer2.resources.objects.DomainObjectRep.Builder;
import org.apache.isis.viewer.restful.viewer2.util.UrlDecoderUtils;
@Path("/objects")
@@ -58,19 +55,19 @@ public class DomainObjectResourceImpl ex
throw new WebApplicationException(responseOfGone("could not determine object"));
}
- Builder builder = DomainObjectRep.newBuilder(getResourceContext().repContext(), objectAdapter);
+ DomainObjectRepBuilder builder = DomainObjectRepBuilder.newBuilder(getResourceContext().repContext(), objectAdapter);
List<ObjectAssociation> properties = objectAdapter.getSpecification().getAssociations(ObjectAssociationFilters.PROPERTIES);
for (ObjectAssociation otoa : properties) {
Consent visibility = otoa.isVisible(getSession(), objectAdapter);
if(visibility.isAllowed()) {
String id = otoa.getId();
- PropertyRep propertyRep = PropertyRep.newBuilder(getResourceContext().repContext(id), objectAdapter, (OneToOneAssociation)otoa).build();
+ Representation propertyRep = PropertyRepBuilder.newBuilder(getResourceContext().repContext(id), objectAdapter, (OneToOneAssociation)otoa).build();
builder.withProperty(id, propertyRep);
}
}
- DomainObjectRep representation = builder.build();
+ Representation representation = builder.build();
return asJson(representation);
}
Added: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/MemberSelfRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/MemberSelfRepBuilder.java?rev=1138992&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/MemberSelfRepBuilder.java (added)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/MemberSelfRepBuilder.java Thu Jun 23 17:04:47 2011
@@ -0,0 +1,50 @@
+/**
+ * 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.restful.viewer2.resources.objects;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.stringable.OidStringifier;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.viewer.restful.viewer2.RepContext;
+import org.apache.isis.viewer.restful.viewer2.representations.LinkRepBuilder;
+import org.apache.isis.viewer.restful.viewer2.representations.Representation;
+import org.apache.isis.viewer.restful.viewer2.representations.RepresentationBuilder;
+
+public class MemberSelfRepBuilder extends RepresentationBuilder {
+
+ public static MemberSelfRepBuilder newBuilder(RepContext repContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+ return new MemberSelfRepBuilder(repContext, objectAdapter, otoa);
+ }
+
+ private final ObjectAdapter objectAdapter;
+ private final ObjectMember objectMember;
+
+ public MemberSelfRepBuilder(RepContext repContext, ObjectAdapter objectAdapter, ObjectMember objectMember) {
+ super(repContext);
+ this.objectAdapter = objectAdapter;
+ this.objectMember = objectMember;
+ }
+
+ public Representation build() {
+ representation.put("link", LinkRepBuilder.newBuilder(repContext, "link", DomainObjectRepBuilder.urlFor(objectAdapter, getOidStringifier())).build());
+ return representation;
+ }
+}
\ No newline at end of file
Added: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/PropertyRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/PropertyRepBuilder.java?rev=1138992&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/PropertyRepBuilder.java (added)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/objects/PropertyRepBuilder.java Thu Jun 23 17:04:47 2011
@@ -0,0 +1,105 @@
+/**
+ * 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.restful.viewer2.resources.objects;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.stringable.OidStringifier;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
+import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.viewer.restful.viewer2.RepContext;
+import org.apache.isis.viewer.restful.viewer2.representations.HttpMethod;
+import org.apache.isis.viewer.restful.viewer2.representations.LinkRepBuilder;
+import org.apache.isis.viewer.restful.viewer2.representations.Representation;
+import org.apache.isis.viewer.restful.viewer2.representations.RepresentationBuilder;
+
+public class PropertyRepBuilder extends RepresentationBuilder {
+
+ public static PropertyRepBuilder newBuilder(RepContext repContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+ return new PropertyRepBuilder(repContext, objectAdapter, otoa);
+ }
+
+
+ private final ObjectAdapter objectAdapter;
+ private final OneToOneAssociation otoa;
+
+ public PropertyRepBuilder(RepContext repContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+ super(repContext);
+ this.objectAdapter = objectAdapter;
+ this.otoa = otoa;
+ }
+
+ public Representation build() {
+ if(addSelf()) {
+ Representation selfLink = LinkRepBuilder.newBuilder(repContext, "link", urlFor(objectAdapter, otoa)).build();
+ selfLink.put("method", HttpMethod.GET);
+ Representation selfRep = MemberSelfRepBuilder.newBuilder(repContext, objectAdapter, otoa).build();
+ representation.put("self", selfRep);
+ }
+ Representation type = LinkRepBuilder.newTypeBuilder(repContext, "type", otoa.getSpecification()).build();
+ representation.put("type", type);
+ representation.put("value", obtainValue());
+ Consent usability = otoa.isUsable(getSession(), objectAdapter);
+ representation.put("disabledReason", usability.getReason());
+ Representation detailsLink = LinkRepBuilder.newBuilder(repContext, "details", urlFor(objectAdapter, otoa)).build(); // TODO: same as self.link ???
+ representation.put("details", detailsLink);
+ return representation;
+ }
+
+ /**
+ * Only add the _self attribute if this representation is being
+ * generated in a context that is not 'under' an attribute of an
+ * owning {@link Representation representation}.
+ */
+ private boolean addSelf() {
+ return !repContext.hasAttribute();
+ }
+
+ private Object obtainValue() {
+ ObjectAdapter valueAdapter = otoa.get(objectAdapter);
+ if(valueAdapter == null) {
+ return null;
+ }
+ ObjectSpecification otoaSpec = otoa.getSpecification();
+ ValueFacet valueFacet = otoaSpec.getFacet(ValueFacet.class);
+ if(valueFacet != null) {
+ EncodableFacet encodableFacet = otoaSpec.getFacet(EncodableFacet.class);
+ return encodableFacet.toEncodedString(valueAdapter);
+ }
+ TitleFacet titleFacet = otoaSpec.getFacet(TitleFacet.class);
+ if (titleFacet == null) {
+ // fallback
+ titleFacet = otoaSpec.getFacet(TitleFacet.class);
+ }
+ String title = titleFacet.title(valueAdapter, getLocalization());
+ return LinkRepBuilder.newBuilder(repContext, "value", urlFor(valueAdapter)).withTitle(title).build();
+ }
+
+ private String urlFor(ObjectAdapter adapter) {
+ return DomainObjectRepBuilder.urlFor(adapter, getOidStringifier());
+ }
+
+ private String urlFor(ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+ OidStringifier oidStringifier = getOidStringifier();
+ String oidStr = oidStringifier.enString(objectAdapter.getOid());
+ return "objects/" + oidStr + "/property/" + otoa.getId();
+ }
+
+}
\ No newline at end of file
Modified: incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/services/ServicesResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/services/ServicesResourceImpl.java?rev=1138992&r1=1138991&r2=1138992&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/services/ServicesResourceImpl.java (original)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/main/java/org/apache/isis/viewer/restful/viewer2/resources/services/ServicesResourceImpl.java Thu Jun 23 17:04:47 2011
@@ -26,9 +26,9 @@ import javax.ws.rs.Produces;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.viewer.restful.applib2.resources.ServicesResource;
import org.apache.isis.viewer.restful.viewer2.RepContext;
+import org.apache.isis.viewer.restful.viewer2.representations.Representation;
import org.apache.isis.viewer.restful.viewer2.resources.ResourceAbstract;
-import org.apache.isis.viewer.restful.viewer2.resources.objects.DomainObjectRep;
-import org.apache.isis.viewer.restful.viewer2.resources.objects.DomainObjectRep.SelfRep;
+import org.apache.isis.viewer.restful.viewer2.resources.objects.DomainObjectRepBuilder;
import com.google.common.base.Function;
import com.google.common.base.Functions;
@@ -50,14 +50,14 @@ public class ServicesResourceImpl extend
return asJsonList(serviceSelfRepresentations());
}
- protected List<DomainObjectRep.SelfRep> serviceSelfRepresentations() {
+ protected List<Representation> serviceSelfRepresentations() {
final List<ObjectAdapter> serviceAdapters = getPersistenceSession().getServices();
RepContext representationContext = getResourceContext().repContext();
- Function<ObjectAdapter, SelfRep> objectSelfRepresentation =
+ Function<ObjectAdapter, Representation> objectSelfRepresentation =
Functions.compose(
- DomainObjectRep.selfOf(),
- DomainObjectRep.fromAdapter(representationContext));
+ DomainObjectRepBuilder.selfOf(),
+ DomainObjectRepBuilder.fromAdapter(representationContext));
return Lists.newArrayList(
Collections2.transform(serviceAdapters, objectSelfRepresentation));
}
Modified: incubator/isis/trunk/viewer/restful/viewer2/src/test/java/org/apache/isis/viewer/restful/viewer2/RepresentationContextTest_relFor.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/restful/viewer2/src/test/java/org/apache/isis/viewer/restful/viewer2/RepresentationContextTest_relFor.java?rev=1138992&r1=1138991&r2=1138992&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/restful/viewer2/src/test/java/org/apache/isis/viewer/restful/viewer2/RepresentationContextTest_relFor.java (original)
+++ incubator/isis/trunk/viewer/restful/viewer2/src/test/java/org/apache/isis/viewer/restful/viewer2/RepresentationContextTest_relFor.java Thu Jun 23 17:04:47 2011
@@ -16,7 +16,7 @@
*/
package org.apache.isis.viewer.restful.viewer2;
-import static org.hamcrest.CoreMatchers.*;
+import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import org.junit.Test;