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/09 11:59:56 UTC
svn commit: r1167064 [2/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/blocks/
json-applib/src/main/java/org/apache/isis/vi...
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java Fri Sep 9 09:59:37 2011
@@ -50,11 +50,11 @@ public class LinkBuilder extends Represe
return this;
}
public JsonRepresentation build() {
- representation.put("rel", rel);
- representation.put("href", resourceContext.urlFor(href));
- representation.put("method", method);
- representation.put("title", title);
- representation.put("arguments", arguments);
+ representation.mapPut("rel", rel);
+ representation.mapPut("href", resourceContext.urlFor(href));
+ representation.mapPut("method", method);
+ representation.mapPut("title", title);
+ representation.mapPut("arguments", arguments);
return representation;
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java Fri Sep 9 09:59:37 2011
@@ -36,7 +36,7 @@ public abstract class RepresentationBuil
public T withSelf(String href) {
- representation.put("self", LinkBuilder.newBuilder(resourceContext, "self", href).build());
+ representation.mapPut("self", LinkBuilder.newBuilder(resourceContext, "self", href).build());
return cast(this);
}
@@ -48,7 +48,7 @@ public abstract class RepresentationBuil
if(!links.isArray()) {
throw new IllegalArgumentException("links must be a list");
}
- representation.put("links", links);
+ representation.mapPut("links", links);
return cast(this);
}
@@ -60,7 +60,7 @@ public abstract class RepresentationBuil
if(!extensions.isMap()) {
throw new IllegalArgumentException("extensions must be a map");
}
- representation.put("extensions", extensions);
+ representation.mapPut("extensions", extensions);
return cast(this);
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/RepresentationType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/RepresentationType.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/RepresentationType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/RepresentationType.java Fri Sep 9 09:59:37 2011
@@ -1,5 +1,7 @@
package org.apache.isis.viewer.json.viewer.resources;
+import org.apache.isis.viewer.json.applib.util.Enums;
+
public enum RepresentationType {
HOME_PAGE,
@@ -17,17 +19,7 @@ public enum RepresentationType {
DOMAIN_ACTION_PARAMETER;
public String getName() {
- StringBuilder builder = new StringBuilder();
- boolean nextUpper = false;
- for(char c: name().toCharArray()) {
- if(c == '_') {
- nextUpper = true;
- } else {
- builder.append(nextUpper?c:Character.toLowerCase(c));
- nextUpper = false;
- }
- }
- return builder.toString();
+ return Enums.enumToCamelCase(this);
}
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java Fri Sep 9 09:59:37 2011
@@ -53,6 +53,7 @@ import org.apache.isis.viewer.json.appli
import org.apache.isis.viewer.json.applib.JsonRepresentation;
import org.apache.isis.viewer.json.applib.RestfulResponse;
import org.apache.isis.viewer.json.applib.util.JsonMapper;
+import org.apache.isis.viewer.json.viewer.JsonApplicationException;
import org.apache.isis.viewer.json.viewer.ResourceContext;
import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainObjectRepBuilder;
@@ -110,6 +111,12 @@ public abstract class ResourceAbstract {
protected void init() {
this.resourceContext =
new ResourceContext(httpHeaders, uriInfo, request, httpServletRequest, httpServletResponse, securityContext);
+
+ List<MediaType> mediaTypes = getResourceContext().getHttpHeaders().getAcceptableMediaTypes();
+ if(!mediaTypes.contains(MediaType.APPLICATION_JSON_TYPE)) {
+ throw JsonApplicationException.create(HttpStatusCode.NOT_ACCEPTABLE);
+ }
+
}
protected ResourceContext getResourceContext() {
@@ -268,69 +275,8 @@ public abstract class ResourceAbstract {
return Response.status(httpStatusCode.getJaxrsStatusType()).header(RestfulResponse.Header.WARNING.getName(), String.format(reason, args)).build();
}
- protected static Response responseOf(HttpStatusCode httpStatusCode, final Exception ex) {
- ResponseBuilder builder = Response.status(httpStatusCode.getJaxrsStatusType()).header(RestfulResponse.Header.WARNING.getName(), ex.getMessage());
- return withStackTrace(builder, ex).build();
- }
-
- protected static Response responseOf(HttpStatusCode httpStatusCode, final String reason, Exception ex, final Object... args) {
- ResponseBuilder builder = Response.status(Status.BAD_REQUEST).header(RestfulResponse.Header.WARNING.getName(), String.format(reason, args));
- return withStackTrace(builder,ex).build();
- }
-
- private static ResponseBuilder withStackTrace(ResponseBuilder builder, final Exception ex) {
- return builder.type(MediaType.APPLICATION_JSON_TYPE).entity(jsonFor(ex));
- }
-
-
- static class ExceptionPojo {
-
- public static ExceptionPojo create(Exception ex) {
- return new ExceptionPojo(ex);
- }
-
- private static String format(StackTraceElement stackTraceElement) {
- return stackTraceElement.toString();
- }
- private final String message;
- private final List<String> stackTrace = Lists.newArrayList();
- private ExceptionPojo causedBy;
-
- public ExceptionPojo(Throwable ex) {
- this.message = ex.getMessage();
- StackTraceElement[] stackTraceElements = ex.getStackTrace();
- for (StackTraceElement stackTraceElement : stackTraceElements) {
- this.stackTrace.add(format(stackTraceElement));
- }
- Throwable cause = ex.getCause();
- if(cause != null && cause != ex) {
- this.causedBy = new ExceptionPojo(cause);
- }
- }
-
- public String getMessage() {
- return message;
- }
-
- public List<String> getStackTrace() {
- return stackTrace;
- }
-
- public ExceptionPojo getCausedBy() {
- return causedBy;
- }
-
- }
- static String jsonFor(Exception ex) {
- try {
- return JsonMapper.instance().write(ExceptionPojo.create(ex));
- } catch (Exception e) {
- // fallback
- return "{ \"exception\": \"" + ExceptionUtils.getFullStackTrace(ex) + "\" }";
- }
- }
// //////////////////////////////////////////////////////////////
// Dependencies (from singletons)
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java Fri Sep 9 09:59:37 2011
@@ -43,24 +43,24 @@ public class CapabilitiesResourceServers
init();
JsonRepresentation representation = JsonRepresentation.newMap();
- representation.put("self", LinkBuilder.newBuilder(getResourceContext(), "self", "capabilities/").build());
+ representation.mapPut("self", LinkBuilder.newBuilder(getResourceContext(), "self", "capabilities/").build());
JsonRepresentation capabilities = JsonRepresentation.newMap();
- representation.put("capabilities", capabilities);
+ representation.mapPut("capabilities", capabilities);
- capabilities.put("concurrencyChecking", "no");
- capabilities.put("transientObjects", "no");
- capabilities.put("deleteObjects", "no");
- capabilities.put("simpleArguments", "no");
- capabilities.put("partialArguments", "no");
- capabilities.put("followLinks", "no");
- capabilities.put("validateOnly", "no");
- capabilities.put("pagination", "no");
- capabilities.put("sorting", "no");
- capabilities.put("domainModel", "rich");
+ capabilities.mapPut("concurrencyChecking", "no");
+ capabilities.mapPut("transientObjects", "no");
+ capabilities.mapPut("deleteObjects", "no");
+ capabilities.mapPut("simpleArguments", "no");
+ capabilities.mapPut("partialArguments", "no");
+ capabilities.mapPut("followLinks", "no");
+ capabilities.mapPut("validateOnly", "no");
+ capabilities.mapPut("pagination", "no");
+ capabilities.mapPut("sorting", "no");
+ capabilities.mapPut("domainModel", "rich");
- representation.put("links", JsonRepresentation.newArray());
- representation.put("extensions", JsonRepresentation.newMap());
+ representation.mapPut("links", JsonRepresentation.newArray());
+ representation.mapPut("extensions", JsonRepresentation.newMap());
return responseOfOk(jsonFor(representation));
}
Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java (from r1166100, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java&r1=1166100&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -29,13 +29,13 @@ import org.apache.isis.viewer.json.viewe
import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
-public abstract class AbstractMemberRepBuilder<R extends RepresentationBuilder<R>, T extends ObjectMember> extends RepresentationBuilder<R> {
+public abstract class AbstractObjectMemberRepBuilder<R extends RepresentationBuilder<R>, T extends ObjectMember> extends RepresentationBuilder<R> {
protected final ObjectAdapter objectAdapter;
protected final MemberType memberType;
protected final T objectMember;
- public AbstractMemberRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, MemberType memberType, T objectMember) {
+ public AbstractObjectMemberRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, MemberType memberType, T objectMember) {
super(resourceContext);
this.objectAdapter = objectAdapter;
this.memberType = memberType;
@@ -43,19 +43,19 @@ public abstract class AbstractMemberRepB
}
public R withSelf() {
- String url = AbstractMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
+ String url = AbstractObjectMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
JsonRepresentation self = LinkBuilder.newBuilder(resourceContext, "self", url).build();
- representation.put("self", self);
+ representation.mapPut("self", self);
return cast(this);
}
protected void putMemberType() {
- representation.put("memberType", memberType.name().toLowerCase());
+ representation.mapPut("memberType", memberType.getName());
}
protected void putId() {
- representation.put(memberType.key(), objectMember.getId());
+ representation.mapPut(memberType.getJsProp(), objectMember.getId());
}
public R withMutatorsIfEnabled() {
@@ -73,7 +73,7 @@ public abstract class AbstractMemberRepB
.withHttpMethod(mutatorSpec.httpMethod)
.withArguments(arguments)
.build();
- representation.put(mutator, detailsLink);
+ representation.mapPut(mutator, detailsLink);
}
}
return cast(this);
@@ -96,7 +96,7 @@ public abstract class AbstractMemberRepB
protected R withValue() {
- representation.put("value", valueRep());
+ representation.mapPut("value", valueRep());
return cast(this);
}
@@ -109,13 +109,13 @@ public abstract class AbstractMemberRepB
protected final void putDisabledReasonIfDisabled() {
String disabledReasonRep = usability().getReason();
- representation.put("disabledReason", disabledReasonRep);
+ representation.mapPut("disabledReason", disabledReasonRep);
}
- public R withDetails() {
+ public R withDetailsLink() {
String urlForMember = urlForMember();
- JsonRepresentation detailsLink = LinkBuilder.newBuilder(resourceContext, memberType.name().toLowerCase(), urlForMember).build();
- representation.put(memberType.getDetailsRel(), detailsLink);
+ JsonRepresentation detailsLink = LinkBuilder.newBuilder(resourceContext, memberType.getDetailsRel(), urlForMember).build();
+ representation.mapPut(memberType.getDetailsRel(), detailsLink);
return cast(this);
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListRepBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -37,9 +37,9 @@ public class DomainObjectListRepBuilder
JsonRepresentation list = JsonRepresentation.newArray();
for(ObjectAdapter adapter: objectAdapters) {
JsonRepresentation linkToObject = linkTo(adapter);
- list.add(linkToObject);
+ list.arrayAdd(linkToObject);
}
- representation.put("values", list);
+ representation.mapPut("values", list);
return this;
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -58,11 +58,11 @@ public class DomainObjectRepBuilder exte
public DomainObjectRepBuilder withAdapter(ObjectAdapter objectAdapter) {
JsonRepresentation self = linkTo(objectAdapter);
- representation.put("self", self);
+ representation.mapPut("self", self);
String title = objectAdapter.titleString();
- representation.put("oid", OidUtils.getOidStr(objectAdapter, getOidStringifier()));
- representation.put("title", title);
+ representation.mapPut("oid", OidUtils.getOidStr(objectAdapter, getOidStringifier()));
+ representation.mapPut("title", title);
withMembers(objectAdapter);
return this;
}
@@ -74,7 +74,7 @@ public class DomainObjectRepBuilder exte
List<ObjectAction> actions = objectAdapter.getSpecification().getObjectActions(Contributed.INCLUDED);
addActions(objectAdapter, actions, members);
- representation.put("members", members);
+ representation.mapPut("members", members);
return this;
}
@@ -86,13 +86,19 @@ public class DomainObjectRepBuilder exte
}
if(assoc instanceof OneToOneAssociation) {
OneToOneAssociation property = (OneToOneAssociation)assoc;
- JsonRepresentation propertyRep = PropertyRepBuilder.newBuilder(resourceContext, objectAdapter, property).build();
- members.add(propertyRep);
+ JsonRepresentation propertyRep =
+ ObjectPropertyRepBuilder.newBuilder(resourceContext, objectAdapter, property)
+ .withDetailsLink()
+ .build();
+ members.arrayAdd(propertyRep);
}
if(assoc instanceof OneToManyAssociation) {
OneToManyAssociation collection = (OneToManyAssociation) assoc;
- JsonRepresentation collectionRep = CollectionRepBuilder.newBuilder(resourceContext, objectAdapter, collection).build();
- members.add(collectionRep);
+ JsonRepresentation collectionRep =
+ ObjectCollectionRepBuilder.newBuilder(resourceContext, objectAdapter, collection)
+ .withDetailsLink()
+ .build();
+ members.arrayAdd(collectionRep);
}
}
}
@@ -109,8 +115,11 @@ public class DomainObjectRepBuilder exte
List<ObjectAction> subactions = objectActionSet.getActions();
addActions(objectAdapter, subactions, members);
} else {
- JsonRepresentation actionRep = ActionRepBuilder.newBuilder(resourceContext, objectAdapter, action).build();
- members.add(actionRep);
+ JsonRepresentation actionRep =
+ ObjectActionRepBuilder.newBuilder(resourceContext, objectAdapter, action)
+ .withDetailsLink()
+ .build();
+ members.arrayAdd(actionRep);
}
}
}
@@ -166,4 +175,5 @@ public class DomainObjectRepBuilder exte
}
+
}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java Fri Sep 9 09:59:37 2011
@@ -109,7 +109,7 @@ public class DomainObjectResourceServers
final OneToOneAssociation property = getPropertyThatIsVisibleAndUsable(
objectAdapter, propertyId, Intent.ACCESS);
- final PropertyRepBuilder builder = PropertyRepBuilder.newBuilder(
+ final ObjectPropertyRepBuilder builder = ObjectPropertyRepBuilder.newBuilder(
getResourceContext(), objectAdapter, property);
return responseOfOk(jsonFrom(builder));
}
@@ -176,7 +176,7 @@ public class DomainObjectResourceServers
final OneToManyAssociation collection = getCollectionThatIsVisibleAndUsable(
objectAdapter, collectionId, Intent.ACCESS);
- final CollectionRepBuilder builder = CollectionRepBuilder.newBuilder(
+ final ObjectCollectionRepBuilder builder = ObjectCollectionRepBuilder.newBuilder(
getResourceContext(), objectAdapter, collection);
return responseOfOk(jsonFrom(builder));
}
@@ -282,7 +282,7 @@ public class DomainObjectResourceServers
final ObjectAction action = getObjectActionThatIsVisibleAndUsable(
objectAdapter, actionId, Intent.ACCESS);
- ActionRepBuilder builder = ActionRepBuilder.newBuilder(
+ ObjectActionRepBuilder builder = ObjectActionRepBuilder.newBuilder(
getResourceContext(), objectAdapter, action);
return responseOfOk(jsonFrom(builder));
}
@@ -565,11 +565,11 @@ public class DomainObjectResourceServers
ObjectAssociation association = objectAdapter.getSpecification()
.getAssociation(propertyId);
if (association == null || !association.isOneToOneAssociation()) {
- throwNotFoundException(propertyId, MemberType.PROPERTY);
+ throwNotFoundException(propertyId, MemberType.OBJECT_PROPERTY);
}
OneToOneAssociation property = (OneToOneAssociation) association;
return ensureVisibleAndUsableForIntent(objectAdapter, property,
- MemberType.PROPERTY, intent);
+ MemberType.OBJECT_PROPERTY, intent);
}
private OneToManyAssociation getCollectionThatIsVisibleAndUsable(
@@ -580,11 +580,11 @@ public class DomainObjectResourceServers
ObjectAssociation association = objectAdapter.getSpecification()
.getAssociation(collectionId);
if (association == null || !association.isOneToManyAssociation()) {
- throwNotFoundException(collectionId, MemberType.COLLECTION);
+ throwNotFoundException(collectionId, MemberType.OBJECT_COLLECTION);
}
OneToManyAssociation collection = (OneToManyAssociation) association;
return ensureVisibleAndUsableForIntent(objectAdapter, collection,
- MemberType.COLLECTION, intent);
+ MemberType.OBJECT_COLLECTION, intent);
}
private ObjectAction getObjectActionThatIsVisibleAndUsable(
@@ -593,7 +593,7 @@ public class DomainObjectResourceServers
Intent intent) {
ObjectAction action = objectAdapter.getSpecification().getObjectAction(actionId);
- return ensureVisibleAndUsableForIntent(objectAdapter, action, MemberType.ACTION, intent);
+ return ensureVisibleAndUsableForIntent(objectAdapter, action, MemberType.OBJECT_ACTION, intent);
}
public <T extends ObjectMember> T ensureVisibleAndUsableForIntent(
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -41,13 +41,13 @@ public class MemberSelfRepBuilder extend
}
public JsonRepresentation build() {
- representation.put("link", memberLinkRep());
- representation.put("object", domainObjectLinkRep());
+ representation.mapPut("link", memberLinkRep());
+ representation.mapPut("object", domainObjectLinkRep());
return representation;
}
private JsonRepresentation memberLinkRep() {
- String url = AbstractMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
+ String url = AbstractObjectMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
return LinkBuilder.newBuilder(resourceContext, "member", url).build();
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java Fri Sep 9 09:59:37 2011
@@ -30,13 +30,14 @@ import org.apache.isis.core.progmodel.fa
import org.apache.isis.core.progmodel.facets.collections.validate.CollectionValidateAddToFacet;
import org.apache.isis.core.progmodel.facets.collections.validate.CollectionValidateRemoveFromFacet;
import org.apache.isis.core.progmodel.facets.properties.validate.PropertyValidateFacet;
+import org.apache.isis.viewer.json.applib.util.Enums;
import org.apache.isis.viewer.json.viewer.representations.HttpMethod;
import com.google.common.collect.ImmutableMap;
public enum MemberType {
- PROPERTY("properties/", "propertyDetails", ImmutableMap.of(
+ OBJECT_PROPERTY("properties/", "propertyId", "propertyDetails", ImmutableMap.of(
"modify", MutatorSpec.of(PropertyValidateFacet.class, PropertySetterFacet.class, HttpMethod.PUT, BodyArgs.ONE),
"clear", MutatorSpec.of(PropertyValidateFacet.class, PropertyClearFacet.class, HttpMethod.DELETE, BodyArgs.NONE)
)) {
@@ -45,7 +46,7 @@ public enum MemberType {
return objectMember.getSpecification();
}
},
- COLLECTION("collections/", "collectionDetails", ImmutableMap.of(
+ OBJECT_COLLECTION("collections/", "collectionId", "collectionDetails", ImmutableMap.of(
"addTo", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.PUT, BodyArgs.ONE),
"removeFrom", MutatorSpec.of(CollectionValidateRemoveFromFacet.class, CollectionRemoveFromFacet.class, HttpMethod.DELETE, BodyArgs.ONE)
)) {
@@ -54,7 +55,7 @@ public enum MemberType {
return objectMember.getSpecification();
}
},
- ACTION("actions/", "actionDetails", ImmutableMap.of(
+ OBJECT_ACTION("actions/", "actionId", "actionDetails", ImmutableMap.of(
"invoke", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.POST, BodyArgs.MANY, "invoke")
)) {
@Override
@@ -68,15 +69,19 @@ public enum MemberType {
private final String urlPart;
private final String detailsRel;
+ private final String name;
+ private final String jsProp;
- private MemberType(String urlPart, String detailsRel, Map<String, MutatorSpec> mutators) {
+ private MemberType(String urlPart, String jsProp, String detailsRel, Map<String, MutatorSpec> mutators) {
this.urlPart = urlPart;
+ this.jsProp = jsProp;
this.detailsRel = detailsRel;
this.mutators = mutators;
+ name = Enums.enumToCamelCase(this);
}
- public String key() {
- return name().toLowerCase() + "Id";
+ public String getJsProp() {
+ return jsProp;
}
public String urlPart() {
@@ -90,31 +95,40 @@ public enum MemberType {
public abstract ObjectSpecification specFor(ObjectMember objectMember);
public boolean isProperty() {
- return this == MemberType.PROPERTY;
+ return this == MemberType.OBJECT_PROPERTY;
}
public boolean isCollection() {
- return this == MemberType.COLLECTION;
+ return this == MemberType.OBJECT_COLLECTION;
}
public boolean isAction() {
- return this == MemberType.ACTION;
+ return this == MemberType.OBJECT_ACTION;
}
- public static MemberType lookup(final String memberType) {
- return valueOf(memberType.toUpperCase());
+ public static MemberType lookup(final String memberTypeName) {
+ for (MemberType memberType : values()) {
+ if(memberType.getName().equals(memberTypeName)) {
+ return memberType;
+ }
+ }
+ return null;
}
public static MemberType of(ObjectMember objectMember) {
return objectMember.isAction()?
- ACTION:
+ OBJECT_ACTION:
objectMember.isOneToOneAssociation()?
- PROPERTY:
- COLLECTION;
+ OBJECT_PROPERTY:
+ OBJECT_COLLECTION;
}
public String getDetailsRel() {
return detailsRel;
}
+ public String getName() {
+ return name;
+ }
+
}
Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java (from r1166100, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java&r1=1166100&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -24,48 +24,54 @@ import org.apache.isis.core.metamodel.sp
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.DomainTypeRepBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypeActionRepBuilder;
import com.google.common.collect.Lists;
-public class ActionRepBuilder extends AbstractMemberRepBuilder<ActionRepBuilder, ObjectAction> {
+public class ObjectActionRepBuilder extends AbstractObjectMemberRepBuilder<ObjectActionRepBuilder, ObjectAction> {
- public static ActionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
- return new ActionRepBuilder(resourceContext, objectAdapter, objectAction);
+ public static ObjectActionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
+ return new ObjectActionRepBuilder(resourceContext, objectAdapter, objectAction);
}
- protected ActionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
- super(resourceContext, objectAdapter, MemberType.ACTION, objectAction);
+ protected ObjectActionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
+ super(resourceContext, objectAdapter, MemberType.OBJECT_ACTION, objectAction);
putId();
putMemberType();
- putNumParameters();
putDisabledReasonIfDisabled();
withMutatorsIfEnabled();
- putExtensionsForAction();
- putLinksForAction(resourceContext);
- }
-
- private void putLinksForAction(ResourceContext resourceContext) {
+ JsonRepresentation extensions = JsonRepresentation.newMap();
+ putExtensionsIsisProprietary(extensions);
+
JsonRepresentation links = JsonRepresentation.newArray();
- if(objectMember.isContributed()) {
- ObjectAdapter serviceAdapter = contributingServiceAdapter();
- JsonRepresentation contributedByLink = DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "object", serviceAdapter, getOidStringifier()).build();
- links.put("contributedBy", contributedByLink);
- }
-
- withLinks(links);
+ addLinksFormalDomainModel(links, resourceContext);
+ addLinksIsisProprietary(links, resourceContext);
}
- private void putExtensionsForAction() {
- JsonRepresentation extensions = JsonRepresentation.newMap();
- extensions.put("actionType", objectMember.getType());
+
+ private void putExtensionsIsisProprietary(JsonRepresentation extensions) {
+ extensions.mapPut("actionType", objectMember.getType());
withExtensions(extensions );
}
- protected void putNumParameters() {
- representation.put("numParameters", objectMember.getParameterCount());
+ private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
+ links.arrayAdd(TypeActionRepBuilder.newLinkToBuilder(resourceContext, "typeAction", objectAdapter.getSpecification(), objectMember).build());
+ }
+
+ private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
+ if(objectMember.isContributed()) {
+ ObjectAdapter serviceAdapter = contributingServiceAdapter();
+ JsonRepresentation contributedByLink = DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "contributedBy", serviceAdapter, getOidStringifier()).build();
+ links.arrayAdd(contributedByLink);
+ }
+
+ links.arrayAdd(DomainTypeRepBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).build());
+
+ withLinks(links);
}
public JsonRepresentation build() {
@@ -84,28 +90,28 @@ public class ActionRepBuilder extends Ab
throw new IllegalStateException("Unable to locate contributing service");
}
- public ActionRepBuilder withParameterDetails() {
+ public ObjectActionRepBuilder withParameterDetails() {
List<Object> parameters = Lists.newArrayList();
for (int i=0; i< objectMember.getParameterCount(); i++) {
ObjectActionParameter param = objectMember.getParameters().get(i);
parameters.add(paramDetails(param));
}
- representation.put("parameters", parameters);
+ representation.mapPut("parameters", parameters);
return this;
}
private Object paramDetails(ObjectActionParameter param) {
final JsonRepresentation paramRep = JsonRepresentation.newMap();
- paramRep.put("name", param.getName());
- paramRep.put("num", param.getNumber());
- paramRep.put("description", param.getDescription());
+ paramRep.mapPut("name", param.getName());
+ paramRep.mapPut("num", param.getNumber());
+ paramRep.mapPut("description", param.getDescription());
Object paramChoices = choicesFor(param);
if(paramChoices != null) {
- paramRep.put("choices", paramChoices);
+ paramRep.mapPut("choices", paramChoices);
}
Object paramDefault = defaultFor(param);
if(paramDefault != null) {
- paramRep.put("default", paramDefault);
+ paramRep.mapPut("default", paramDefault);
}
return paramRep;
}
@@ -136,7 +142,7 @@ public class ActionRepBuilder extends Ab
protected JsonRepresentation appendMutatorArgs(MutatorSpec mutatorSpec) {
JsonRepresentation argList = JsonRepresentation.newArray();
for(int i=0; i<objectMember.getParameterCount(); i++) {
- argList.add(argValueFor(i));
+ argList.arrayAdd(argValueFor(i));
}
return argList;
}
Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java (from r1166100, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java&r1=1166100&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -28,14 +28,14 @@ import org.apache.isis.viewer.json.viewe
import com.google.common.collect.Lists;
-public class CollectionRepBuilder extends AbstractMemberRepBuilder<CollectionRepBuilder, OneToManyAssociation> {
+public class ObjectCollectionRepBuilder extends AbstractObjectMemberRepBuilder<ObjectCollectionRepBuilder, OneToManyAssociation> {
- public static CollectionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
- return new CollectionRepBuilder(resourceContext, objectAdapter, otma);
+ public static ObjectCollectionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
+ return new ObjectCollectionRepBuilder(resourceContext, objectAdapter, otma);
}
- public CollectionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
- super(resourceContext, objectAdapter, MemberType.COLLECTION, otma);
+ public ObjectCollectionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
+ super(resourceContext, objectAdapter, MemberType.OBJECT_COLLECTION, otma);
putId();
putMemberType();
Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java (from r1166100, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java&r1=1166100&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -26,14 +26,14 @@ import org.apache.isis.viewer.json.viewe
import com.google.common.collect.Lists;
-public class PropertyRepBuilder extends AbstractMemberRepBuilder<PropertyRepBuilder, OneToOneAssociation> {
+public class ObjectPropertyRepBuilder extends AbstractObjectMemberRepBuilder<ObjectPropertyRepBuilder, OneToOneAssociation> {
- public static PropertyRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
- return new PropertyRepBuilder(resourceContext, objectAdapter, otoa);
+ public static ObjectPropertyRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+ return new ObjectPropertyRepBuilder(resourceContext, objectAdapter, otoa);
}
- public PropertyRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
- super(resourceContext, objectAdapter, MemberType.PROPERTY, otoa);
+ public ObjectPropertyRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+ super(resourceContext, objectAdapter, MemberType.OBJECT_PROPERTY, otoa);
putId();
putMemberType();
@@ -57,10 +57,10 @@ public class PropertyRepBuilder extends
return DomainObjectRepBuilder.valueOrRef(resourceContext, valueAdapter, objectMember.getSpecification(), getOidStringifier(), getLocalization());
}
- public PropertyRepBuilder withChoices() {
+ public ObjectPropertyRepBuilder withChoices() {
Object propertyChoices = propertyChoices();
if(propertyChoices != null) {
- representation.put("choices", propertyChoices);
+ representation.mapPut("choices", propertyChoices);
}
return this;
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java Fri Sep 9 09:59:37 2011
@@ -29,6 +29,7 @@ import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.services.ServiceUtil;
@@ -77,23 +78,30 @@ public class DomainServiceResourceServer
@Override
public Response service(@PathParam("serviceId") String serviceId) {
init();
+
+ // TODO: figure out how to do exception handling generically
final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
if(serviceAdapter == null) {
Object[] args = { serviceId };
- return responseOf(HttpStatusCode.NOT_FOUND, "Could not locate service '%s'", args);
+ return Response
+ .status(HttpStatusCode.NOT_FOUND.getJaxrsStatusType())
+ .header(RestfulResponse.Header.WARNING.getName(), String.format("Could not locate service '%s'", args))
+ .type(MediaType.APPLICATION_JSON_TYPE)
+ .build();
}
ResourceContext resourceContext = getResourceContext();
RepresentationBuilder<?> builder =
DomainServiceRepBuilder.newBuilder(resourceContext)
.withAdapter(serviceAdapter);
+
return Response.ok()
.entity(jsonFrom(builder))
.cacheControl(CACHE_NONE)
.header(RestfulResponse.Header.X_REPRESENTATION_TYPE.getName(), RepresentationType.DOMAIN_OBJECT.getName())
- .type(MediaType.APPLICATION_JSON_TYPE).build();
-
+ .type(MediaType.APPLICATION_JSON_TYPE)
+ .build();
}
Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java?rev=1167064&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -0,0 +1,39 @@
+/**
+ * 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.viewer.resources.domaintypes;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
+
+public abstract class AbstractTypeMemberRepBuilder<R extends RepresentationBuilder<R>, T extends ObjectMember> extends RepresentationBuilder<R> {
+
+ protected final ObjectSpecification objectSpecification;
+ protected final MemberType memberType;
+ protected final T objectMember;
+
+ public AbstractTypeMemberRepBuilder(ResourceContext resourceContext, ObjectSpecification objectSpecification, MemberType memberType, T objectMember) {
+ super(resourceContext);
+ this.objectSpecification = objectSpecification;
+ this.memberType = memberType;
+ this.objectMember = objectMember;
+ }
+
+
+}
\ No newline at end of file
Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java?rev=1167064&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -0,0 +1,47 @@
+/**
+ * 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.viewer.resources.domaintypes;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
+
+public class DomainTypeRepBuilder extends RepresentationBuilder<DomainTypeRepBuilder> {
+
+ public static DomainTypeRepBuilder newBuilder(ResourceContext representationContext) {
+ return new DomainTypeRepBuilder(representationContext);
+ }
+
+ public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpec) {
+ String typeFullName = objectSpec.getFullIdentifier();
+ String url = "domainTypes/" + typeFullName;
+ return LinkBuilder.newBuilder(resourceContext, rel, url);
+ }
+
+ public DomainTypeRepBuilder(ResourceContext resourceContext) {
+ super(resourceContext);
+ }
+
+
+ public JsonRepresentation build() {
+ return representation;
+ }
+
+
+}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java Fri Sep 9 09:59:37 2011
@@ -45,8 +45,8 @@ public class DomainTypeResourceServersid
init();
JsonRepresentation representation = JsonRepresentation.newMap();
- representation.put("representationType", LinkBuilder.newBuilder(getResourceContext(), "representationType", "representationTypes/representationType").build());
- representation.put("self", LinkBuilder.newBuilder(getResourceContext(), "self", "representationType/" + representationTypeName).build());
+ representation.mapPut("representationType", LinkBuilder.newBuilder(getResourceContext(), "representationType", "representationTypes/representationType").build());
+ representation.mapPut("self", LinkBuilder.newBuilder(getResourceContext(), "self", "representationType/" + representationTypeName).build());
return responseOfOk(jsonFor(representation));
}
Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java?rev=1167064&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -0,0 +1,52 @@
+/**
+ * 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.viewer.resources.domaintypes;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.AbstractObjectMemberRepBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.ObjectActionRepBuilder;
+
+public class TypeActionRepBuilder extends AbstractTypeMemberRepBuilder<TypeActionRepBuilder, ObjectAction> {
+
+ public static TypeActionRepBuilder newBuilder(ResourceContext representationContext, ObjectSpecification objectSpecification, ObjectAction objectAction) {
+ return new TypeActionRepBuilder(representationContext, objectSpecification, objectAction);
+ }
+
+ public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, ObjectAction objectAction) {
+ String typeFullName = objectSpecification.getFullIdentifier();
+ String actionId = objectAction.getId();
+ String url = "domainTypes/" + typeFullName + "/actions/" + actionId;
+ return LinkBuilder.newBuilder(resourceContext, rel, url);
+ }
+
+ public TypeActionRepBuilder(ResourceContext resourceContext, ObjectSpecification objectSpecification, ObjectAction objectAction) {
+ super(resourceContext, objectSpecification, MemberType.OBJECT_ACTION, objectAction);
+ }
+
+
+ public JsonRepresentation build() {
+ return representation;
+ }
+
+
+}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java Fri Sep 9 09:59:37 2011
@@ -18,15 +18,21 @@
*/
package org.apache.isis.viewer.json.viewer.resources.home;
+import java.util.List;
+
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
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.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulRequest;
import org.apache.isis.viewer.json.applib.RestfulResponse;
import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
+import org.apache.isis.viewer.json.viewer.JsonApplicationException;
import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
@@ -42,15 +48,17 @@ public class HomePageResourceServerside
public Response resources() {
init();
+ fakeRuntimeExceptionIfXFail();
+
JsonRepresentation representation = JsonRepresentation.newMap();
- representation.put("self", LinkBuilder.newBuilder(getResourceContext(), "self", "").build());
- representation.put("user", LinkBuilder.newBuilder(getResourceContext(), "user", "user").build());
- representation.put("services", LinkBuilder.newBuilder(getResourceContext(), "services", "services").build());
- representation.put("capabilities", LinkBuilder.newBuilder(getResourceContext(), "capabilities", "capabilities").build());
+ representation.mapPut("self", LinkBuilder.newBuilder(getResourceContext(), "self", "").build());
+ representation.mapPut("user", LinkBuilder.newBuilder(getResourceContext(), "user", "user").build());
+ representation.mapPut("services", LinkBuilder.newBuilder(getResourceContext(), "services", "services").build());
+ representation.mapPut("capabilities", LinkBuilder.newBuilder(getResourceContext(), "capabilities", "capabilities").build());
- representation.put("links", JsonRepresentation.newArray());
- representation.put("extensions", JsonRepresentation.newMap());
+ representation.mapPut("links", JsonRepresentation.newArray());
+ representation.mapPut("extensions", JsonRepresentation.newMap());
return Response.ok()
.entity(jsonFor(representation))
@@ -59,5 +67,12 @@ public class HomePageResourceServerside
.type(MediaType.APPLICATION_JSON_TYPE).build();
}
+ private void fakeRuntimeExceptionIfXFail() {
+ HttpHeaders httpHeaders = getResourceContext().getHttpHeaders();
+ if(httpHeaders.getRequestHeader("X-Fail") != null) {
+ throw JsonApplicationException.create(HttpStatusCode.METHOD_FAILURE);
+ }
+ }
+
}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.java Fri Sep 9 09:59:37 2011
@@ -33,12 +33,12 @@ public class UserRepBuilder extends Repr
}
public UserRepBuilder withAuthenticationSession(AuthenticationSession authenticationSession) {
- representation.put("username", authenticationSession.getUserName());
+ representation.mapPut("username", authenticationSession.getUserName());
JsonRepresentation roles = JsonRepresentation.newArray();
for (String role : authenticationSession.getRoles()) {
- roles.add(role);
+ roles.arrayAdd(role);
}
- representation.put("roles", roles);
+ representation.mapPut("roles", roles);
return this;
}
Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/JsonExceptionMapperTest.java (from r1165948, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstractTest_jsonFor.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/JsonExceptionMapperTest.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/JsonExceptionMapperTest.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstractTest_jsonFor.java&r1=1165948&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstractTest_jsonFor.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/JsonExceptionMapperTest.java Fri Sep 9 09:59:37 2011
@@ -1,26 +1,50 @@
package org.apache.isis.viewer.json.viewer.resources;
+import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.Matchers.greaterThan;
import static org.junit.Assert.assertThat;
+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.RestfulResponse;
import org.apache.isis.viewer.json.applib.util.JsonMapper;
+import org.apache.isis.viewer.json.viewer.JsonApplicationException;
+import org.apache.isis.viewer.json.viewer.JsonApplicationExceptionMapper;
+import org.junit.Before;
import org.junit.Test;
-public class ResourceAbstractTest_jsonFor {
+public class JsonExceptionMapperTest {
+
+ private JsonApplicationExceptionMapper exceptionMapper;
+ @Before
+ public void setUp() throws Exception {
+ exceptionMapper = new JsonApplicationExceptionMapper();
+ }
+
@Test
public void simpleNoMessage() throws Exception {
+
// given
- Exception ex = new Exception();
+ HttpStatusCode status = HttpStatusCode.BAD_REQUEST;
+ JsonApplicationException ex = JsonApplicationException.create(status);
// when
- String jsonFor = ResourceAbstract.jsonFor(ex);
- assertThat(jsonFor, is(not(nullValue())));
- JsonRepresentation jsonRepr = JsonMapper.instance().read(jsonFor, JsonRepresentation.class);
+ Response response = exceptionMapper.toResponse(ex);
+
+ // then
+ assertThat(HttpStatusCode.lookup(response.getStatus()), is(status));
+ assertThat(response.getMetadata().get("Warning"), is(nullValue()));
+
+ // and then
+ String entity = (String) response.getEntity();
+ assertThat(entity, is(not(nullValue())));
+ JsonRepresentation jsonRepr = JsonMapper.instance().read(entity, JsonRepresentation.class);
// then
assertThat(jsonRepr.getString("message"), is(nullValue()));
@@ -30,29 +54,37 @@ public class ResourceAbstractTest_jsonFo
}
@Test
- public void withMessage() throws Exception {
- // given
- Exception ex = new Exception("foobar");
+ public void entity_withMessage() throws Exception {
+
+ // givens
+ JsonApplicationException ex = JsonApplicationException.create(HttpStatusCode.BAD_REQUEST, "foobar");
// when
- String jsonFor = ResourceAbstract.jsonFor(ex);
- assertThat(jsonFor, is(not(nullValue())));
- JsonRepresentation jsonRepr = JsonMapper.instance().read(jsonFor, JsonRepresentation.class);
+ Response response = exceptionMapper.toResponse(ex);
+
+ // then
+ assertThat((String)response.getMetadata().get("Warning").get(0), is(ex.getMessage()));
+
+ // and then
+ String entity = (String) response.getEntity();
+ assertThat(entity, is(not(nullValue())));
+ JsonRepresentation jsonRepr = JsonMapper.instance().read(entity, JsonRepresentation.class);
// then
assertThat(jsonRepr.getString("message"), is(ex.getMessage()));
}
@Test
- public void withCause() throws Exception {
+ public void entity_withCause() throws Exception {
// given
Exception cause = new Exception("barfoo");
- Exception ex = new Exception("foobar", cause);
+ JsonApplicationException ex = JsonApplicationException.create(HttpStatusCode.BAD_REQUEST, "foobar", cause);
// when
- String jsonFor = ResourceAbstract.jsonFor(ex);
- assertThat(jsonFor, is(not(nullValue())));
- JsonRepresentation jsonRepr = JsonMapper.instance().read(jsonFor, JsonRepresentation.class);
+ Response response = exceptionMapper.toResponse(ex);
+ String entity = (String) response.getEntity();
+ assertThat(entity, is(not(nullValue())));
+ JsonRepresentation jsonRepr = JsonMapper.instance().read(entity, JsonRepresentation.class);
// then
assertThat(jsonRepr.getString("message"), is(ex.getMessage()));
Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/RepresentationTypeTest.java (from r1165948, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/RepresentationTypeTest.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/RepresentationTypeTest.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/RepresentationTypeTest.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/RepresentationTypeTest.java&r1=1165948&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/RepresentationTypeTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/RepresentationTypeTest.java Fri Sep 9 09:59:37 2011
@@ -1,4 +1,4 @@
-package org.apache.isis.viewer.json.viewer.util;
+package org.apache.isis.viewer.json.viewer.resources;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/UrlParserUtilsTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/UrlParserUtilsTest.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/UrlParserUtilsTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/UrlParserUtilsTest.java Fri Sep 9 09:59:37 2011
@@ -10,7 +10,7 @@ public class UrlParserUtilsTest {
@Test
public void test() throws Exception {
JsonRepresentation link = JsonRepresentation.newMap();
- link.put("href", "http://localhost/objects/OID:1");
+ link.mapPut("href", "http://localhost/objects/OID:1");
String oidFromHref = UrlParserUtils.oidFromHref(link);
assertEquals("OID:1", oidFromHref);
}