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 2013/02/08 14:16:19 UTC
[12/24] ISIS-323: lots more refactoring of RO
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/DomainServiceResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/DomainServiceResourceServerside.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/DomainServiceResourceServerside.java
deleted file mode 100644
index 9d68fb2..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/DomainServiceResourceServerside.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import java.io.InputStream;
-import java.util.List;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
-import org.apache.isis.viewer.restfulobjects.domainobjects.DomainServiceResource;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactoryRegistry;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.ResourceAbstract;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domainobjects.DomainResourceHelper.MemberMode;
-
-@Path("/services")
-public class DomainServiceResourceServerside extends ResourceAbstract implements DomainServiceResource {
-
- @Override
- @GET
- @Path("/")
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_ERROR })
- public Response services() {
- final RepresentationType representationType = RepresentationType.LIST;
- init(representationType, Where.STANDALONE_TABLES);
-
- final List<ObjectAdapter> serviceAdapters = getResourceContext().getServiceAdapters();
-
- final RendererFactory factory = RendererFactoryRegistry.instance.find(representationType);
-
- final ListReprRenderer renderer = (ListReprRenderer) factory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
- renderer.usingLinkToBuilder(new DomainServiceLinkTo()).withSelf("services").with(serviceAdapters);
-
- return responseOfOk(renderer, Caching.ONE_DAY).build();
- }
-
- // //////////////////////////////////////////////////////////
- // domain service
- // //////////////////////////////////////////////////////////
-
- @Override
- @GET
- @Path("/{serviceId}")
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
- public Response service(@PathParam("serviceId") final String serviceId) {
- init(RepresentationType.DOMAIN_OBJECT, Where.OBJECT_FORMS);
-
- final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
-
- final RendererFactory rendererFactory = rendererFactoryRegistry.find(RepresentationType.DOMAIN_OBJECT);
-
- final DomainObjectReprRenderer renderer = (DomainObjectReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
- renderer.usingLinkToBuilder(new DomainServiceLinkTo()).with(serviceAdapter).includesSelf();
-
- return responseOfOk(renderer, Caching.ONE_DAY).build();
- }
-
- // //////////////////////////////////////////////////////////
- // domain service property
- // //////////////////////////////////////////////////////////
-
- @Override
- @GET
- @Path("/{serviceId}/properties/{propertyId}")
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_JSON_ERROR })
- public Response propertyDetails(@PathParam("serviceId") final String serviceId, @PathParam("propertyId") final String propertyId) {
- init(RepresentationType.OBJECT_PROPERTY, Where.OBJECT_FORMS);
-
- final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
- final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), serviceAdapter).using(new DomainServiceLinkTo());
-
- return helper.propertyDetails(serviceAdapter, propertyId, MemberMode.NOT_MUTATING, Caching.ONE_DAY, getResourceContext().getWhere());
- }
-
- // //////////////////////////////////////////////////////////
- // domain service action
- // //////////////////////////////////////////////////////////
-
- @Override
- @GET
- @Path("/{serviceId}/actions/{actionId}")
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION, RestfulMediaType.APPLICATION_JSON_ERROR })
- public Response actionPrompt(@PathParam("serviceId") final String serviceId, @PathParam("actionId") final String actionId) {
- init(RepresentationType.OBJECT_ACTION, Where.OBJECT_FORMS);
-
- final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
- final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), serviceAdapter).using(new DomainServiceLinkTo());
-
- return helper.actionPrompt(actionId, getResourceContext().getWhere());
- }
-
- // //////////////////////////////////////////////////////////
- // domain service action invoke
- // //////////////////////////////////////////////////////////
-
- @Override
- @GET
- @Path("/{serviceId}/actions/{actionId}/invoke")
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
- public Response invokeActionQueryOnly(@PathParam("serviceId") final String serviceId, @PathParam("actionId") final String actionId) {
- init(RepresentationType.ACTION_RESULT, Where.STANDALONE_TABLES);
-
- final JsonRepresentation arguments = getResourceContext().getQueryStringAsJsonRepr();
-
- final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
- final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), serviceAdapter).using(new DomainServiceLinkTo());
-
- return helper.invokeActionQueryOnly(actionId, arguments, getResourceContext().getWhere());
- }
-
- @Override
- @PUT
- @Path("/{serviceId}/actions/{actionId}/invoke")
- @Consumes({ MediaType.WILDCARD })
- // to save the client having to specify a Content-Type: application/json
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
- public Response invokeActionIdempotent(@PathParam("serviceId") final String serviceId, @PathParam("actionId") final String actionId, final InputStream arguments) {
- init(RepresentationType.ACTION_RESULT, Where.STANDALONE_TABLES);
-
- final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
- final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), serviceAdapter).using(new DomainServiceLinkTo());
-
- return helper.invokeActionIdempotent(actionId, arguments, getResourceContext().getWhere());
- }
-
- @Override
- @POST
- @Path("/{serviceId}/actions/{actionId}/invoke")
- @Consumes({ MediaType.WILDCARD })
- // to save the client having to specify a Content-Type: application/json
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
- public Response invokeAction(@PathParam("serviceId") final String serviceId, @PathParam("actionId") final String actionId, final InputStream arguments) {
- init(RepresentationType.ACTION_RESULT, Where.STANDALONE_TABLES);
-
- final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
- final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), serviceAdapter).using(new DomainServiceLinkTo());
-
- return helper.invokeAction(actionId, arguments, getResourceContext().getWhere());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/InvokeKeys.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/InvokeKeys.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/InvokeKeys.java
deleted file mode 100644
index 6843c0b..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/InvokeKeys.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import java.util.EnumMap;
-
-import org.apache.isis.applib.annotation.ActionSemantics;
-
-public final class InvokeKeys {
-
- private final static EnumMap<ActionSemantics.Of, String> map = new EnumMap<ActionSemantics.Of, String>(ActionSemantics.Of.class);
- static {
- map.put(ActionSemantics.Of.SAFE, "invokeQueryOnly");
- map.put(ActionSemantics.Of.IDEMPOTENT, "invokeIdempotent");
- map.put(ActionSemantics.Of.NON_IDEMPOTENT, "invoke");
- }
-
- private InvokeKeys() {
- }
-
- public static String getKeyFor(ActionSemantics.Of actionSemantics) {
- return map.get(actionSemantics);
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/JsonValueEncoder.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/JsonValueEncoder.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/JsonValueEncoder.java
deleted file mode 100644
index 14da699..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/JsonValueEncoder.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-
-/**
- * Similar to Isis' value encoding, but with additional support for JSON
- * primitives.
- */
-public final class JsonValueEncoder {
-
- static class ExpectedStringRepresentingValueException extends IllegalArgumentException {
- private static final long serialVersionUID = 1L;
- }
-
- public ObjectAdapter asAdapter(final ObjectSpecification objectSpec, final JsonRepresentation representation) {
- if (objectSpec == null) {
- throw new IllegalArgumentException("objectSpec cannot be null");
- }
- final EncodableFacet encodableFacet = objectSpec.getFacet(EncodableFacet.class);
- if (encodableFacet == null) {
- throw new IllegalArgumentException("objectSpec expected to have EncodableFacet");
- }
- if (representation == null) {
- throw new IllegalArgumentException("representation cannot be null");
- }
- if (!representation.isValue()) {
- throw new IllegalArgumentException("representation must be of a value");
- }
-
- // special case handling for JSON built-ins
- if (isBoolean(objectSpec)) {
- if (!representation.isBoolean()) {
- throwIncompatibleException(objectSpec, representation);
- }
- final String argStr = "" + representation.asBoolean();
- return encodableFacet.fromEncodedString(argStr);
- }
-
- if (isInteger(objectSpec)) {
- if (representation.isInt()) {
- final String argStr = "" + representation.asInt();
- return encodableFacet.fromEncodedString(argStr);
- }
- // best effort
- if (representation.isString()) {
- final String argStr = representation.asString();
- return encodableFacet.fromEncodedString(argStr);
- }
- // give up
- throwIncompatibleException(objectSpec, representation);
- }
-
- if (isLong(objectSpec)) {
- if (!representation.isLong()) {
- throwIncompatibleException(objectSpec, representation);
- }
- final String argStr = "" + representation.asLong();
- return encodableFacet.fromEncodedString(argStr);
- }
-
- if (isBigInteger(objectSpec)) {
- if (representation.isBigInteger()) {
- final String argStr = "" + representation.asBigInteger();
- return encodableFacet.fromEncodedString(argStr);
- }
- // best effort
- if (representation.isLong()) {
- final String argStr = "" + representation.asLong();
- return encodableFacet.fromEncodedString(argStr);
- }
- if (representation.isInt()) {
- final String argStr = "" + representation.asInt();
- return encodableFacet.fromEncodedString(argStr);
- }
- if (representation.isString()) {
- final String argStr = representation.asString();
- return encodableFacet.fromEncodedString(argStr);
- }
- // give up
- throwIncompatibleException(objectSpec, representation);
- }
-
- if (isBigDecimal(objectSpec)) {
- if (representation.isBigDecimal()) {
- final String argStr = "" + representation.asBigDecimal();
- return encodableFacet.fromEncodedString(argStr);
- }
- // best effort
- if (representation.isBigInteger()) {
- final String argStr = "" + representation.asBigInteger();
- return encodableFacet.fromEncodedString(argStr);
- }
- if (representation.isDouble()) {
- final String argStr = "" + representation.asDouble();
- return encodableFacet.fromEncodedString(argStr);
- }
- if (representation.isLong()) {
- final String argStr = "" + representation.asLong();
- return encodableFacet.fromEncodedString(argStr);
- }
- if (representation.isInt()) {
- final String argStr = "" + representation.asInt();
- return encodableFacet.fromEncodedString(argStr);
- }
- if (representation.isString()) {
- final String argStr = representation.asString();
- return encodableFacet.fromEncodedString(argStr);
- }
- // give up
- throwIncompatibleException(objectSpec, representation);
- }
-
- if (isDouble(objectSpec)) {
- if (representation.isDouble()) {
- final String argStr = "" + representation.asDouble();
- return encodableFacet.fromEncodedString(argStr);
- }
- // best effort
- if (representation.isLong()) {
- final String argStr = "" + representation.asLong();
- return encodableFacet.fromEncodedString(argStr);
- }
- if (representation.isInt()) {
- final String argStr = "" + representation.asInt();
- return encodableFacet.fromEncodedString(argStr);
- }
- if (representation.isString()) {
- final String argStr = representation.asString();
- return encodableFacet.fromEncodedString(argStr);
- }
- // give up
- throwIncompatibleException(objectSpec, representation);
- }
-
- if (!representation.isString()) {
- throw new ExpectedStringRepresentingValueException();
- }
- final String argStr = representation.asString();
- return encodableFacet.fromEncodedString(argStr);
- }
-
- public Object asObject(final ObjectAdapter objectAdapter) {
- if (objectAdapter == null) {
- throw new IllegalArgumentException("objectAdapter cannot be null");
- }
- final ObjectSpecification objectSpec = objectAdapter.getSpecification();
-
- // special case handling for JSON built-ins (at least so far as json.org
- // defines them).
- if (isBoolean(objectSpec) || isInteger(objectSpec) || isLong(objectSpec) || isBigInteger(objectSpec) || isDouble(objectSpec) || isBigDecimal(objectSpec)) {
- // simply return
- return objectAdapter.getObject();
- }
-
- final EncodableFacet encodableFacet = objectSpec.getFacet(EncodableFacet.class);
- if (encodableFacet == null) {
- throw new IllegalArgumentException("objectSpec expected to have EncodableFacet");
- }
- return encodableFacet.toEncodedString(objectAdapter);
- }
-
- private boolean isBoolean(final ObjectSpecification objectSpec) {
- return hasCorrespondingClass(objectSpec, boolean.class, Boolean.class);
- }
-
- private boolean isInteger(final ObjectSpecification objectSpec) {
- return hasCorrespondingClass(objectSpec, int.class, Integer.class);
- }
-
- private boolean isLong(final ObjectSpecification objectSpec) {
- return hasCorrespondingClass(objectSpec, long.class, Long.class);
- }
-
- private boolean isBigInteger(final ObjectSpecification objectSpec) {
- return hasCorrespondingClass(objectSpec, BigInteger.class);
- }
-
- private boolean isDouble(final ObjectSpecification objectSpec) {
- return hasCorrespondingClass(objectSpec, double.class, Double.class);
- }
-
- private boolean isBigDecimal(final ObjectSpecification objectSpec) {
- return hasCorrespondingClass(objectSpec, BigDecimal.class);
- }
-
- private boolean hasCorrespondingClass(final ObjectSpecification objectSpec, final Class<?>... candidates) {
- final Class<?> specClass = objectSpec.getCorrespondingClass();
- for (final Class<?> candidate : candidates) {
- if (specClass == candidate) {
- return true;
- }
- }
- return false;
- }
-
- private void throwIncompatibleException(final ObjectSpecification objectSpec, final JsonRepresentation representation) {
- throw new IllegalArgumentException(String.format("representation '%s' incompatible with objectSpec '%s'", representation.toString(), objectSpec.getCorrespondingClass().getName()));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ListReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ListReprRenderer.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ListReprRenderer.java
deleted file mode 100644
index 427ad93..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ListReprRenderer.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import java.util.Collection;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.links.Rel;
-import org.apache.isis.viewer.restfulobjects.viewer.RendererContext;
-import org.apache.isis.viewer.restfulobjects.viewer.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.LinkFollower;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactoryRegistry;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRendererAbstract;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRendererFactoryAbstract;
-
-public class ListReprRenderer extends ReprRendererAbstract<ListReprRenderer, Collection<ObjectAdapter>> {
-
- public static class Factory extends ReprRendererFactoryAbstract {
- public Factory() {
- super(RepresentationType.LIST);
- }
-
- @Override
- public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
- return new ListReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
- }
- }
-
- private ObjectAdapterLinkTo linkTo;
- private Collection<ObjectAdapter> objectAdapters;
- private ObjectSpecification elementType;
- private ObjectSpecification returnType;
-
- private ListReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, representationType, representation);
- usingLinkToBuilder(new DomainObjectLinkTo());
- }
-
- public ListReprRenderer usingLinkToBuilder(final ObjectAdapterLinkTo objectAdapterLinkToBuilder) {
- this.linkTo = objectAdapterLinkToBuilder.usingUrlBase(resourceContext);
- return this;
- }
-
- @Override
- public ListReprRenderer with(final Collection<ObjectAdapter> objectAdapters) {
- this.objectAdapters = objectAdapters;
- return this;
- }
-
- public ListReprRenderer withReturnType(final ObjectSpecification returnType) {
- this.returnType = returnType;
- return this;
- }
-
- public ListReprRenderer withElementType(final ObjectSpecification elementType) {
- this.elementType = elementType;
- return this;
- }
-
- @Override
- public JsonRepresentation render() {
- addValue();
-
- addLink(Rel.RETURN_TYPE, returnType);
- addLink(Rel.ELEMENT_TYPE, elementType);
-
- getExtensions();
-
- return representation;
- }
-
- private void addValue() {
- if (objectAdapters == null) {
- return;
- }
-
- final JsonRepresentation values = JsonRepresentation.newArray();
- final LinkFollower linkFollower = getLinkFollower().follow("value");
-
- for (final ObjectAdapter adapter : objectAdapters) {
- if (adapter.getSpecification().isHidden()) {
- continue;
- }
- final JsonRepresentation linkToObject = linkTo.with(adapter).builder().build();
- values.arrayAdd(linkToObject);
-
- if (linkFollower.matches(linkToObject)) {
- final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.DOMAIN_OBJECT);
- final DomainObjectReprRenderer renderer = (DomainObjectReprRenderer) factory.newRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
- final JsonRepresentation domainObject = renderer.with(adapter).render();
- linkToObject.mapPut("value", domainObject);
- }
- }
- representation.mapPut("value", values);
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/MemberType.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/MemberType.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/MemberType.java
deleted file mode 100644
index 8038fbb..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/MemberType.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import java.util.Map;
-
-import com.google.common.collect.ImmutableMap;
-
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.util.Enums;
-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.ObjectFeature;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-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.restfulobjects.applib.HttpMethod;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.links.Rel;
-
-public enum MemberType {
-
- PROPERTY("properties/", "id", RepresentationType.OBJECT_PROPERTY, ImmutableMap.of("modify", MutatorSpec.of(Rel.MODIFY, PropertyValidateFacet.class, PropertySetterFacet.class, HttpMethod.PUT, BodyArgs.ONE), "clear",
- MutatorSpec.of(Rel.CLEAR, PropertyValidateFacet.class, PropertyClearFacet.class, HttpMethod.DELETE, BodyArgs.NONE))) {
- @Override
- public ObjectSpecification specFor(final ObjectMember objectMember) {
- return objectMember.getSpecification();
- }
- },
- /**
- * {@link #getMutators()} are keyed by
- * {@link CollectionSemantics#getAddToKey()}
- */
- COLLECTION("collections/", "id", RepresentationType.OBJECT_COLLECTION, ImmutableMap.of("addToSet", MutatorSpec.of(Rel.ADD_TO, CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.PUT, BodyArgs.ONE), "addToList",
- MutatorSpec.of(Rel.ADD_TO, CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.POST, BodyArgs.ONE), "removeFrom", MutatorSpec.of(Rel.REMOVE_FROM, CollectionValidateRemoveFromFacet.class, CollectionRemoveFromFacet.class, HttpMethod.DELETE, BodyArgs.ONE))) {
- @Override
- public ObjectSpecification specFor(final ObjectMember objectMember) {
- return objectMember.getSpecification();
- }
- },
- /**
- * {@link #getMutators()} are keyed by
- * {@link ActionSemantics#getInvokeKey()}
- */
- ACTION("actions/", "id", RepresentationType.ACTION_RESULT, ImmutableMap.of("invokeQueryOnly", MutatorSpec.of(Rel.INVOKE, ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.GET, BodyArgs.MANY, "invoke"), "invokeIdempotent",
- MutatorSpec.of(Rel.INVOKE, ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.PUT, BodyArgs.MANY, "invoke"), "invoke", MutatorSpec.of(Rel.INVOKE, ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.POST, BodyArgs.MANY, "invoke"))) {
- @Override
- public ObjectSpecification specFor(final ObjectMember objectMember) {
- final ObjectAction objectAction = (ObjectAction) objectMember;
- return objectAction.getReturnType();
- }
- };
-
- private final String urlPart;
- private final String jsProp;
- private final String name;
- private final RepresentationType representationType;
-
- private final Map<String, MutatorSpec> mutators;
-
- private MemberType(final String urlPart, final String jsProp, final RepresentationType representationType, final Map<String, MutatorSpec> mutators) {
- this.urlPart = urlPart;
- this.jsProp = jsProp;
- this.representationType = representationType;
- this.mutators = mutators;
- name = Enums.enumToCamelCase(this);
- }
-
- public String getJsProp() {
- return jsProp;
- }
-
- public String getUrlPart() {
- return urlPart;
- }
-
- public Map<String, MutatorSpec> getMutators() {
- return mutators;
- }
-
- public abstract ObjectSpecification specFor(ObjectMember objectMember);
-
- public boolean isProperty() {
- return this == MemberType.PROPERTY;
- }
-
- public boolean isCollection() {
- return this == MemberType.COLLECTION;
- }
-
- public boolean isAction() {
- return this == MemberType.ACTION;
- }
-
- public static MemberType lookup(final String memberTypeName) {
- for (final MemberType memberType : values()) {
- if (memberType.getName().equals(memberTypeName)) {
- return memberType;
- }
- }
- return null;
- }
-
- public static MemberType of(final ObjectMember objectMember) {
- return objectMember.isAction() ? ACTION : objectMember.isOneToOneAssociation() ? PROPERTY : COLLECTION;
- }
-
- public RepresentationType getRepresentationType() {
- return representationType;
- }
-
- public String getName() {
- return name;
- }
-
- public static MemberType determineFrom(final ObjectFeature objectFeature) {
- if (objectFeature instanceof ObjectAction) {
- return MemberType.ACTION;
- }
- if (objectFeature instanceof OneToOneAssociation) {
- return MemberType.PROPERTY;
- }
- if (objectFeature instanceof OneToManyAssociation) {
- return MemberType.COLLECTION;
- }
- return null;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/MutatorSpec.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/MutatorSpec.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/MutatorSpec.java
deleted file mode 100644
index 7370268..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/MutatorSpec.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.viewer.restfulobjects.applib.HttpMethod;
-import org.apache.isis.viewer.restfulobjects.applib.links.Rel;
-
-public class MutatorSpec {
-
- public static MutatorSpec of(final Rel rel, final Class<? extends Facet> validationFacetType, final Class<? extends Facet> mutatorFacetType, final HttpMethod httpMethod, final BodyArgs argSpec) {
- return of(rel, validationFacetType, mutatorFacetType, httpMethod, argSpec, null);
- }
-
- public static MutatorSpec of(final Rel rel, final Class<? extends Facet> validationFacetType, final Class<? extends Facet> mutatorFacetType, final HttpMethod httpMethod, final BodyArgs argSpec, final String suffix) {
- return new MutatorSpec(rel, validationFacetType, mutatorFacetType, httpMethod, argSpec, suffix);
- }
-
- public final Rel rel;
- 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(final Rel rel, final Class<? extends Facet> validationFacetType, final Class<? extends Facet> mutatorFacetType, final HttpMethod httpMethod, final BodyArgs bodyArgs, final String suffix) {
- this.rel = rel;
- this.validationFacetType = validationFacetType;
- this.mutatorFacetType = mutatorFacetType;
- this.httpMethod = httpMethod;
- this.arguments = bodyArgs;
- this.suffix = suffix;
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectActionReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectActionReprRenderer.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectActionReprRenderer.java
deleted file mode 100644
index 77f7098..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectActionReprRenderer.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/**
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import java.util.List;
-import java.util.Map;
-
-import com.google.common.collect.Lists;
-
-import org.codehaus.jackson.node.NullNode;
-
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.Where;
-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.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.links.Rel;
-import org.apache.isis.viewer.restfulobjects.viewer.RendererContext;
-import org.apache.isis.viewer.restfulobjects.viewer.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.LinkFollower;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactoryRegistry;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRendererFactoryAbstract;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.ActionDescriptionReprRenderer;
-
-public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<ObjectActionReprRenderer, ObjectAction> {
-
- public static class Factory extends ReprRendererFactoryAbstract {
-
- public Factory() {
- super(RepresentationType.OBJECT_ACTION);
- }
-
- @Override
- public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
- return new ObjectActionReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
- }
- }
-
- private ObjectActionReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, representationType, representation, Where.OBJECT_FORMS);
- }
-
- @Override
- public JsonRepresentation render() {
- // id and memberType are rendered eagerly
-
- renderMemberContent();
- putDisabledReasonIfDisabled();
-
- if (mode.isStandalone() || mode.isMutated()) {
- addParameterDetails();
- }
-
- return representation;
- }
-
- // ///////////////////////////////////////////////////
- // details link
- // ///////////////////////////////////////////////////
-
- /**
- * Mandatory hook method to support x-ro-follow-links
- */
- @Override
- protected void followDetailsLink(final JsonRepresentation detailsLink) {
- final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.OBJECT_ACTION);
- final ObjectActionReprRenderer renderer = (ObjectActionReprRenderer) factory.newRenderer(getResourceContext(), getLinkFollower(), JsonRepresentation.newMap());
- renderer.with(new ObjectAndAction(objectAdapter, objectMember)).usingLinkTo(linkTo).asFollowed();
- detailsLink.mapPut("value", renderer.render());
- }
-
- // ///////////////////////////////////////////////////
- // mutators
- // ///////////////////////////////////////////////////
-
- @Override
- protected void addMutatorsIfEnabled() {
- if (usability().isVetoed()) {
- return;
- }
- final Map<String, MutatorSpec> mutators = memberType.getMutators();
-
- final ActionSemantics.Of actionSemantics = objectMember.getSemantics();
- final String mutator = InvokeKeys.getKeyFor(actionSemantics);
- final MutatorSpec mutatorSpec = mutators.get(mutator);
-
- addLinkFor(mutatorSpec);
- }
-
- @Override
- protected ObjectAdapterLinkTo linkToForMutatorInvoke() {
- if (!objectMember.isContributed()) {
- return super.linkToForMutatorInvoke();
- }
- final DomainServiceLinkTo linkTo = new DomainServiceLinkTo();
- return linkTo.usingUrlBase(getResourceContext()).with(contributingServiceAdapter());
- }
-
- private ObjectAdapter contributingServiceAdapter() {
- final ObjectSpecification serviceType = objectMember.getOnType();
- final List<ObjectAdapter> serviceAdapters = getServiceAdapters();
- for (final ObjectAdapter serviceAdapter : serviceAdapters) {
- if (serviceAdapter.getSpecification() == serviceType) {
- return serviceAdapter;
- }
- }
- // fail fast
- throw new IllegalStateException("Unable to locate contributing service");
- }
-
- @Override
- protected JsonRepresentation mutatorArgs(final MutatorSpec mutatorSpec) {
- final JsonRepresentation argMap = JsonRepresentation.newMap();
- final List<ObjectActionParameter> parameters = objectMember.getParameters();
- for (int i = 0; i < objectMember.getParameterCount(); i++) {
- argMap.mapPut(parameters.get(i).getId(), argValueFor(i));
- }
- return argMap;
- }
-
- private Object argValueFor(final int i) {
- if (objectMember.isContributed()) {
- final ObjectActionParameter actionParameter = objectMember.getParameters().get(i);
- if (actionParameter.getSpecification().isOfType(objectAdapter.getSpecification())) {
- return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.OBJECT, objectAdapter).build();
- }
- }
- // force a null into the map
- return NullNode.getInstance();
- }
-
- // ///////////////////////////////////////////////////
- // parameter details
- // ///////////////////////////////////////////////////
-
- private ObjectActionReprRenderer addParameterDetails() {
- final List<Object> parameters = Lists.newArrayList();
- for (int i = 0; i < objectMember.getParameterCount(); i++) {
- final ObjectActionParameter param = objectMember.getParameters().get(i);
- parameters.add(paramDetails(param));
- }
- representation.mapPut("parameters", parameters);
- return this;
- }
-
- private Object paramDetails(final ObjectActionParameter param) {
- final JsonRepresentation paramRep = JsonRepresentation.newMap();
- paramRep.mapPut("num", param.getNumber());
- paramRep.mapPut("id", param.getId());
- paramRep.mapPut("name", param.getName());
- paramRep.mapPut("description", param.getDescription());
- final Object paramChoices = choicesFor(param);
- if (paramChoices != null) {
- paramRep.mapPut("choices", paramChoices);
- }
- final Object paramDefault = defaultFor(param);
- if (paramDefault != null) {
- paramRep.mapPut("default", paramDefault);
- }
- return paramRep;
- }
-
- private Object choicesFor(final ObjectActionParameter param) {
- final ObjectAdapter[] choiceAdapters = param.getChoices(objectAdapter);
- if (choiceAdapters == null || choiceAdapters.length == 0) {
- return null;
- }
- final List<Object> list = Lists.newArrayList();
- for (final ObjectAdapter choiceAdapter : choiceAdapters) {
- final ObjectSpecification objectSpec = param.getSpecification();
- list.add(DomainObjectReprRenderer.valueOrRef(resourceContext, choiceAdapter, objectSpec));
- }
- return list;
- }
-
- private Object defaultFor(final ObjectActionParameter param) {
- final ObjectAdapter defaultAdapter = param.getDefault(objectAdapter);
- if (defaultAdapter == null) {
- return null;
- }
- final ObjectSpecification objectSpec = param.getSpecification();
- return DomainObjectReprRenderer.valueOrRef(resourceContext, defaultAdapter, objectSpec);
- }
-
- // ///////////////////////////////////////////////////
- // extensions and links
- // ///////////////////////////////////////////////////
-
- @Override
- protected void addLinksToFormalDomainModel() {
- getLinks().arrayAdd(ActionDescriptionReprRenderer.newLinkToBuilder(resourceContext, Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build());
- }
-
- @Override
- protected void addLinksIsisProprietary() {
- if (objectMember.isContributed()) {
- final ObjectAdapter serviceAdapter = contributingServiceAdapter();
- final JsonRepresentation contributedByLink = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.CONTRIBUTED_BY, serviceAdapter).build();
- getLinks().arrayAdd(contributedByLink);
- }
- }
-
- @Override
- protected void putExtensionsIsisProprietary() {
- getExtensions().mapPut("actionType", objectMember.getType().name().toLowerCase());
-
- final ActionSemantics.Of semantics = objectMember.getSemantics();
- getExtensions().mapPut("actionSemantics", semantics.getCamelCaseName());
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAdapterLinkTo.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAdapterLinkTo.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAdapterLinkTo.java
deleted file mode 100644
index db0002a..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAdapterLinkTo.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.restfulobjects.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.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.links.Rel;
-import org.apache.isis.viewer.restfulobjects.viewer.RendererContext;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.LinkBuilder;
-
-public interface ObjectAdapterLinkTo {
-
- ObjectAdapterLinkTo usingUrlBase(RendererContext resourceContext);
-
- ObjectAdapterLinkTo with(ObjectAdapter objectAdapter);
-
- LinkBuilder builder();
-
- LinkBuilder builder(Rel rel);
-
- LinkBuilder memberBuilder(Rel rel, MemberType memberType, ObjectMember objectMember, String... parts);
-
- LinkBuilder memberBuilder(Rel rel, MemberType memberType, ObjectMember objectMember, RepresentationType representationType, String... parts);
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndAction.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndAction.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndAction.java
deleted file mode 100644
index 4b59bec..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndAction.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-
-public class ObjectAndAction extends ObjectAndMember<ObjectAction> {
-
- public ObjectAndAction(final ObjectAdapter objectAdapter, final ObjectAction action) {
- super(objectAdapter, action);
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndActionInvocation.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndActionInvocation.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndActionInvocation.java
deleted file mode 100644
index eba352b..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndActionInvocation.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-
-public class ObjectAndActionInvocation {
-
- private final ObjectAdapter objectAdapter;
- private final ObjectAction action;
- private final JsonRepresentation arguments;
- private final ObjectAdapter returnedAdapter;
-
- public ObjectAndActionInvocation(final ObjectAdapter objectAdapter, final ObjectAction action, final JsonRepresentation arguments, final ObjectAdapter returnedAdapter) {
- this.objectAdapter = objectAdapter;
- this.action = action;
- this.arguments = arguments;
- this.returnedAdapter = returnedAdapter;
- }
-
- public ObjectAdapter getObjectAdapter() {
- return objectAdapter;
- }
-
- public ObjectAction getAction() {
- return action;
- }
-
- public JsonRepresentation getArguments() {
- return arguments;
- }
-
- public ObjectAdapter getReturnedAdapter() {
- return returnedAdapter;
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndCollection.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndCollection.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndCollection.java
deleted file mode 100644
index 45dc03b..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndCollection.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-
-public class ObjectAndCollection extends ObjectAndMember<OneToManyAssociation> {
-
- public ObjectAndCollection(final ObjectAdapter objectAdapter, final OneToManyAssociation collection) {
- super(objectAdapter, collection);
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndMember.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndMember.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndMember.java
deleted file mode 100644
index b478c04..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndMember.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-
-public abstract class ObjectAndMember<T extends ObjectMember> {
-
- private final ObjectAdapter objectAdapter;
- private final T objectMember;
-
- public ObjectAndMember(final ObjectAdapter objectAdapter, final T objectMember) {
- this.objectAdapter = objectAdapter;
- this.objectMember = objectMember;
- }
-
- public ObjectAdapter getObjectAdapter() {
- return objectAdapter;
- }
-
- public T getMember() {
- return objectMember;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndProperty.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndProperty.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndProperty.java
deleted file mode 100644
index fa908f6..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectAndProperty.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-
-public class ObjectAndProperty extends ObjectAndMember<OneToOneAssociation> {
-
- public ObjectAndProperty(final ObjectAdapter objectAdapter, final OneToOneAssociation property) {
- super(objectAdapter, property);
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java
deleted file mode 100644
index 1f6624c..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import java.util.List;
-import java.util.Map;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.annotation.Where;
-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.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.links.Rel;
-import org.apache.isis.viewer.restfulobjects.viewer.RendererContext;
-import org.apache.isis.viewer.restfulobjects.viewer.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.LinkBuilder;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.LinkFollower;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactoryRegistry;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRendererFactoryAbstract;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.CollectionDescriptionReprRenderer;
-
-public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRenderer<ObjectCollectionReprRenderer, OneToManyAssociation> {
-
- public static class Factory extends ReprRendererFactoryAbstract {
-
- public Factory() {
- super(RepresentationType.OBJECT_COLLECTION);
- }
-
- @Override
- public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
- return new ObjectCollectionReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
- }
- }
-
- private ObjectCollectionReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, representationType, representation, Where.PARENTED_TABLES);
- }
-
- @Override
- public JsonRepresentation render() {
- // id and memberType are rendered eagerly
-
- renderMemberContent();
- if (mode.isStandalone() || mode.isMutated() || !objectAdapter.representsPersistent()) {
- addValue();
- }
- putDisabledReasonIfDisabled();
-
- if (mode.isStandalone() || mode.isMutated()) {
- addExtensionsIsisProprietaryChangedObjects();
- }
-
- return representation;
- }
-
- // ///////////////////////////////////////////////////
- // value
- // ///////////////////////////////////////////////////
-
- private void addValue() {
- final ObjectAdapter valueAdapter = objectMember.get(objectAdapter);
- if (valueAdapter == null) {
- return;
- }
-
- final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(valueAdapter);
- final List<JsonRepresentation> list = Lists.newArrayList();
- for (final ObjectAdapter elementAdapter : facet.iterable(valueAdapter)) {
-
- final LinkBuilder newBuilder = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.OBJECT, elementAdapter);
-
- list.add(newBuilder.build());
- }
-
- representation.mapPut("value", list);
- }
-
- // ///////////////////////////////////////////////////
- // details link
- // ///////////////////////////////////////////////////
-
- /**
- * Mandatory hook method to support x-ro-follow-links
- */
- @Override
- protected void followDetailsLink(final JsonRepresentation detailsLink) {
- final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.OBJECT_COLLECTION);
- final ObjectCollectionReprRenderer renderer = (ObjectCollectionReprRenderer) factory.newRenderer(getResourceContext(), getLinkFollower(), JsonRepresentation.newMap());
- renderer.with(new ObjectAndCollection(objectAdapter, objectMember)).asFollowed();
- detailsLink.mapPut("value", renderer.render());
- }
-
- // ///////////////////////////////////////////////////
- // mutators
- // ///////////////////////////////////////////////////
-
- @Override
- protected void addMutatorsIfEnabled() {
- if (usability().isVetoed()) {
- return;
- }
-
- final CollectionSemantics semantics = CollectionSemantics.determine(objectMember);
- addMutatorLink(semantics.getAddToKey());
- addMutatorLink(semantics.getRemoveFromKey());
-
- return;
- }
-
- private void addMutatorLink(final String key) {
- final Map<String, MutatorSpec> mutators = memberType.getMutators();
- final MutatorSpec mutatorSpec = mutators.get(key);
- addLinkFor(mutatorSpec);
- }
-
- // ///////////////////////////////////////////////////
- // extensions and links
- // ///////////////////////////////////////////////////
-
- @Override
- protected void addLinksToFormalDomainModel() {
- final LinkBuilder linkBuilder = CollectionDescriptionReprRenderer.newLinkToBuilder(resourceContext, Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember);
- getLinks().arrayAdd(linkBuilder.build());
- }
-
- @Override
- protected void addLinksIsisProprietary() {
- // none
- }
-
- @Override
- protected void putExtensionsIsisProprietary() {
- final CollectionSemantics semantics = CollectionSemantics.determine(objectMember);
- getExtensions().mapPut("collectionSemantics", semantics.name().toLowerCase());
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java
deleted file mode 100644
index cd1a2ee..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.isis.applib.annotation.Where;
-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.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.links.Rel;
-import org.apache.isis.viewer.restfulobjects.viewer.RendererContext;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.LinkFollower;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.RendererFactoryRegistry;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRendererFactoryAbstract;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.PropertyDescriptionReprRenderer;
-import org.codehaus.jackson.node.NullNode;
-
-import com.google.common.collect.Lists;
-
-public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAssociation> {
-
- public static class Factory extends ReprRendererFactoryAbstract {
-
- public Factory() {
- super(RepresentationType.OBJECT_PROPERTY);
- }
-
- @Override
- public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
- return new ObjectPropertyReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
- }
- }
-
- private ObjectPropertyReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, representationType, representation, Where.OBJECT_FORMS);
- }
-
- @Override
- public JsonRepresentation render() {
- // id and memberType are rendered eagerly
-
- renderMemberContent();
- addValue();
-
- putDisabledReasonIfDisabled();
-
- if (mode.isStandalone() || mode.isMutated()) {
- addChoices();
- addExtensionsIsisProprietaryChangedObjects();
- }
-
- return representation;
- }
-
- // ///////////////////////////////////////////////////
- // value
- // ///////////////////////////////////////////////////
-
- private void addValue() {
- representation.mapPut("value", valueRep());
- }
-
- private Object valueRep() {
- final ObjectAdapter valueAdapter = objectMember.get(objectAdapter);
- if (valueAdapter == null) {
- return NullNode.getInstance();
- }
- return DomainObjectReprRenderer.valueOrRef(resourceContext, valueAdapter, objectMember.getSpecification());
- }
-
- // ///////////////////////////////////////////////////
- // details link
- // ///////////////////////////////////////////////////
-
- /**
- * Mandatory hook method to support x-ro-follow-links
- */
- @Override
- protected void followDetailsLink(final JsonRepresentation detailsLink) {
- final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.OBJECT_PROPERTY);
- final ObjectPropertyReprRenderer renderer = (ObjectPropertyReprRenderer) factory.newRenderer(getResourceContext(), getLinkFollower(), JsonRepresentation.newMap());
- renderer.with(new ObjectAndProperty(objectAdapter, objectMember)).asFollowed();
- detailsLink.mapPut("value", renderer.render());
- }
-
- // ///////////////////////////////////////////////////
- // mutators
- // ///////////////////////////////////////////////////
-
- @Override
- protected void addMutatorsIfEnabled() {
- if (usability().isVetoed()) {
- return;
- }
- final Map<String, MutatorSpec> mutators = memberType.getMutators();
- for (final String mutator : mutators.keySet()) {
- final MutatorSpec mutatorSpec = mutators.get(mutator);
- addLinkFor(mutatorSpec);
- }
- return;
- }
-
- // ///////////////////////////////////////////////////
- // choices
- // ///////////////////////////////////////////////////
-
- private ObjectPropertyReprRenderer addChoices() {
- final Object propertyChoices = propertyChoices();
- if (propertyChoices != null) {
- representation.mapPut("choices", propertyChoices);
- }
- return this;
- }
-
- private Object propertyChoices() {
- final ObjectAdapter[] choiceAdapters = objectMember.getChoices(objectAdapter);
- if (choiceAdapters == null || choiceAdapters.length == 0) {
- return null;
- }
- final List<Object> list = Lists.newArrayList();
- for (final ObjectAdapter choiceAdapter : choiceAdapters) {
- final ObjectSpecification objectSpec = objectMember.getSpecification();
- list.add(DomainObjectReprRenderer.valueOrRef(resourceContext, choiceAdapter, objectSpec));
- }
- return list;
- }
-
- // ///////////////////////////////////////////////////
- // extensions and links
- // ///////////////////////////////////////////////////
-
- @Override
- protected void addLinksToFormalDomainModel() {
- getLinks().arrayAdd(PropertyDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build());
- }
-
- @Override
- protected void addLinksIsisProprietary() {
- // none
- }
-
- @Override
- protected void putExtensionsIsisProprietary() {
- // none
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ScalarValueReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ScalarValueReprRenderer.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ScalarValueReprRenderer.java
deleted file mode 100644
index 92a33da..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ScalarValueReprRenderer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 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.restfulobjects.viewer.resources.domainobjects;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.applib.links.Rel;
-import org.apache.isis.viewer.restfulobjects.viewer.RendererContext;
-import org.apache.isis.viewer.restfulobjects.viewer.RestfulObjectsApplicationException;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.LinkFollower;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRendererAbstract;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRendererFactoryAbstract;
-
-public class ScalarValueReprRenderer extends ReprRendererAbstract<ScalarValueReprRenderer, ObjectAdapter> {
-
- private final JsonValueEncoder jsonValueEncoder = new JsonValueEncoder();
- private ObjectSpecification returnType;
-
- public static class Factory extends ReprRendererFactoryAbstract {
- public Factory() {
- super(RepresentationType.SCALAR_VALUE);
- }
-
- @Override
- public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
- return new ScalarValueReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
- }
- }
-
- private ScalarValueReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, representationType, representation);
- }
-
- @Override
- public ScalarValueReprRenderer with(final ObjectAdapter objectAdapter) {
- final EncodableFacet facet = objectAdapter.getSpecification().getFacet(EncodableFacet.class);
- if (facet == null) {
- throw RestfulObjectsApplicationException.create(HttpStatusCode.INTERNAL_SERVER_ERROR, "Not an (encodable) value", objectAdapter.titleString());
- }
- final Object value = jsonValueEncoder.asObject(objectAdapter);
-
- representation.mapPut("value", value);
- return this;
- }
-
- @Override
- public JsonRepresentation render() {
-
- addLinkToReturnType();
-
- getExtensions();
-
- return representation;
- }
-
- public ScalarValueReprRenderer withReturnType(final ObjectSpecification returnType) {
- this.returnType = returnType;
- return this;
- }
-
- private void addLinkToReturnType() {
- addLink(Rel.RETURN_TYPE, returnType);
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domaintypes/AbstractTypeFeatureReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domaintypes/AbstractTypeFeatureReprRenderer.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domaintypes/AbstractTypeFeatureReprRenderer.java
deleted file mode 100644
index cc3b23f..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domaintypes/AbstractTypeFeatureReprRenderer.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * 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.restfulobjects.viewer.resources.domaintypes;
-
-import com.google.common.base.Strings;
-
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.viewer.RendererContext;
-import org.apache.isis.viewer.restfulobjects.viewer.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.LinkFollower;
-import org.apache.isis.viewer.restfulobjects.viewer.representations.ReprRendererAbstract;
-
-public abstract class AbstractTypeFeatureReprRenderer<R extends ReprRendererAbstract<R, ParentSpecAndFeature<T>>, T extends ObjectFeature> extends ReprRendererAbstract<R, ParentSpecAndFeature<T>> {
-
- protected ObjectSpecification objectSpecification;
- protected T objectFeature;
-
- public AbstractTypeFeatureReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, representationType, representation);
- }
-
- public ObjectSpecification getParentSpecification() {
- return objectSpecification;
- }
-
- public T getObjectFeature() {
- return objectFeature;
- }
-
- @Override
- public R with(final ParentSpecAndFeature<T> specAndFeature) {
- objectSpecification = specAndFeature.getParentSpec();
- objectFeature = specAndFeature.getObjectFeature();
-
- return cast(this);
- }
-
- @Override
- public JsonRepresentation render() {
-
- addLinkSelfIfRequired();
- addLinkUpToParent();
-
- addPropertiesSpecificToFeature();
-
- addLinksSpecificToFeature();
- putExtensionsSpecificToFeature();
-
- return representation;
- }
-
- /**
- * Optional hook method.
- */
- protected void addPropertiesSpecificToFeature() {
- }
-
- /**
- * Mandatory hook method.
- */
- protected abstract void addLinkSelfIfRequired();
-
- /**
- * Mandatory hook method.
- */
- protected abstract void addLinkUpToParent();
-
- /**
- * Optional hook method.
- */
- protected void addLinksSpecificToFeature() {
- }
-
- /**
- * Mandatory hook method.
- */
- protected abstract void putExtensionsSpecificToFeature();
-
- protected void putExtensionsName() {
- final String friendlyName = getObjectFeature().getName();
- getExtensions().mapPut("friendlyName", friendlyName);
- }
-
- protected void putExtensionsDescriptionIfAvailable() {
- final String description = getObjectFeature().getDescription();
- if (!Strings.isNullOrEmpty(description)) {
- getExtensions().mapPut("description", description);
- }
- }
-
-}
\ No newline at end of file