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/13 08:59:12 UTC
svn commit: r1170062 [2/2] - in /incubator/isis/trunk/framework/viewer/json:
json-tck/src/test/java/org/apache/isis/viewer/json/tck/
json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/
json-viewer/src/main/java/org/apache/isis/viewer/json/vie...
Added: 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=1170062&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java Tue Sep 13 06:59:11 2011
@@ -0,0 +1,58 @@
+/**
+ * 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.domainobjects;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.LinkToBuilder;
+import org.apache.isis.viewer.json.viewer.representations.AbstractRepresentationBuilder;
+
+public class MemberSelfRepBuilder extends AbstractRepresentationBuilder<MemberSelfRepBuilder> {
+
+ public static MemberSelfRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, MemberType memberType, ObjectMember objectMember) {
+ return new MemberSelfRepBuilder(resourceContext, objectAdapter, memberType, objectMember);
+ }
+
+ private final ObjectAdapter objectAdapter;
+ private final MemberType memberType;
+ private final ObjectMember objectMember;
+
+ public MemberSelfRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, MemberType memberType, ObjectMember objectMember) {
+ super(resourceContext);
+ this.objectAdapter = objectAdapter;
+ this.memberType = memberType;
+ this.objectMember = objectMember;
+ }
+
+ public JsonRepresentation build() {
+ representation.mapPut("link", memberLinkRep());
+ representation.mapPut("object", domainObjectLinkRep());
+ return representation;
+ }
+
+ private JsonRepresentation memberLinkRep() {
+ String url = AbstractObjectMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
+ return LinkToBuilder.newBuilder(resourceContext, "member", url).build();
+ }
+
+ private JsonRepresentation domainObjectLinkRep() {
+ return DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "object", objectAdapter, getOidStringifier()).build();
+ }
+
+}
\ 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/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=1170062&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java Tue Sep 13 06:59:11 2011
@@ -0,0 +1,134 @@
+/**
+ * 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.domainobjects;
+
+import java.util.Map;
+
+import org.apache.isis.core.metamodel.facets.actions.invoke.ActionInvocationFacet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
+import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacet;
+import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.progmodel.facets.actions.validate.ActionValidationFacet;
+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 {
+
+ 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)
+ )) {
+ @Override
+ public ObjectSpecification specFor(ObjectMember objectMember) {
+ return objectMember.getSpecification();
+ }
+ },
+ 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)
+ )) {
+ @Override
+ public ObjectSpecification specFor(ObjectMember objectMember) {
+ return objectMember.getSpecification();
+ }
+ },
+ OBJECT_ACTION("actions/", "actionId", "actionDetails", ImmutableMap.of(
+ "invoke", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.POST, BodyArgs.MANY, "invoke")
+ )) {
+ @Override
+ public ObjectSpecification specFor(ObjectMember objectMember) {
+ ObjectAction objectAction = (ObjectAction) objectMember;
+ return objectAction.getReturnType();
+ }
+ };
+
+ private final Map<String, MutatorSpec> mutators;
+
+ private final String urlPart;
+ private final String detailsRel;
+ private final String name;
+ private final String jsProp;
+
+ 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 getJsProp() {
+ return jsProp;
+ }
+
+ public String urlPart() {
+ return urlPart;
+ }
+
+ public Map<String, MutatorSpec> getMutators() {
+ return mutators;
+ }
+
+ public abstract ObjectSpecification specFor(ObjectMember objectMember);
+
+ public boolean isProperty() {
+ return this == MemberType.OBJECT_PROPERTY;
+ }
+
+ public boolean isCollection() {
+ return this == MemberType.OBJECT_COLLECTION;
+ }
+
+ public boolean isAction() {
+ return this == MemberType.OBJECT_ACTION;
+ }
+
+ 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()?
+ OBJECT_ACTION:
+ objectMember.isOneToOneAssociation()?
+ OBJECT_PROPERTY:
+ OBJECT_COLLECTION;
+ }
+
+ public String getDetailsRel() {
+ return detailsRel;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+}
Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.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/MutatorSpec.java?rev=1170062&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java Tue Sep 13 06:59:11 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.domainobjects;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.viewer.json.viewer.representations.HttpMethod;
+
+public class MutatorSpec {
+
+
+ public static MutatorSpec of(Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs argSpec) {
+ return of(validationFacetType, mutatorFacetType, httpMethod, argSpec, null);
+ }
+
+ public static MutatorSpec of(Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs argSpec, String suffix) {
+ return new MutatorSpec(validationFacetType, mutatorFacetType, httpMethod, argSpec, suffix);
+ }
+
+ public final Class<? extends Facet> validationFacetType;
+ public final Class<? extends Facet> mutatorFacetType;
+ public final HttpMethod httpMethod;
+ public final String suffix;
+ public final BodyArgs arguments;
+
+ private MutatorSpec(Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs bodyArgs, String suffix) {
+ this.validationFacetType = validationFacetType;
+ this.mutatorFacetType = mutatorFacetType;
+ this.httpMethod = httpMethod;
+ this.arguments = bodyArgs;
+ this.suffix = suffix;
+ }
+
+}
\ 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/domainobjects/ObjectActionRepBuilder.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?rev=1170062&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java Tue Sep 13 06:59:11 2011
@@ -0,0 +1,160 @@
+/**
+ * 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.domainobjects;
+
+import java.util.List;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+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 ObjectActionRepBuilder extends AbstractObjectMemberRepBuilder<ObjectActionRepBuilder, ObjectAction> {
+
+ public static ObjectActionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
+ return new ObjectActionRepBuilder(resourceContext, objectAdapter, objectAction);
+ }
+
+ protected ObjectActionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
+ super(resourceContext, objectAdapter, MemberType.OBJECT_ACTION, objectAction);
+
+ putId();
+ putMemberType();
+
+ putDisabledReasonIfDisabled();
+ withMutatorsIfEnabled();
+
+ JsonRepresentation extensions = JsonRepresentation.newMap();
+ putExtensionsIsisProprietary(extensions);
+
+ JsonRepresentation links = JsonRepresentation.newArray();
+ addLinksFormalDomainModel(links, resourceContext);
+ addLinksIsisProprietary(links, resourceContext);
+ }
+
+
+ private void putExtensionsIsisProprietary(JsonRepresentation extensions) {
+ extensions.mapPut("actionType", objectMember.getType());
+ withExtensions(extensions );
+ }
+
+ 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() {
+ return representation;
+ }
+
+ private ObjectAdapter contributingServiceAdapter() {
+ ObjectSpecification serviceType = objectMember.getOnType();
+ List<ObjectAdapter> serviceAdapters = getPersistenceSession().getServices();
+ for (ObjectAdapter serviceAdapter : serviceAdapters) {
+ if(serviceAdapter.getSpecification() == serviceType) {
+ return serviceAdapter;
+ }
+ }
+ // fail fast
+ throw new IllegalStateException("Unable to locate contributing service");
+ }
+
+ 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.mapPut("parameters", parameters);
+ return this;
+ }
+
+ private Object paramDetails(ObjectActionParameter param) {
+ final JsonRepresentation paramRep = JsonRepresentation.newMap();
+ paramRep.mapPut("name", param.getName());
+ paramRep.mapPut("num", param.getNumber());
+ paramRep.mapPut("description", param.getDescription());
+ Object paramChoices = choicesFor(param);
+ if(paramChoices != null) {
+ paramRep.mapPut("choices", paramChoices);
+ }
+ Object paramDefault = defaultFor(param);
+ if(paramDefault != null) {
+ paramRep.mapPut("default", paramDefault);
+ }
+ return paramRep;
+ }
+
+ private Object choicesFor(ObjectActionParameter param) {
+ ObjectAdapter[] choiceAdapters = param.getChoices(objectAdapter);
+ if(choiceAdapters == null || choiceAdapters.length == 0) {
+ return null;
+ }
+ List<Object> list = Lists.newArrayList();
+ for (final ObjectAdapter choiceAdapter : choiceAdapters) {
+ ObjectSpecification objectSpec = param.getSpecification();
+ list.add(DomainObjectRepBuilder.valueOrRef(resourceContext, choiceAdapter, objectSpec, getOidStringifier(), getLocalization()));
+ }
+ return list;
+ }
+
+ private Object defaultFor(ObjectActionParameter param) {
+ ObjectAdapter defaultAdapter = param.getDefault(objectAdapter);
+ if(defaultAdapter == null) {
+ return null;
+ }
+ ObjectSpecification objectSpec = param.getSpecification();
+ return DomainObjectRepBuilder.valueOrRef(resourceContext, defaultAdapter, objectSpec, getOidStringifier(), getLocalization());
+ }
+
+ @Override
+ protected JsonRepresentation appendMutatorArgs(MutatorSpec mutatorSpec) {
+ JsonRepresentation argList = JsonRepresentation.newArray();
+ for(int i=0; i<objectMember.getParameterCount(); i++) {
+ argList.arrayAdd(argValueFor(i));
+ }
+ return argList;
+ }
+
+ private Object argValueFor(int i) {
+ if(objectMember.isContributed()) {
+ ObjectActionParameter actionParameter = objectMember.getParameters().get(i);
+ if (actionParameter.getSpecification().isOfType(objectAdapter.getSpecification())) {
+ return DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "object", objectAdapter, getOidStringifier()).build();
+ }
+ }
+ return "{value}";
+ }
+
+}
\ 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/domainobjects/ObjectAdapterLinkToBuilder.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/ObjectAdapterLinkToBuilder.java?rev=1170062&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAdapterLinkToBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAdapterLinkToBuilder.java Tue Sep 13 06:59:11 2011
@@ -0,0 +1,13 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.RepBuilder;
+
+public interface ObjectAdapterLinkToBuilder extends RepBuilder {
+
+ ObjectAdapterLinkToBuilder usingResourceContext(ResourceContext resourceContext);
+
+ ObjectAdapterLinkToBuilder with(ObjectAdapter objectAdapter);
+
+}
Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.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?rev=1170062&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java Tue Sep 13 06:59:11 2011
@@ -0,0 +1,70 @@
+/**
+ * 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.domainobjects;
+
+import java.util.List;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetUtils;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.LinkToBuilder;
+
+import com.google.common.collect.Lists;
+
+public class ObjectCollectionRepBuilder extends AbstractObjectMemberRepBuilder<ObjectCollectionRepBuilder, OneToManyAssociation> {
+
+ public static ObjectCollectionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
+ return new ObjectCollectionRepBuilder(resourceContext, objectAdapter, otma);
+ }
+
+ public ObjectCollectionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
+ super(resourceContext, objectAdapter, MemberType.OBJECT_COLLECTION, otma);
+
+ putId();
+ putMemberType();
+ putDisabledReasonIfDisabled();
+
+ withLinks();
+ withExtensions();
+ }
+
+ public JsonRepresentation build() {
+ return representation;
+ }
+
+ @Override
+ protected Object valueRep() {
+ ObjectAdapter valueAdapter = objectMember.get(objectAdapter);
+ if(valueAdapter == null) {
+ return null;
+ }
+ final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(valueAdapter);
+ List<JsonRepresentation> list = Lists.newArrayList();
+ for (final ObjectAdapter elementAdapter : facet.iterable(valueAdapter)) {
+
+ LinkToBuilder newBuilder = DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "object", elementAdapter, getOidStringifier());
+
+ list.add(newBuilder.build());
+ }
+
+ return list;
+ }
+
+}
\ 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/domainobjects/ObjectPropertyRepBuilder.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?rev=1170062&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java Tue Sep 13 06:59:11 2011
@@ -0,0 +1,81 @@
+/**
+ * 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.domainobjects;
+
+import java.util.List;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+
+import com.google.common.collect.Lists;
+
+public class ObjectPropertyRepBuilder extends AbstractObjectMemberRepBuilder<ObjectPropertyRepBuilder, OneToOneAssociation> {
+
+ public static ObjectPropertyRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+ return new ObjectPropertyRepBuilder(resourceContext, objectAdapter, otoa);
+ }
+
+ public ObjectPropertyRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+ super(resourceContext, objectAdapter, MemberType.OBJECT_PROPERTY, otoa);
+
+ putId();
+ putMemberType();
+ putDisabledReasonIfDisabled();
+
+ withLinks();
+ withExtensions();
+ }
+
+ public JsonRepresentation build() {
+ return representation;
+ }
+
+
+ @Override
+ protected Object valueRep() {
+ ObjectAdapter valueAdapter = objectMember.get(objectAdapter);
+ if(valueAdapter == null) {
+ return null;
+ }
+ return DomainObjectRepBuilder.valueOrRef(resourceContext, valueAdapter, objectMember.getSpecification(), getOidStringifier(), getLocalization());
+ }
+
+ public ObjectPropertyRepBuilder withChoices() {
+ Object propertyChoices = propertyChoices();
+ if(propertyChoices != null) {
+ representation.mapPut("choices", propertyChoices);
+ }
+ return this;
+ }
+
+ private Object propertyChoices() {
+ ObjectAdapter[] choiceAdapters = objectMember.getChoices(objectAdapter);
+ if(choiceAdapters == null || choiceAdapters.length == 0) {
+ return null;
+ }
+ List<Object> list = Lists.newArrayList();
+ for (final ObjectAdapter choiceAdapter : choiceAdapters) {
+ ObjectSpecification objectSpec = objectMember.getSpecification();
+ list.add(DomainObjectRepBuilder.valueOrRef(resourceContext, choiceAdapter, objectSpec, getOidStringifier(), getLocalization()));
+ }
+ return list;
+ }
+
+}
\ 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/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=1170062&r1=1170061&r2=1170062&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java Tue Sep 13 06:59:11 2011
@@ -19,10 +19,10 @@ package org.apache.isis.viewer.json.view
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.representations.AbstractRepresentationBuilder;
import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
-public abstract class AbstractTypeMemberRepBuilder<R extends RepresentationBuilder<R>, T extends ObjectMember> extends RepresentationBuilder<R> {
+public abstract class AbstractTypeMemberRepBuilder<R extends AbstractRepresentationBuilder<R>, T extends ObjectMember> extends AbstractRepresentationBuilder<R> {
protected final ObjectSpecification objectSpecification;
protected final MemberType memberType;
Modified: 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=1170062&r1=1170061&r2=1170062&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java Tue Sep 13 06:59:11 2011
@@ -19,19 +19,19 @@ package org.apache.isis.viewer.json.view
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;
+import org.apache.isis.viewer.json.viewer.representations.LinkToBuilder;
+import org.apache.isis.viewer.json.viewer.representations.AbstractRepresentationBuilder;
-public class DomainTypeRepBuilder extends RepresentationBuilder<DomainTypeRepBuilder> {
+public class DomainTypeRepBuilder extends AbstractRepresentationBuilder<DomainTypeRepBuilder> {
public static DomainTypeRepBuilder newBuilder(ResourceContext representationContext) {
return new DomainTypeRepBuilder(representationContext);
}
- public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpec) {
+ public static LinkToBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpec) {
String typeFullName = objectSpec.getFullIdentifier();
String url = "domainTypes/" + typeFullName;
- return LinkBuilder.newBuilder(resourceContext, rel, url);
+ return LinkToBuilder.newBuilder(resourceContext, rel, url);
}
public DomainTypeRepBuilder(ResourceContext resourceContext) {
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=1170062&r1=1170061&r2=1170062&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 Tue Sep 13 06:59:11 2011
@@ -27,7 +27,7 @@ import javax.ws.rs.core.Response;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
import org.apache.isis.viewer.json.applib.domaintypes.DomainTypeResource;
-import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.LinkToBuilder;
import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
/**
@@ -45,8 +45,8 @@ public class DomainTypeResourceServersid
init();
JsonRepresentation representation = JsonRepresentation.newMap();
- representation.mapPut("representationType", LinkBuilder.newBuilder(getResourceContext(), "representationType", "representationTypes/representationType").build());
- representation.mapPut("self", LinkBuilder.newBuilder(getResourceContext(), "self", "representationType/" + representationTypeName).build());
+ representation.mapPut("representationType", LinkToBuilder.newBuilder(getResourceContext(), "representationType", "representationTypes/representationType").build());
+ representation.mapPut("self", LinkToBuilder.newBuilder(getResourceContext(), "self", "representationType/" + representationTypeName).build());
return responseOfOk(jsonFor(representation));
}
Modified: 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=1170062&r1=1170061&r2=1170062&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java Tue Sep 13 06:59:11 2011
@@ -20,7 +20,7 @@ import org.apache.isis.core.metamodel.sp
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.LinkToBuilder;
import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
public class TypeActionRepBuilder extends AbstractTypeMemberRepBuilder<TypeActionRepBuilder, ObjectAction> {
@@ -29,11 +29,11 @@ public class TypeActionRepBuilder extend
return new TypeActionRepBuilder(representationContext, objectSpecification, objectAction);
}
- public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, ObjectAction objectAction) {
+ public static LinkToBuilder 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);
+ return LinkToBuilder.newBuilder(resourceContext, rel, url);
}
public TypeActionRepBuilder(ResourceContext resourceContext, ObjectSpecification objectSpecification, ObjectAction objectAction) {
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=1170062&r1=1170061&r2=1170062&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 Tue Sep 13 06:59:11 2011
@@ -30,7 +30,7 @@ import org.apache.isis.viewer.json.appli
import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
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.representations.LinkToBuilder;
import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
/**
@@ -49,10 +49,10 @@ public class HomePageResourceServerside
JsonRepresentation representation = JsonRepresentation.newMap();
- 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.mapPut("self", LinkToBuilder.newBuilder(getResourceContext(), "self", "").build());
+ representation.mapPut("user", LinkToBuilder.newBuilder(getResourceContext(), "user", "user").build());
+ representation.mapPut("services", LinkToBuilder.newBuilder(getResourceContext(), "services", "services").build());
+ representation.mapPut("capabilities", LinkToBuilder.newBuilder(getResourceContext(), "capabilities", "capabilities").build());
representation.mapPut("links", JsonRepresentation.newArray());
representation.mapPut("extensions", JsonRepresentation.newMap());
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=1170062&r1=1170061&r2=1170062&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 Tue Sep 13 06:59:11 2011
@@ -19,9 +19,9 @@ package org.apache.isis.viewer.json.view
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.viewer.json.applib.JsonRepresentation;
import org.apache.isis.viewer.json.viewer.ResourceContext;
-import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
+import org.apache.isis.viewer.json.viewer.representations.AbstractRepresentationBuilder;
-public class UserRepBuilder extends RepresentationBuilder<UserRepBuilder> {
+public class UserRepBuilder extends AbstractRepresentationBuilder<UserRepBuilder> {
public static UserRepBuilder newBuilder(ResourceContext resourceContext) {
return new UserRepBuilder(resourceContext);