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
[14/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/RestfulObjectsApplicationExceptionMapper.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/RestfulObjectsApplicationExceptionMapper.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/RestfulObjectsApplicationExceptionMapper.java
deleted file mode 100644
index 2a5bf23..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/RestfulObjectsApplicationExceptionMapper.java
+++ /dev/null
@@ -1,120 +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;
-
-import java.util.List;
-
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
-import javax.ws.rs.ext.ExceptionMapper;
-import javax.ws.rs.ext.Provider;
-
-import com.google.common.collect.Lists;
-
-import org.apache.commons.lang.exception.ExceptionUtils;
-
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
-import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
-
-@Provider
-public class RestfulObjectsApplicationExceptionMapper implements ExceptionMapper<RestfulObjectsApplicationException> {
-
- @Override
- public Response toResponse(final RestfulObjectsApplicationException ex) {
- final ResponseBuilder builder = Response.status(ex.getHttpStatusCode().getJaxrsStatusType()).type(RestfulMediaType.APPLICATION_JSON_ERROR).entity(jsonFor(ex));
- final String message = ex.getMessage();
- if (message != null) {
- builder.header(RestfulResponse.Header.WARNING.getName(), message);
- }
- return builder.build();
- }
-
- private static class ExceptionPojo {
-
- public static ExceptionPojo create(final Exception ex) {
- return new ExceptionPojo(ex);
- }
-
- private static String format(final StackTraceElement stackTraceElement) {
- return stackTraceElement.toString();
- }
-
- private final int httpStatusCode;
- private final String message;
- private final List<String> stackTrace = Lists.newArrayList();
- private ExceptionPojo causedBy;
-
- public ExceptionPojo(final Throwable ex) {
- httpStatusCode = getHttpStatusCodeIfAny(ex);
- this.message = ex.getMessage();
- final StackTraceElement[] stackTraceElements = ex.getStackTrace();
- for (final StackTraceElement stackTraceElement : stackTraceElements) {
- this.stackTrace.add(format(stackTraceElement));
- }
- final Throwable cause = ex.getCause();
- if (cause != null && cause != ex) {
- this.causedBy = new ExceptionPojo(cause);
- }
- }
-
- private int getHttpStatusCodeIfAny(final Throwable ex) {
- if (!(ex instanceof HasHttpStatusCode)) {
- return 0;
- }
- final HasHttpStatusCode hasHttpStatusCode = (HasHttpStatusCode) ex;
- return hasHttpStatusCode.getHttpStatusCode().getStatusCode();
- }
-
- @SuppressWarnings("unused")
- public int getHttpStatusCode() {
- return httpStatusCode;
- }
-
- @SuppressWarnings("unused")
- public String getMessage() {
- return message;
- }
-
- @SuppressWarnings("unused")
- public List<String> getStackTrace() {
- return stackTrace;
- }
-
- @SuppressWarnings("unused")
- public ExceptionPojo getCausedBy() {
- return causedBy;
- }
-
- }
-
- static String jsonFor(final RestfulObjectsApplicationException ex) {
- final JsonRepresentation jsonRepresentation = ex.getJsonRepresentation();
- if (jsonRepresentation != null) {
- return jsonRepresentation.toString();
- }
- try {
- return JsonMapper.instance().write(ExceptionPojo.create(ex));
- } catch (final Exception e) {
- // fallback
- return "{ \"exception\": \"" + ExceptionUtils.getFullStackTrace(ex) + "\" }";
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/RuntimeExceptionMapper.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/RuntimeExceptionMapper.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/RuntimeExceptionMapper.java
deleted file mode 100644
index d023f81..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/RuntimeExceptionMapper.java
+++ /dev/null
@@ -1,100 +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;
-
-import java.util.List;
-
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
-import javax.ws.rs.ext.ExceptionMapper;
-import javax.ws.rs.ext.Provider;
-
-import com.google.common.collect.Lists;
-
-import org.apache.commons.lang.exception.ExceptionUtils;
-
-import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
-import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
-
-@Provider
-public class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> {
-
- @Override
- public Response toResponse(final RuntimeException ex) {
- final ResponseBuilder builder = Response.status(HttpStatusCode.INTERNAL_SERVER_ERROR.getJaxrsStatusType()).type(RestfulMediaType.APPLICATION_JSON_ERROR).entity(jsonFor(ex));
- return builder.build();
- }
-
- private static class ExceptionPojo {
-
- public static ExceptionPojo create(final Exception ex) {
- return new ExceptionPojo(ex);
- }
-
- private static String format(final StackTraceElement stackTraceElement) {
- return stackTraceElement.toString();
- }
-
- private final String message;
- private final List<String> stackTrace = Lists.newArrayList();
- private ExceptionPojo causedBy;
-
- public ExceptionPojo(final Throwable ex) {
- this.message = messageFor(ex);
- final StackTraceElement[] stackTraceElements = ex.getStackTrace();
- for (final StackTraceElement stackTraceElement : stackTraceElements) {
- this.stackTrace.add(format(stackTraceElement));
- }
- final Throwable cause = ex.getCause();
- if (cause != null && cause != ex) {
- this.causedBy = new ExceptionPojo(cause);
- }
- }
-
- private static String messageFor(final Throwable ex) {
- final String message = ex.getMessage();
- return message != null ? message : ex.getClass().getName();
- }
-
- @SuppressWarnings("unused")
- public String getMessage() {
- return message;
- }
-
- @SuppressWarnings("unused")
- public List<String> getStackTrace() {
- return stackTrace;
- }
-
- @SuppressWarnings("unused")
- public ExceptionPojo getCausedBy() {
- return causedBy;
- }
- }
-
- static String jsonFor(final Exception ex) {
- try {
- return JsonMapper.instance().write(ExceptionPojo.create(ex));
- } catch (final Exception e) {
- // fallback
- return "{ \"exception\": \"" + ExceptionUtils.getFullStackTrace(ex) + "\" }";
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyBasicAuth.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyBasicAuth.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyBasicAuth.java
deleted file mode 100644
index 3a542cb..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyBasicAuth.java
+++ /dev/null
@@ -1,79 +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.authentication;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.codec.binary.Base64;
-
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.runtime.authentication.AuthenticationManager;
-import org.apache.isis.core.runtime.authentication.AuthenticationRequestPassword;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.webapp.auth.AuthenticationSessionStrategyAbstract;
-
-/**
- * Implements the HTTP Basic Auth protocol; does not bind the
- * {@link AuthenticationSession} onto the {@link HttpSession}.
- */
-public class AuthenticationSessionStrategyBasicAuth extends AuthenticationSessionStrategyAbstract {
-
- private static Pattern USER_AND_PASSWORD_REGEX = Pattern.compile("^(.+):(.+)$");
-
- @Override
- public AuthenticationSession lookupValid(final ServletRequest servletRequest, final ServletResponse servletResponse) {
-
- final HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
- final String authStr = httpServletRequest.getHeader("Authorization");
-
- // value should be in the form:
- // Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
- if (authStr == null || !authStr.startsWith("Basic ")) {
- return null;
- }
- final String digest = authStr.substring(6);
-
- final String userAndPassword = new String(new Base64().decode(digest.getBytes()));
- final Matcher matcher = USER_AND_PASSWORD_REGEX.matcher(userAndPassword);
- if (!matcher.matches()) {
- return null;
- }
-
- final String user = matcher.group(1);
- final String password = matcher.group(2);
-
- final AuthenticationSession authSession = getAuthenticationManager().authenticate(new AuthenticationRequestPassword(user, password));
- return authSession;
- }
-
- // //////////////////////////////////////////////////////////
- // Dependencies (from context)
- // //////////////////////////////////////////////////////////
-
- protected AuthenticationManager getAuthenticationManager() {
- return IsisContext.getAuthenticationManager();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyHeader.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyHeader.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyHeader.java
deleted file mode 100644
index 2a61d5c..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyHeader.java
+++ /dev/null
@@ -1,66 +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.authentication;
-
-import java.util.Collections;
-import java.util.List;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.runtime.authentication.standard.SimpleSession;
-import org.apache.isis.core.webapp.auth.AuthenticationSessionStrategyAbstract;
-
-/**
- * Implements a home-grown protocol, whereby the user id and roles are passed
- * using custom headers.
- *
- * <p>
- * Does not bind the {@link AuthenticationSession} onto the {@link HttpSession}.
- */
-public class AuthenticationSessionStrategyHeader extends AuthenticationSessionStrategyAbstract {
-
- @Override
- public AuthenticationSession lookupValid(final ServletRequest servletRequest, final ServletResponse servletResponse) {
-
- final HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
- final String user = httpServletRequest.getHeader("isis.user");
- final List<String> roles = rolesFrom(httpServletRequest);
-
- if (Strings.isNullOrEmpty(user)) {
- return null;
- }
- return new SimpleSession(user, roles);
- }
-
- protected List<String> rolesFrom(final HttpServletRequest httpServletRequest) {
- final String rolesStr = httpServletRequest.getHeader("isis.roles");
- if (rolesStr == null) {
- return Collections.emptyList();
- }
- return Lists.newArrayList(Splitter.on(",").split(rolesStr));
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyTrusted.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyTrusted.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyTrusted.java
deleted file mode 100644
index 4658a9b..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/authentication/AuthenticationSessionStrategyTrusted.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.authentication;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.runtime.authentication.exploration.AuthenticationRequestExploration;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.webapp.auth.AuthenticationSessionStrategyDefault;
-
-public class AuthenticationSessionStrategyTrusted extends AuthenticationSessionStrategyDefault {
-
- @Override
- public AuthenticationSession lookupValid(final ServletRequest servletRequest, final ServletResponse servletResponse) {
- final AuthenticationSession session = super.lookupValid(servletRequest, servletResponse);
- if (session != null) {
- return session;
- }
-
- // will always succeed.
- final AuthenticationRequestExploration request = new AuthenticationRequestExploration();
- return IsisContext.getAuthenticationManager().authenticate(request);
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/embedded/EmbeddedWebViewerRestfulObjects.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/embedded/EmbeddedWebViewerRestfulObjects.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/embedded/EmbeddedWebViewerRestfulObjects.java
deleted file mode 100644
index 59cdccf..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/embedded/EmbeddedWebViewerRestfulObjects.java
+++ /dev/null
@@ -1,61 +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.embedded;
-
-import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
-import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap;
-
-import org.apache.isis.core.commons.lang.MapUtils;
-import org.apache.isis.core.runtime.viewer.web.WebAppSpecification;
-import org.apache.isis.core.runtime.web.EmbeddedWebViewer;
-import org.apache.isis.core.webapp.IsisSessionFilter;
-import org.apache.isis.core.webapp.IsisWebAppBootstrapper;
-import org.apache.isis.core.webapp.content.ResourceCachingFilter;
-import org.apache.isis.core.webapp.content.ResourceServlet;
-import org.apache.isis.viewer.restfulobjects.viewer.RestfulObjectsApplication;
-import org.apache.isis.viewer.restfulobjects.viewer.authentication.AuthenticationSessionStrategyTrusted;
-
-final class EmbeddedWebViewerRestfulObjects extends EmbeddedWebViewer {
- @Override
- public WebAppSpecification getWebAppSpecification() {
- final WebAppSpecification webAppSpec = new WebAppSpecification();
-
- webAppSpec.addServletContextListener(IsisWebAppBootstrapper.class);
-
- webAppSpec.addContextParams("isis.viewers", "restfulobjects");
-
- webAppSpec.addContextParams(RestfulObjectsViewerInstaller.JAVAX_WS_RS_APPLICATION, RestfulObjectsApplication.class.getName());
-
- webAppSpec.addFilterSpecification(IsisSessionFilter.class,
- MapUtils.asMap(
- IsisSessionFilter.AUTHENTICATION_SESSION_STRATEGY_KEY, AuthenticationSessionStrategyTrusted.class.getName(),
- IsisSessionFilter.WHEN_NO_SESSION_KEY, IsisSessionFilter.WhenNoSession.CONTINUE.name().toLowerCase()),
- RestfulObjectsViewerInstaller.EVERYTHING);
-
- webAppSpec.addFilterSpecification(ResourceCachingFilter.class, RestfulObjectsViewerInstaller.STATIC_CONTENT);
- webAppSpec.addServletSpecification(ResourceServlet.class, RestfulObjectsViewerInstaller.STATIC_CONTENT);
-
-
- webAppSpec.addServletContextListener(ResteasyBootstrap.class);
- webAppSpec.addServletSpecification(HttpServletDispatcher.class, RestfulObjectsViewerInstaller.ROOT);
-
-
- return webAppSpec;
- }
-}
\ 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/embedded/RestfulObjectsViewerInstaller.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/embedded/RestfulObjectsViewerInstaller.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/embedded/RestfulObjectsViewerInstaller.java
deleted file mode 100644
index ee53f72..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/embedded/RestfulObjectsViewerInstaller.java
+++ /dev/null
@@ -1,52 +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.embedded;
-
-import org.apache.isis.Isis;
-import org.apache.isis.core.runtime.installerregistry.installerapi.IsisViewerInstallerAbstract;
-import org.apache.isis.core.runtime.viewer.IsisViewer;
-import org.apache.isis.core.runtime.viewer.web.WebAppSpecification;
-
-/**
- * Convenience implementation of a {@link IsisViewer} providing the ability to
- * configured for the JSON viewer from the {@link Isis command line} using
- * <tt>--viewer restful</tt> command line option.
- *
- * <p>
- * In a production deployment the configuration represented by the
- * {@link WebAppSpecification} would be specified in the <tt>web.xml<tt> file.
- */
-public class RestfulObjectsViewerInstaller extends IsisViewerInstallerAbstract {
-
- static final String JAVAX_WS_RS_APPLICATION = "javax.ws.rs.Application";
-
- protected static final String EVERYTHING = "*";
- protected static final String ROOT = "/";
- protected static final String[] STATIC_CONTENT = new String[] { "*.js", "*.gif", "*.png", "*.html" };
-
- public RestfulObjectsViewerInstaller() {
- super("restfulobjects");
- }
-
- @Override
- protected IsisViewer doCreateViewer() {
- return new EmbeddedWebViewerRestfulObjects();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/GraphUtil.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/GraphUtil.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/GraphUtil.java
deleted file mode 100644
index e650b04..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/GraphUtil.java
+++ /dev/null
@@ -1,60 +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.representations;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import com.google.common.collect.Maps;
-
-import org.apache.isis.viewer.restfulobjects.applib.util.PathNode;
-
-@SuppressWarnings({ "rawtypes", "unchecked" })
-public final class GraphUtil {
-
- private GraphUtil() {
- }
-
- public final static Map<PathNode, Map> asGraph(final List<List<String>> links) {
- if (links == null) {
- return Collections.emptyMap();
- }
- final Map<PathNode, Map> map = Maps.newHashMap();
- for (final List<String> link : links) {
- GraphUtil.mergeInto(link, map);
- }
- return map;
- }
-
- private static void mergeInto(final List<String> list, final Map<PathNode, Map> map) {
- if (list.size() == 0) {
- return;
- }
- final String str = list.get(0);
- final PathNode node = PathNode.parse(str);
- Map<PathNode, Map> submap = map.get(node);
- if (submap == null) {
- submap = Maps.newHashMap();
- map.put(node, submap);
- }
- mergeInto(list.subList(1, list.size()), submap);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/LinkBuilder.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/LinkBuilder.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/LinkBuilder.java
deleted file mode 100644
index c475654..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/LinkBuilder.java
+++ /dev/null
@@ -1,94 +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.representations;
-
-import javax.ws.rs.core.MediaType;
-
-import org.apache.isis.viewer.restfulobjects.applib.HttpMethod;
-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;
-
-public final class LinkBuilder {
-
- public static LinkBuilder newBuilder(final RendererContext resourceContext, final Rel rel, final RepresentationType representationType, final String hrefFormat, final Object... hrefArgs) {
- return newBuilder(resourceContext, rel, representationType.getMediaType(), hrefFormat, hrefArgs);
- }
-
- public static LinkBuilder newBuilder(final RendererContext resourceContext, final Rel rel, final MediaType mediaType, final String hrefFormat, final Object... hrefArgs) {
- return new LinkBuilder(resourceContext, rel, String.format(hrefFormat, hrefArgs), mediaType);
- }
-
- private final RendererContext resourceContext;
- private final JsonRepresentation representation = JsonRepresentation.newMap();
-
- private final Rel rel;
- private final String href;
- private final MediaType mediaType;
-
- private HttpMethod method = HttpMethod.GET;
- private String title;
- private JsonRepresentation arguments;
- private JsonRepresentation value;
- private String id;
-
- protected LinkBuilder(final RendererContext resourceContext, final Rel rel, final String href, final MediaType mediaType) {
- this.resourceContext = resourceContext;
- this.rel = rel;
- this.href = href;
- this.mediaType = mediaType;
- }
-
- public LinkBuilder withHttpMethod(final HttpMethod method) {
- this.method = method;
- return this;
- }
-
- public LinkBuilder withTitle(final String title) {
- this.title = title;
- return this;
- }
-
- public LinkBuilder withArguments(final JsonRepresentation arguments) {
- this.arguments = arguments;
- return this;
- }
-
- public LinkBuilder withId(final String id) {
- this.id = id;
- return this;
- }
-
- public LinkBuilder withValue(final JsonRepresentation value) {
- this.value = value;
- return this;
- }
-
- public JsonRepresentation build() {
- representation.mapPut("id", id);
- representation.mapPut("rel", rel.getName());
- representation.mapPut("href", resourceContext.urlFor(href));
- representation.mapPut("method", method);
- representation.mapPut("type", mediaType.toString());
- representation.mapPut("title", title);
- representation.mapPut("arguments", arguments);
- representation.mapPut("value", value);
- return representation;
- }
-
-}
\ 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/representations/LinkFollower.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/LinkFollower.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/LinkFollower.java
deleted file mode 100644
index 7cb098c..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/LinkFollower.java
+++ /dev/null
@@ -1,124 +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.representations;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.util.PathNode;
-
-@SuppressWarnings({ "rawtypes", "unchecked" })
-public final class LinkFollower {
-
- public final static LinkFollower create(final List<List<String>> links) {
- final Map<PathNode, Map> graph = GraphUtil.asGraph(links);
- return new LinkFollower(graph, Mode.FOLLOWING, PathNode.NULL);
- }
-
- private enum Mode {
- FOLLOWING, TERMINATED;
- }
-
- private final Map<PathNode, Map> graph;
- private final Mode mode;
- private final PathNode root;
-
- private LinkFollower(final Map<PathNode, Map> graph, final Mode mode, final PathNode root) {
- this.graph = graph;
- this.mode = mode;
- this.root = root;
- }
-
- /**
- * A little algebra...
- */
- public LinkFollower follow(final String pathTemplate, final Object... args) {
- final String path = String.format(pathTemplate, args);
- if (path == null) {
- return terminated(PathNode.NULL);
- }
- if (mode == Mode.TERMINATED) {
- return terminated(this.root);
- }
- final PathNode node = PathNode.parse(path);
- if (mode == Mode.FOLLOWING) {
- final Map<PathNode, Map> remaining = graph.get(node);
- if (remaining != null) {
- final PathNode key = findKey(node);
- return new LinkFollower(remaining, Mode.FOLLOWING, key);
- } else {
- return terminated(node);
- }
- }
- return terminated(node);
- }
-
- /**
- * somewhat bizarre, but we have to find the actual node that is in the
- * graph; the one we matching on doesn't match on the
- * {@link PathNode#getCriteria()} map.
- */
- private PathNode findKey(final PathNode node) {
- final Set<PathNode> keySet = graph.keySet();
- for (final PathNode key : keySet) {
- if (key.equals(node)) {
- return key;
- }
- }
- // shouldn't happen
- return node;
- }
-
- private static LinkFollower terminated(final PathNode node) {
- return new LinkFollower(null, Mode.TERMINATED, node);
- }
-
- /**
- * Not public API; use {@link #matches(JsonRepresentation)}.
- */
- boolean isFollowing() {
- return mode == Mode.FOLLOWING;
- }
-
- public boolean isTerminated() {
- return mode == Mode.TERMINATED;
- }
-
- public Map<String, String> criteria() {
- return Collections.unmodifiableMap(root.getCriteria());
- }
-
- /**
- * Ensure that every key present in the provided map matches the criterium.
- *
- * <p>
- * Any keys in the criterium that are not present in the map will be
- * ignored.
- */
- public boolean matches(final JsonRepresentation link) {
- if (!isFollowing()) {
- return false;
- }
- return root == null || root.matches(link);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/RendererFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/RendererFactory.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/RendererFactory.java
deleted file mode 100644
index e467cf5..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/RendererFactory.java
+++ /dev/null
@@ -1,32 +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.representations;
-
-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;
-
-public interface RendererFactory {
-
- RepresentationType getRepresentationType();
-
- ReprRenderer<?, ?> newRenderer(RendererContext resourceContext, LinkFollower linkFollower, JsonRepresentation representation);
-
-}
\ 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/representations/RendererFactoryRegistry.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/RendererFactoryRegistry.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/RendererFactoryRegistry.java
deleted file mode 100644
index b449a04..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/RendererFactoryRegistry.java
+++ /dev/null
@@ -1,90 +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.representations;
-
-import java.util.Map;
-
-import javax.ws.rs.core.MediaType;
-
-import com.google.common.collect.Maps;
-
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domainobjects.ActionResultReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domainobjects.DomainObjectReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domainobjects.ListReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domainobjects.ObjectActionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domainobjects.ObjectCollectionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domainobjects.ObjectPropertyReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domainobjects.ScalarValueReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.ActionDescriptionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.ActionParameterDescriptionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.CollectionDescriptionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.DomainTypeReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.PropertyDescriptionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.TypeActionResultReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.TypeListReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.home.HomePageReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.user.UserReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.version.VersionReprRenderer;
-
-public class RendererFactoryRegistry {
-
- // TODO: get rid of this horrible singleton
- public final static RendererFactoryRegistry instance = new RendererFactoryRegistry();
-
- private final Map<MediaType, RendererFactory> factoryByReprType = Maps.newHashMap();
-
- RendererFactoryRegistry() {
- registerDefaults();
- }
-
- private void registerDefaults() {
- register(new HomePageReprRenderer.Factory());
- register(new UserReprRenderer.Factory());
- register(new VersionReprRenderer.Factory());
- register(new DomainObjectReprRenderer.Factory());
- register(new ObjectPropertyReprRenderer.Factory());
- register(new ObjectCollectionReprRenderer.Factory());
- register(new ObjectActionReprRenderer.Factory());
- register(new ActionResultReprRenderer.Factory());
- register(new ListReprRenderer.Factory());
- register(new ScalarValueReprRenderer.Factory());
- register(new TypeListReprRenderer.Factory());
- register(new DomainTypeReprRenderer.Factory());
- register(new PropertyDescriptionReprRenderer.Factory());
- register(new CollectionDescriptionReprRenderer.Factory());
- register(new ActionDescriptionReprRenderer.Factory());
- register(new ActionParameterDescriptionReprRenderer.Factory());
- register(new TypeActionResultReprRenderer.Factory());
- }
-
- public void register(final RendererFactory factory) {
- final RepresentationType representationType = factory.getRepresentationType();
- factoryByReprType.put(representationType.getMediaType(), factory);
- }
-
- public RendererFactory find(final MediaType mediaType) {
- return factoryByReprType.get(mediaType);
- }
-
- public RendererFactory find(final RepresentationType representationType) {
- return find(representationType.getMediaType());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRenderer.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRenderer.java
deleted file mode 100644
index c06f437..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRenderer.java
+++ /dev/null
@@ -1,32 +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.representations;
-
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-
-public interface ReprRenderer<R extends ReprRenderer<R, T>, T> {
-
- RepresentationType getRepresentationType();
-
- R with(T t);
-
- public JsonRepresentation render();
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRendererAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRendererAbstract.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRendererAbstract.java
deleted file mode 100644
index 9ac34ca..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRendererAbstract.java
+++ /dev/null
@@ -1,185 +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.representations;
-
-import java.util.List;
-
-import org.apache.isis.applib.profiles.Localization;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.Persistor;
-import org.apache.isis.core.runtime.system.transaction.UpdateNotifier;
-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.resources.domainobjects.DomainObjectReprRenderer;
-import org.apache.isis.viewer.restfulobjects.viewer.resources.domaintypes.DomainTypeReprRenderer;
-
-public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>, T> implements ReprRenderer<R, T> {
-
- protected final RendererContext resourceContext;
- private final LinkFollower linkFollower;
- private final RepresentationType representationType;
- protected final JsonRepresentation representation;
-
- protected boolean includesSelf;
-
- public ReprRendererAbstract(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- this.resourceContext = resourceContext;
- this.linkFollower = asProvidedElseCreate(linkFollower);
- this.representationType = representationType;
- this.representation = representation;
- }
-
- public RendererContext getResourceContext() {
- return resourceContext;
- }
-
- public LinkFollower getLinkFollower() {
- return linkFollower;
- }
-
- private LinkFollower asProvidedElseCreate(final LinkFollower linkFollower) {
- if (linkFollower != null) {
- return linkFollower;
- }
- return LinkFollower.create(resourceContext.getFollowLinks());
- }
-
- @Override
- public RepresentationType getRepresentationType() {
- return representationType;
- }
-
- @SuppressWarnings("unchecked")
- public R includesSelf() {
- this.includesSelf = true;
- return (R) this;
- }
-
- public R withSelf(final String href) {
- if (href != null) {
- getLinks().arrayAdd(LinkBuilder.newBuilder(resourceContext, Rel.SELF, representationType, href).build());
- }
- return cast(this);
- }
-
- public R withSelf(final JsonRepresentation link) {
- final String rel = link.getString("rel");
- if (rel == null || !rel.equals(Rel.SELF.getName())) {
- throw new IllegalArgumentException("Provided link does not have a 'rel' of 'self'; was: " + link);
- }
- if (link != null) {
- getLinks().arrayAdd(link);
- }
- return cast(this);
- }
-
- /**
- * Will lazily create links array as required
- */
- protected JsonRepresentation getLinks() {
- JsonRepresentation links = representation.getArray("links");
- if (links == null) {
- links = JsonRepresentation.newArray();
- representation.mapPut("links", links);
- }
- return links;
- }
-
- protected void addLink(final Rel rel, final ObjectSpecification objectSpec) {
- if (objectSpec == null) {
- return;
- }
- final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), rel, objectSpec);
- getLinks().arrayAdd(linkBuilder.build());
- }
-
- /**
- * Will lazily create extensions map as required
- */
- protected JsonRepresentation getExtensions() {
- JsonRepresentation extensions = representation.getMap("extensions");
- if (extensions == null) {
- extensions = JsonRepresentation.newMap();
- representation.mapPut("extensions", extensions);
- }
- return extensions;
- }
-
- public R withExtensions(final JsonRepresentation extensions) {
- if (!extensions.isMap()) {
- throw new IllegalArgumentException("extensions must be a map");
- }
- representation.mapPut("extensions", extensions);
- return cast(this);
- }
-
- @SuppressWarnings("unchecked")
- protected static <R extends ReprRendererAbstract<R, T>, T> R cast(final ReprRendererAbstract<R, T> builder) {
- return (R) builder;
- }
-
- @Override
- public abstract JsonRepresentation render();
-
- /**
- * Convenience for representations that are returned from objects that
- * mutate state.
- */
- protected final void addExtensionsIsisProprietaryChangedObjects() {
- final UpdateNotifier updateNotifier = getUpdateNotifier();
-
- addToExtensions("changed", updateNotifier.getChangedObjects());
- addToExtensions("disposed", updateNotifier.getDisposedObjects());
- }
-
- private void addToExtensions(final String key, final List<ObjectAdapter> adapters) {
- final JsonRepresentation adapterList = JsonRepresentation.newArray();
- getExtensions().mapPut(key, adapterList);
- for (final ObjectAdapter adapter : adapters) {
- adapterList.arrayAdd(DomainObjectReprRenderer.newLinkToBuilder(getResourceContext(), Rel.OBJECT, adapter).build());
- }
- }
-
- protected List<ObjectAdapter> getServiceAdapters() {
- return IsisContext.getPersistenceSession().getServices();
- }
-
- protected Persistor getPersistenceSession() {
- return IsisContext.getPersistenceSession();
- }
-
- protected AuthenticationSession getSession() {
- return IsisContext.getAuthenticationSession();
- }
-
- protected Localization getLocalization() {
- return IsisContext.getLocalization();
- }
-
- protected UpdateNotifier getUpdateNotifier() {
- return IsisContext.getCurrentTransaction().getUpdateNotifier();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRendererFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRendererFactoryAbstract.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRendererFactoryAbstract.java
deleted file mode 100644
index 6e56d68..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/ReprRendererFactoryAbstract.java
+++ /dev/null
@@ -1,36 +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.representations;
-
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-
-public abstract class ReprRendererFactoryAbstract implements RendererFactory {
-
- private final RepresentationType representationType;
-
- public ReprRendererFactoryAbstract(final RepresentationType representationType) {
- this.representationType = representationType;
- }
-
- @Override
- public RepresentationType getRepresentationType() {
- return representationType;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/75f41b75/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/WellKnownType.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/WellKnownType.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/WellKnownType.java
deleted file mode 100644
index 31f4100..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/representations/WellKnownType.java
+++ /dev/null
@@ -1,66 +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.representations;
-
-public enum WellKnownType {
-
- STRING(java.lang.String.class), BYTE(java.lang.Byte.class), SHORT(java.lang.Short.class), INT(java.lang.Integer.class), LONG(java.lang.Long.class), BOOLEAN(java.lang.Boolean.class), FLOAT(java.lang.Float.class), DOUBLE(java.lang.Double.class), BIGINT(java.math.BigInteger.class), BIGDEC(
- java.math.BigDecimal.class), OBJECT(java.lang.Object.class), LIST(java.util.List.class), SET(java.util.Set.class);
-
- private final Class<?> cls;
- private final String className;
-
- private WellKnownType(final Class<?> cls) {
- this.cls = cls;
- this.className = cls.getName();
- }
-
- public String getName() {
- return name().toLowerCase();
- }
-
- public static WellKnownType lookup(final Class<?> cls) {
- for (final WellKnownType wellKnownType : values()) {
- if (wellKnownType.cls.equals(cls)) {
- return wellKnownType;
- }
- }
- return null;
- }
-
- public static WellKnownType lookup(final String className) {
- for (final WellKnownType wellKnownType : values()) {
- if (wellKnownType.className.equals(className)) {
- return wellKnownType;
- }
- }
- return null;
- }
-
- public static String canonical(final String className) {
- final WellKnownType wellKnownType = WellKnownType.lookup(className);
- return wellKnownType != null ? wellKnownType.getName() : className;
- }
-
- public static String canonical(final Class<?> cls) {
- final WellKnownType wellKnownType = WellKnownType.lookup(cls);
- return wellKnownType != null ? wellKnownType.getName() : cls.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/ResourceAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ResourceAbstract.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
deleted file mode 100644
index b8effb8..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ResourceAbstract.java
+++ /dev/null
@@ -1,254 +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;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.core.CacheControl;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Request;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
-import javax.ws.rs.core.SecurityContext;
-import javax.ws.rs.core.UriInfo;
-
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.profiles.Localization;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.core.metamodel.services.ServiceUtil;
-import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.OidGenerator;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
-import org.apache.isis.viewer.restfulobjects.viewer.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.viewer.RestfulObjectsApplicationException;
-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.util.OidUtils;
-import org.apache.isis.viewer.restfulobjects.viewer.util.UrlDecoderUtils;
-
-public abstract class ResourceAbstract {
-
- protected final static JsonMapper jsonMapper = JsonMapper.instance();
-
- public enum Caching {
- ONE_DAY(24 * 60 * 60), ONE_HOUR(60 * 60), NONE(0);
-
- private final CacheControl cacheControl;
-
- private Caching(final int maxAge) {
- this.cacheControl = new CacheControl();
- if (maxAge > 0) {
- cacheControl.setMaxAge(maxAge);
- } else {
- cacheControl.setNoCache(true);
- }
- }
-
- public CacheControl getCacheControl() {
- return cacheControl;
- }
- }
-
- // nb: SET is excluded; we simply flatten contributed actions.
- public final static ActionType[] ACTION_TYPES = { ActionType.USER, ActionType.DEBUG, ActionType.EXPLORATION };
-
- // TODO: should inject this instead...
- protected final static RendererFactoryRegistry rendererFactoryRegistry = RendererFactoryRegistry.instance;
-
- @Context
- HttpHeaders httpHeaders;
-
- @Context
- UriInfo uriInfo;
-
- @Context
- Request request;
-
- @Context
- HttpServletRequest httpServletRequest;
-
- @Context
- HttpServletResponse httpServletResponse;
-
- @Context
- SecurityContext securityContext;
-
- private ResourceContext resourceContext;
-
- protected void init(Where where) {
- init(RepresentationType.GENERIC, where);
- }
-
- protected void init(final RepresentationType representationType, Where where) {
- if (!IsisContext.inSession()) {
- throw RestfulObjectsApplicationException.create(HttpStatusCode.UNAUTHORIZED);
- }
- if (getAuthenticationSession() == null) {
- throw RestfulObjectsApplicationException.create(HttpStatusCode.UNAUTHORIZED);
- }
-
- this.resourceContext = new ResourceContext(representationType, httpHeaders, uriInfo, request, httpServletRequest, httpServletResponse, securityContext, getLocalization(), getAuthenticationSession(), getPersistenceSession(), getAdapterManager(), getSpecificationLoader(), getConfiguration(), where);
- }
-
- protected ResourceContext getResourceContext() {
- return resourceContext;
- }
-
- // //////////////////////////////////////////////////////////////
- // Rendering
- // //////////////////////////////////////////////////////////////
-
- protected static String jsonFor(final Object object) {
- try {
- return jsonMapper.write(object);
- } catch (final JsonGenerationException e) {
- throw new RuntimeException(e);
- } catch (final JsonMappingException e) {
- throw new RuntimeException(e);
- } catch (final IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- // //////////////////////////////////////////////////////////////
- // Isis integration
- // //////////////////////////////////////////////////////////////
-
- protected ObjectSpecification getSpecification(final String specFullName) {
- return getSpecificationLoader().loadSpecification(specFullName);
- }
-
- protected ObjectAdapter getObjectAdapter(final String oidEncodedStr) {
-
- final ObjectAdapter objectAdapter = OidUtils.getObjectAdapter(resourceContext, oidEncodedStr);
-
- if (objectAdapter == null) {
- final String oidStr = UrlDecoderUtils.urlDecode(oidEncodedStr);
- throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND, "could not determine adapter for OID: '%s'", oidStr);
- }
- return objectAdapter;
- }
-
- protected ObjectAdapter getServiceAdapter(final String serviceId) {
- final List<ObjectAdapter> serviceAdapters = getPersistenceSession().getServices();
- for (final ObjectAdapter serviceAdapter : serviceAdapters) {
- final Object servicePojo = serviceAdapter.getObject();
- final String id = ServiceUtil.id(servicePojo);
- if (serviceId.equals(id)) {
- return serviceAdapter;
- }
- }
- throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND, "Could not locate service '%s'", serviceId);
- }
-
- protected String getOidStr(final ObjectAdapter objectAdapter) {
- return OidUtils.getOidStr(resourceContext, objectAdapter);
- }
-
- // //////////////////////////////////////////////////////////////
- // Responses
- // //////////////////////////////////////////////////////////////
-
- public static ResponseBuilder responseOfNoContent() {
- return responseOf(HttpStatusCode.NO_CONTENT);
- }
-
- public static ResponseBuilder responseOfOk(final ReprRenderer<?, ?> renderer, final Caching caching) {
- return responseOfOk(renderer, caching, null);
- }
-
- public static ResponseBuilder responseOfOk(final ReprRenderer<?, ?> renderer, final Caching caching, final Version version) {
- final RepresentationType representationType = renderer.getRepresentationType();
- final ResponseBuilder response = responseOf(HttpStatusCode.OK).type(representationType.getMediaType()).cacheControl(caching.getCacheControl()).entity(jsonFor(renderer.render()));
- return addLastModifiedAndETagIfAvailable(response, version);
- }
-
- private static ResponseBuilder responseOf(final HttpStatusCode httpStatusCode) {
- return Response.status(httpStatusCode.getJaxrsStatusType()).type(MediaType.APPLICATION_JSON_TYPE);
- }
-
- public static ResponseBuilder addLastModifiedAndETagIfAvailable(final ResponseBuilder responseBuilder, final Version version) {
- if (version != null && version.getTime() != null) {
- final Date time = version.getTime();
- responseBuilder.lastModified(time);
- responseBuilder.tag("" + time);
- }
- return responseBuilder;
- }
-
- // //////////////////////////////////////////////////////////////
- // Dependencies (from singletons)
- // //////////////////////////////////////////////////////////////
-
- protected IsisConfiguration getConfiguration () {
- return IsisContext.getConfiguration();
- }
-
- protected AuthenticationSession getAuthenticationSession() {
- return IsisContext.getAuthenticationSession();
- }
-
- protected SpecificationLoaderSpi getSpecificationLoader() {
- return IsisContext.getSpecificationLoader();
- }
-
- protected AdapterManager getAdapterManager() {
- return getPersistenceSession().getAdapterManager();
- }
-
- protected PersistenceSession getPersistenceSession() {
- return IsisContext.getPersistenceSession();
- }
-
- private OidGenerator getOidGenerator() {
- return getPersistenceSession().getOidGenerator();
- }
-
- protected Localization getLocalization() {
- return IsisContext.getLocalization();
- }
-
- // //////////////////////////////////////////////////////////////
- // Dependencies (injected via @Context)
- // //////////////////////////////////////////////////////////////
-
- protected HttpServletRequest getServletRequest() {
- return getResourceContext().getHttpServletRequest();
- }
-
-}
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/AbstractObjectMemberReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java b/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java
deleted file mode 100644
index 4be4513..0000000
--- a/component/viewer/restfulobjects/impl/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java
+++ /dev/null
@@ -1,259 +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.codehaus.jackson.node.NullNode;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-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.ReprRendererAbstract;
-
-public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbstract<R, ObjectAndMember<T>>, T extends ObjectMember> extends ReprRendererAbstract<R, ObjectAndMember<T>> {
-
- protected enum Mode {
- INLINE, FOLLOWED, STANDALONE, MUTATED, ARGUMENTS;
-
- public boolean isInline() {
- return this == INLINE;
- }
-
- public boolean isFollowed() {
- return this == FOLLOWED;
- }
-
- public boolean isStandalone() {
- return this == STANDALONE;
- }
-
- public boolean isMutated() {
- return this == MUTATED;
- }
-
- public boolean isArguments() {
- return this == ARGUMENTS;
- }
- }
-
- protected ObjectAdapterLinkTo linkTo;
-
- protected ObjectAdapter objectAdapter;
- protected MemberType memberType;
- protected T objectMember;
- protected Mode mode = Mode.INLINE; // unless we determine otherwise
-
- private final Where where;
-
- public AbstractObjectMemberReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation, Where where) {
- super(resourceContext, linkFollower, representationType, representation);
- this.where = where;
- }
-
- @Override
- public R with(final ObjectAndMember<T> objectAndMember) {
- this.objectAdapter = objectAndMember.getObjectAdapter();
- this.objectMember = objectAndMember.getMember();
- this.memberType = MemberType.determineFrom(objectMember);
- usingLinkTo(new DomainObjectLinkTo());
-
- // done eagerly so can use as criteria for x-ro-follow-links
- representation.mapPut(memberType.getJsProp(), objectMember.getId());
- representation.mapPut("memberType", memberType.getName());
-
- return cast(this);
- }
-
- /**
- * Must be called after {@link #with(ObjectAndMember)} (which provides the
- * {@link #objectAdapter}).
- */
- public R usingLinkTo(final ObjectAdapterLinkTo linkTo) {
- this.linkTo = linkTo.usingUrlBase(resourceContext).with(objectAdapter);
- return cast(this);
- }
-
- /**
- * Indicate that this is a standalone representation.
- */
- public R asStandalone() {
- mode = Mode.STANDALONE;
- return cast(this);
- }
-
- /**
- * Indicate that this is a representation to include as the result of a
- * followed link.
- */
- public R asFollowed() {
- mode = Mode.FOLLOWED;
- return cast(this);
- }
-
- /**
- * Indicates that the representation was produced as the result of a
- * resource that mutated the state.
- *
- * <p>
- * The effect of this is to suppress the link to self.
- */
- public R asMutated() {
- mode = Mode.MUTATED;
- return cast(this);
- }
-
- public R asArguments() {
- mode = Mode.ARGUMENTS;
- return cast(this);
- }
-
- /**
- * For subclasses to call from their {@link #render()} method.
- */
- protected void renderMemberContent() {
- if (mode.isInline()) {
- addDetailsLinkIfPersistent();
- }
-
- if (mode.isStandalone()) {
- addLinkToSelf();
- }
-
- if (mode.isStandalone() || mode.isMutated()) {
- addLinkToUp();
- }
-
- if (mode.isFollowed() || mode.isStandalone() || mode.isMutated()) {
- addMutatorsIfEnabled();
-
- putExtensionsIsisProprietary();
- addLinksToFormalDomainModel();
- addLinksIsisProprietary();
- }
- }
-
- private void addLinkToSelf() {
- getLinks().arrayAdd(linkTo.memberBuilder(Rel.SELF, memberType, objectMember).build());
- }
-
- private void addLinkToUp() {
- getLinks().arrayAdd(linkTo.builder(Rel.UP).build());
- }
-
- protected abstract void addMutatorsIfEnabled();
-
- /**
- * For subclasses to call back to when {@link #addMutatorsIfEnabled() adding
- * mutators}.
- */
- protected void addLinkFor(final MutatorSpec mutatorSpec) {
- if (!hasMemberFacet(mutatorSpec.mutatorFacetType)) {
- return;
- }
- final JsonRepresentation arguments = mutatorArgs(mutatorSpec);
- final RepresentationType representationType = memberType.getRepresentationType();
- final JsonRepresentation mutatorLink = linkToForMutatorInvoke().memberBuilder(mutatorSpec.rel, memberType, objectMember, representationType, mutatorSpec.suffix).withHttpMethod(mutatorSpec.httpMethod).withArguments(arguments).build();
- getLinks().arrayAdd(mutatorLink);
- }
-
- /**
- * Hook to allow actions to render invoke links that point to the
- * contributing service.
- */
- protected ObjectAdapterLinkTo linkToForMutatorInvoke() {
- return linkTo;
- }
-
- /**
- * Default implementation (common to properties and collections) that can be
- * overridden (ie by actions) if required.
- */
- protected JsonRepresentation mutatorArgs(final MutatorSpec mutatorSpec) {
- if (mutatorSpec.arguments.isNone()) {
- return null;
- }
- if (mutatorSpec.arguments.isOne()) {
- final JsonRepresentation repr = JsonRepresentation.newMap();
- repr.mapPut("value", NullNode.getInstance()); // force a null into
- // the map
- return repr;
- }
- // overridden by actions
- throw new UnsupportedOperationException("override mutatorArgs() to populate for many arguments");
- }
-
- private void addDetailsLinkIfPersistent() {
- if (!objectAdapter.representsPersistent()) {
- return;
- }
- final JsonRepresentation link = linkTo.memberBuilder(Rel.DETAILS, memberType, objectMember).build();
- getLinks().arrayAdd(link);
-
- final LinkFollower membersLinkFollower = getLinkFollower();
- final LinkFollower detailsLinkFollower = membersLinkFollower.follow("links[rel=%s]", Rel.DETAILS.getName());
- if (membersLinkFollower.matches(representation) && detailsLinkFollower.matches(link)) {
- followDetailsLink(link);
- }
- return;
- }
-
- protected abstract void followDetailsLink(JsonRepresentation detailsLink);
-
- protected final void putDisabledReasonIfDisabled() {
- final String disabledReasonRep = usability().getReason();
- representation.mapPut("disabledReason", disabledReasonRep);
- }
-
- protected abstract void putExtensionsIsisProprietary();
-
- protected abstract void addLinksToFormalDomainModel();
-
- protected abstract void addLinksIsisProprietary();
-
- /**
- * Convenience method.
- */
- public boolean isMemberVisible() {
- return visibility().isAllowed();
- }
-
- protected <F extends Facet> F getMemberSpecFacet(final Class<F> facetType) {
- final ObjectSpecification otoaSpec = objectMember.getSpecification();
- return otoaSpec.getFacet(facetType);
- }
-
- protected boolean hasMemberFacet(final Class<? extends Facet> facetType) {
- return objectMember.getFacet(facetType) != null;
- }
-
- protected Consent usability() {
- return objectMember.isUsable(getSession(), objectAdapter, where);
- }
-
- protected Consent visibility() {
- return objectMember.isVisible(getSession(), objectAdapter, where);
- }
-
-}
\ No newline at end of file