You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2011/07/22 01:16:37 UTC
svn commit: r1149403 - in /incubator/isis/trunk/framework: ./
core/commons/src/main/java/org/apache/isis/core/commons/lang/
runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/
runtimes/dflt/webserver/src/main/java/org/apache/...
Author: danhaywood
Date: Thu Jul 21 23:16:31 2011
New Revision: 1149403
URL: http://svn.apache.org/viewvc?rev=1149403&view=rev
Log:
ISIS-109: started work on the tck tests for json viewer
Added:
incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerStartupMode.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Method.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/boot/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/boot/BootstrapResource.java
- copied, changed from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/BootstrapResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/DomainObjectResource.java
- copied, changed from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/DomainObjectResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesResource.java
- copied, changed from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/ServicesResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePage.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageResource.java
- copied, changed from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/HomePageResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/types/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/types/SpecsResource.java
- copied, changed from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/SpecsResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserResource.java
- copied, changed from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/UserResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/HomePageResourceTest.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/
Removed:
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/BootstrapResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/DomainObjectResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/HomePageResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/ServicesResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/SpecsResource.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/UserResource.java
Modified:
incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java
incubator/isis/trunk/framework/pom.xml
incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServer.java
incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerBootstrapper.java
incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerConstants.java
incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerPort.java
incubator/isis/trunk/framework/viewer/json/json-tck/pom.xml
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceImpl.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/DomainObjectResourceImpl.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/MemberRepType.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/services/ServicesResourceImpl.java
Modified: incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java (original)
+++ incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java Thu Jul 21 23:16:31 2011
@@ -329,4 +329,13 @@ public final class StringUtils {
}
}
+ public static String coalesce(String... strings) {
+ for(String str: strings) {
+ if(str != null) {
+ return str;
+ }
+ }
+ return null;
+ }
+
}
Modified: incubator/isis/trunk/framework/pom.xml
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/pom.xml?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/pom.xml (original)
+++ incubator/isis/trunk/framework/pom.xml Thu Jul 21 23:16:31 2011
@@ -194,8 +194,13 @@
<id>Maven Central Repository (UK Mirror)</id>
<url>http://uk.maven.org/maven2</url>
</repository>
+ <repository>
+ <id>JBoss Public Release</id>
+ <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
+ </repository>
</repositories>
+
<build>
<extensions>
<!-- scp and sftp support for deployments. -->
@@ -1085,7 +1090,7 @@ archetype includes this explicit depende
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
- <version>2.2.0.GA</version>
+ <version>2.2.1.GA</version>
<exclusions>
<!-- instead use org.apache.geronimo.specs:geronimo-servlet_2.5_spec -->
<exclusion>
@@ -1104,6 +1109,11 @@ archetype includes this explicit depende
</exclusion>
</exclusions>
</dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-client</artifactId>
+ <version>1.0-beta-8</version>
+ </dependency>
<!-- predicate libraries -->
Modified: incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServer.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServer.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServer.java Thu Jul 21 23:16:31 2011
@@ -19,17 +19,66 @@
package org.apache.isis.runtimes.dflt.webserver;
+import java.net.URI;
+import java.text.MessageFormat;
+import java.util.Formatter;
+
import org.apache.isis.core.commons.lang.ArrayUtils;
+import org.apache.isis.core.commons.lang.StringUtils;
+import org.apache.isis.runtimes.dflt.runtime.runner.Constants;
import org.apache.isis.runtimes.dflt.runtime.runner.IsisRunner;
import org.apache.isis.runtimes.dflt.webserver.internal.OptionHandlerAddress;
import org.apache.isis.runtimes.dflt.webserver.internal.OptionHandlerDeploymentTypeWebServer;
import org.apache.isis.runtimes.dflt.webserver.internal.OptionHandlerPort;
import org.apache.isis.runtimes.dflt.webserver.internal.OptionHandlerResourceBase;
+import org.apache.isis.runtimes.dflt.webserver.internal.OptionHandlerStartupMode;
+import org.mortbay.jetty.Connector;
+import org.mortbay.jetty.Handler;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.webapp.WebAppContext;
+import org.mortbay.util.URIUtil;
public class WebServer {
+ public static enum StartupMode {
+ FOREGROUND,
+ BACKGROUND;
+
+ public static StartupMode lookup(String value) {
+ if(value == null) {
+ return null;
+ }
+ try {
+ return valueOf(value.toUpperCase());
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public boolean isForeground() {
+ return this == FOREGROUND;
+ }
+
+ public boolean isBackground() {
+ return this == BACKGROUND;
+ }
+
+ }
+
+ private Server jettyServer;
+
public static void main(final String[] args) {
- new WebServer().run(ArrayUtils.append(args, "--nosplash"));
+ new WebServer().run(ArrayUtils.append(args, "--" + Constants.NO_SPLASH_LONG_OPT));
+ }
+
+ /**
+ * Originally introduced to allow the WebServer to be used by tests.
+ */
+ public void run(int port) {
+ String[] args = new String[0];
+ args = OptionHandlerStartupMode.appendArg(args,StartupMode.BACKGROUND);
+ args = OptionHandlerPort.appendArg(args,port);
+ run(args);
}
public void run(final String[] args) {
@@ -39,12 +88,51 @@ public class WebServer {
runner.addOptionHandler(new OptionHandlerPort());
runner.addOptionHandler(new OptionHandlerAddress());
runner.addOptionHandler(new OptionHandlerResourceBase());
+ runner.addOptionHandler(new OptionHandlerStartupMode());
if (!runner.parseAndValidate()) {
return;
}
- runner.bootstrap(new WebServerBootstrapper(runner));
+ WebServerBootstrapper bootstrapper = new WebServerBootstrapper(runner);
+ runner.bootstrap(bootstrapper);
+ jettyServer = bootstrapper.getJettyServer();
}
+ public void stop() {
+ if(jettyServer == null) {
+ return;
+ }
+ try {
+ jettyServer.stop();
+ } catch (Exception e) {
+ e.printStackTrace(System.err);
+ }
+ }
+
+ public URI getBase() {
+ return URI.create(baseFor(jettyServer));
+ }
+
+ private String baseFor(Server jettyServer) {
+ Connector connector = jettyServer.getConnectors()[0];
+ String scheme = "http";
+ String host = StringUtils.coalesce(connector.getHost(), "localhost");
+ int port = connector.getPort();
+
+ WebAppContext handler = (WebAppContext) jettyServer.getHandler();
+ String contextPath = handler.getContextPath();
+
+ StringBuilder buf = new StringBuilder();
+ Formatter formatter = new Formatter(buf);
+ formatter.format("%s://%s:%d/%s", scheme, host, port, contextPath);
+ return appendSlashIfRequired(buf).toString();
+ }
+
+ private static StringBuilder appendSlashIfRequired(StringBuilder buf) {
+ if(buf.charAt(buf.length()-1) != '/') {
+ buf.append('/');
+ }
+ return buf;
+ }
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerBootstrapper.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerBootstrapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerBootstrapper.java Thu Jul 21 23:16:31 2011
@@ -23,6 +23,8 @@ import static org.apache.isis.runtimes.d
import static org.apache.isis.runtimes.dflt.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_PORT_KEY;
import static org.apache.isis.runtimes.dflt.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_RESOURCE_BASE_DEFAULT;
import static org.apache.isis.runtimes.dflt.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_RESOURCE_BASE_KEY;
+import static org.apache.isis.runtimes.dflt.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY;
+import static org.apache.isis.runtimes.dflt.webserver.WebServerConstants.EMBEDDED_WEB_SERVER_STARTUP_MODE_DEFAULT;
import java.util.HashMap;
import java.util.List;
@@ -36,14 +38,20 @@ import org.apache.isis.core.commons.lang
import org.apache.isis.runtimes.dflt.runtime.runner.IsisBootstrapper;
import org.apache.isis.runtimes.dflt.runtime.runner.IsisRunner;
import org.apache.isis.runtimes.dflt.webapp.WebAppConstants;
+import org.apache.isis.runtimes.dflt.webserver.WebServer.StartupMode;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.webapp.WebAppContext;
import com.google.inject.Injector;
final class WebServerBootstrapper implements IsisBootstrapper {
+
private static final String SRC_MAIN_WEBAPP = "src/main/webapp";
+
private final IsisRunner runner;
+
+ private Server jettyServer;
+
WebServerBootstrapper(final IsisRunner runner) {
this.runner = runner;
@@ -63,20 +71,28 @@ final class WebServerBootstrapper implem
final int port = configuration.getInteger(EMBEDDED_WEB_SERVER_PORT_KEY, EMBEDDED_WEB_SERVER_PORT_DEFAULT);
final String webappContextPath =
configuration.getString(EMBEDDED_WEB_SERVER_RESOURCE_BASE_KEY, EMBEDDED_WEB_SERVER_RESOURCE_BASE_DEFAULT);
+ StartupMode startupMode = StartupMode.lookup(
+ configuration.getString(EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY, EMBEDDED_WEB_SERVER_STARTUP_MODE_DEFAULT));
- final Server server = new Server(port);
+ jettyServer = new Server(port);
final WebAppContext context = new WebAppContext(SRC_MAIN_WEBAPP, webappContextPath);
copyConfigurationPrimersIntoServletContext(context);
- server.setHandler(context);
+ jettyServer.setHandler(context);
try {
- server.start();
- server.join();
+ jettyServer.start();
+ if(startupMode.isForeground()) {
+ jettyServer.join();
+ }
} catch (final Exception ex) {
throw new IsisException("Unable to start Jetty server", ex);
}
}
+
+ public Server getJettyServer() {
+ return jettyServer;
+ }
/**
* Bound to the {@link WebAppContext} so that they can be used when bootstrapping.
Modified: incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerConstants.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerConstants.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerConstants.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/WebServerConstants.java Thu Jul 21 23:16:31 2011
@@ -21,6 +21,7 @@ package org.apache.isis.runtimes.dflt.we
import org.apache.isis.core.commons.config.ConfigurationConstants;
import org.apache.isis.runtimes.dflt.runtime.installerregistry.installerapi.EmbeddedWebServerInstaller;
+import org.apache.isis.runtimes.dflt.webserver.WebServer.StartupMode;
public final class WebServerConstants {
@@ -35,6 +36,9 @@ public final class WebServerConstants {
public static final String EMBEDDED_WEB_SERVER_RESOURCE_BASE_KEY = ROOT + "webapp";
public static final String EMBEDDED_WEB_SERVER_RESOURCE_BASE_DEFAULT = ""; // or "webapp" ??
+ public static final String EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY = ROOT + "startupMode";
+ public static final String EMBEDDED_WEB_SERVER_STARTUP_MODE_DEFAULT = StartupMode.FOREGROUND.name();
+
private WebServerConstants() {
}
Modified: incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerPort.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerPort.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerPort.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerPort.java Thu Jul 21 23:16:31 2011
@@ -27,6 +27,7 @@ import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.lang.ArrayUtils;
import org.apache.isis.core.runtime.optionhandler.BootPrinter;
import org.apache.isis.core.runtime.optionhandler.OptionHandler;
import org.apache.isis.runtimes.dflt.webserver.WebServerConstants;
@@ -36,6 +37,10 @@ public final class OptionHandlerPort imp
static final String PORT_LONG_OPT = "port";
static final String PORT_OPT = "p";
+ public static String[] appendArg(String[] args, int port) {
+ return ArrayUtils.append(args, "--" + PORT_LONG_OPT, "" + port);
+ }
+
@Override
@SuppressWarnings("static-access")
public void addOption(final Options options) {
Added: incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerStartupMode.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerStartupMode.java?rev=1149403&view=auto
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerStartupMode.java (added)
+++ incubator/isis/trunk/framework/runtimes/dflt/webserver/src/main/java/org/apache/isis/runtimes/dflt/webserver/internal/OptionHandlerStartupMode.java Thu Jul 21 23:16:31 2011
@@ -0,0 +1,67 @@
+/*
+ * 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.runtimes.dflt.webserver.internal;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.commons.cli.Options;
+import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.lang.ArrayUtils;
+import org.apache.isis.core.runtime.optionhandler.BootPrinter;
+import org.apache.isis.core.runtime.optionhandler.OptionHandler;
+import org.apache.isis.runtimes.dflt.webserver.WebServer.StartupMode;
+import org.apache.isis.runtimes.dflt.webserver.WebServerConstants;
+
+public final class OptionHandlerStartupMode implements OptionHandler {
+
+ static final String STARTUP_MODE_LONG_OPT = "startup";
+ static final String STARTUP_MODE_BASE_OPT = "a";
+
+ public static String[] appendArg(String[] args, StartupMode startupMode) {
+ return ArrayUtils.append(args, "--" + STARTUP_MODE_LONG_OPT, "" + startupMode.name());
+ }
+
+ private StartupMode startupMode;
+
+ @Override
+ @SuppressWarnings("static-access")
+ public void addOption(final Options options) {
+ final Option option =
+ OptionBuilder.withArgName("startup mode").hasArg()
+ .withLongOpt(OptionHandlerStartupMode.STARTUP_MODE_LONG_OPT)
+ .withDescription("start in foreground (sync) or background (async)").create(OptionHandlerStartupMode.STARTUP_MODE_BASE_OPT);
+ options.addOption(option);
+ }
+
+ @Override
+ public boolean handle(final CommandLine commandLine, final BootPrinter bootPrinter, final Options options) {
+ startupMode = StartupMode.lookup(commandLine.getOptionValue(OptionHandlerStartupMode.STARTUP_MODE_BASE_OPT));
+ return true;
+ }
+
+ @Override
+ public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+ if(startupMode != null) {
+ isisConfigurationBuilder.add(WebServerConstants.EMBEDDED_WEB_SERVER_STARTUP_MODE_KEY, startupMode.name());
+ }
+ }
+
+}
\ No newline at end of file
Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java?rev=1149403&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java Thu Jul 21 23:16:31 2011
@@ -0,0 +1,33 @@
+package org.apache.isis.viewer.json.applib.blocks;
+
+public class Link {
+
+ private String rel;
+ private String href;
+ private Method method;
+
+ public String getRel() {
+ return rel;
+ }
+ public void setRel(String rel) {
+ this.rel = rel;
+ }
+ public String getHref() {
+ return href;
+ }
+ public void setHref(String href) {
+ this.href = href;
+ }
+ public Method getMethod() {
+ return method;
+ }
+ public void setMethod(Method method) {
+ this.method = method;
+ }
+ @Override
+ public String toString() {
+ return "Link [rel=" + rel + ", href=" + href + ", method=" + method + "]";
+ }
+
+
+}
Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Method.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Method.java?rev=1149403&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Method.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Method.java Thu Jul 21 23:16:31 2011
@@ -0,0 +1,8 @@
+package org.apache.isis.viewer.json.applib.blocks;
+
+public enum Method {
+ GET,
+ PUT,
+ POST,
+ DELETE
+}
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/boot/BootstrapResource.java (from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/BootstrapResource.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/boot/BootstrapResource.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/boot/BootstrapResource.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/BootstrapResource.java&r1=1148920&r2=1149403&rev=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/BootstrapResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/boot/BootstrapResource.java Thu Jul 21 23:16:31 2011
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.viewer.json.applib.resources;
+package org.apache.isis.viewer.json.applib.boot;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/DomainObjectResource.java (from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/DomainObjectResource.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/DomainObjectResource.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/DomainObjectResource.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/DomainObjectResource.java&r1=1148920&r2=1149403&rev=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/DomainObjectResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/DomainObjectResource.java Thu Jul 21 23:16:31 2011
@@ -16,11 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.viewer.json.applib.resources;
+package org.apache.isis.viewer.json.applib.domain;
import java.io.InputStream;
import java.util.List;
+import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -32,39 +33,46 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.jboss.resteasy.annotations.ClientResponseType;
+
// under /objects
public interface DomainObjectResource {
@GET
@Path("/{oid}")
@Produces({ MediaType.APPLICATION_JSON })
- public String object(@PathParam("oid") final String oidStr);
+ @ClientResponseType(entityType=String.class)
+ public Response object(@PathParam("oid") final String oidStr);
@GET
@Path("/{oid}/properties{propertyId}")
@Produces({ MediaType.APPLICATION_JSON })
- public String propertyDetails(
+ @ClientResponseType(entityType=String.class)
+ public Response propertyDetails(
@PathParam("oid") final String oidStr,
@PathParam("propertyId") final String propertyId);
@GET
@Path("/{oid}/collections/{collectionId}")
@Produces({ MediaType.APPLICATION_JSON })
- public String accessCollection(
+ @ClientResponseType(entityType=String.class)
+ public Response accessCollection(
@PathParam("oid") final String oidStr,
@PathParam("collectionId") final String collectionId);
@GET
@Path("/{oid}/actions/{actionId}")
@Produces({ MediaType.APPLICATION_JSON })
- public String actionPrompt(
+ @ClientResponseType(entityType=String.class)
+ public Response actionPrompt(
@PathParam("oid") final String oidStr,
@PathParam("actionId") final String actionId);
@GET
@Path("/{oid}/actions/{actionId}/invoke")
@Produces({ MediaType.APPLICATION_JSON })
- public Object invokeActionIdempotent(
+ @ClientResponseType(entityType=String.class)
+ public Response invokeActionIdempotent(
@PathParam("oid") final String oidStr,
@PathParam("actionId") final String actionId,
@QueryParam("arg") final List<String> arguments);
@@ -72,6 +80,8 @@ public interface DomainObjectResource {
@PUT
@Path("/{oid}/properties{propertyId}")
@Produces({ MediaType.APPLICATION_JSON })
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @ClientResponseType(entityType=String.class)
public Response modifyProperty(
@PathParam("oid") final String oidStr,
@PathParam("propertyId") final String propertyId,
@@ -79,6 +89,7 @@ public interface DomainObjectResource {
@PUT
@Path("/{oid}/collections/{collectionId}")
+ @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public Response addToSet(
@PathParam("oid") final String oidStr,
@@ -88,6 +99,7 @@ public interface DomainObjectResource {
@DELETE
@Path("/{oid}/properties/{propertyId}")
@Produces({ MediaType.APPLICATION_JSON })
+ @ClientResponseType(entityType=String.class)
public Response clearProperty(
@PathParam("oid") final String oidStr,
@PathParam("propertyId") final String propertyId);
@@ -95,6 +107,8 @@ public interface DomainObjectResource {
@DELETE
@Path("/{oid}/collections/{collectionId}")
@Produces({ MediaType.APPLICATION_JSON })
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @ClientResponseType(entityType=String.class)
public Response removeFromCollection(
@PathParam("oid") final String oidStr,
@PathParam("collectionId") final String collectionId,
@@ -103,6 +117,8 @@ public interface DomainObjectResource {
@POST
@Path("/{oid}/collections/{collectionId}")
@Produces({ MediaType.APPLICATION_JSON })
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @ClientResponseType(entityType=String.class)
public Response addToList(
@PathParam("oid") final String oidStr,
@PathParam("collectionId") final String collectionId,
@@ -111,7 +127,9 @@ public interface DomainObjectResource {
@POST
@Path("/{oid}/actions/{actionId}/invoke")
@Produces({ MediaType.APPLICATION_JSON })
- public Object invokeAction(
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @ClientResponseType(entityType=String.class)
+ public Response invokeAction(
@PathParam("oid") final String oidStr,
@PathParam("actionId") final String actionId,
final InputStream body);
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesResource.java (from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/ServicesResource.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesResource.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesResource.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/ServicesResource.java&r1=1148920&r2=1149403&rev=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/ServicesResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesResource.java Thu Jul 21 23:16:31 2011
@@ -16,18 +16,22 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.viewer.json.applib.resources;
+package org.apache.isis.viewer.json.applib.domain;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.jboss.resteasy.annotations.ClientResponseType;
public interface ServicesResource {
@GET
- @Produces({ MediaType.APPLICATION_JSON })
@Path("/")
- public String services();
+ @Produces({ MediaType.APPLICATION_JSON })
+ @ClientResponseType(entityType=String.class)
+ public Response services();
}
\ No newline at end of file
Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePage.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePage.java?rev=1149403&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePage.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePage.java Thu Jul 21 23:16:31 2011
@@ -0,0 +1,28 @@
+package org.apache.isis.viewer.json.applib.homepage;
+
+import org.apache.isis.viewer.json.applib.blocks.Link;
+
+public class HomePage {
+
+ private Link user;
+ private Link services;
+ public Link getUser() {
+ return user;
+ }
+ public void setUser(Link user) {
+ this.user = user;
+ }
+ public Link getServices() {
+ return services;
+ }
+ public void setServices(Link services) {
+ this.services = services;
+ }
+
+ @Override
+ public String toString() {
+ return "HomePage [user=" + user + ", services=" + services + "]";
+ }
+
+
+}
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageResource.java (from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/HomePageResource.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageResource.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageResource.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/HomePageResource.java&r1=1148920&r2=1149403&rev=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/HomePageResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageResource.java Thu Jul 21 23:16:31 2011
@@ -16,16 +16,20 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.viewer.json.applib.resources;
+package org.apache.isis.viewer.json.applib.homepage;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.jboss.resteasy.annotations.ClientResponseType;
public interface HomePageResource {
@GET
@Produces({ MediaType.APPLICATION_JSON })
- public String resources();
+ @ClientResponseType(entityType=String.class)
+ public Response resources();
}
\ No newline at end of file
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/types/SpecsResource.java (from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/SpecsResource.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/types/SpecsResource.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/types/SpecsResource.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/SpecsResource.java&r1=1148920&r2=1149403&rev=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/SpecsResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/types/SpecsResource.java Thu Jul 21 23:16:31 2011
@@ -16,66 +16,79 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.viewer.json.applib.resources;
+package org.apache.isis.viewer.json.applib.types;
import javax.ws.rs.GET;
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.jboss.resteasy.annotations.ClientResponseType;
+
+@Path("/types")
public interface SpecsResource {
@GET
@Path("/")
@Produces({ MediaType.APPLICATION_JSON })
- public abstract String specs();
+ @ClientResponseType(entityType=String.class)
+ public abstract Response specs();
@GET
@Path("/{specFullName}")
@Produces({ MediaType.APPLICATION_JSON })
- public abstract String spec(@PathParam("specFullName") final String specFullName);
+ @ClientResponseType(entityType=String.class)
+ public abstract Response spec(@PathParam("specFullName") final String specFullName);
@GET
@Path("/{specFullName}/facet/{facetType}")
@Produces({ MediaType.APPLICATION_JSON })
- public abstract String specFacet(@PathParam("specFullName") final String specFullName,
+ @ClientResponseType(entityType=String.class)
+ public abstract Response specFacet(@PathParam("specFullName") final String specFullName,
@PathParam("facetType") final String facetTypeName);
@GET
@Path("/{specFullName}/property/{propertyName}")
@Produces({ MediaType.APPLICATION_JSON })
- public abstract String specProperty(@PathParam("specFullName") final String specFullName,
+ @ClientResponseType(entityType=String.class)
+ public abstract Response specProperty(@PathParam("specFullName") final String specFullName,
@PathParam("propertyName") final String propertyName);
@GET
@Path("/{specFullName}/collection/{collectionName}")
@Produces({ MediaType.APPLICATION_JSON })
- public abstract String specCollection(@PathParam("specFullName") final String specFullName,
+ @ClientResponseType(entityType=String.class)
+ public abstract Response specCollection(@PathParam("specFullName") final String specFullName,
@PathParam("collectionName") final String collectionName);
@GET
@Path("/{specFullName}/action/{actionId}")
@Produces({ MediaType.APPLICATION_JSON })
- public abstract String specAction(@PathParam("specFullName") final String specFullName,
+ @ClientResponseType(entityType=String.class)
+ public abstract Response specAction(@PathParam("specFullName") final String specFullName,
@PathParam("actionId") final String actionId);
@GET
@Path("/{specFullName}/property/{propertyName}/facet/{facetType}")
@Produces({ MediaType.APPLICATION_JSON })
- public abstract String specPropertyFacet(@PathParam("specFullName") final String specFullName,
+ @ClientResponseType(entityType=String.class)
+ public abstract Response specPropertyFacet(@PathParam("specFullName") final String specFullName,
@PathParam("propertyName") final String propertyName, @PathParam("facetType") final String facetTypeName);
@GET
@Path("/{specFullName}/collection/{collectionName}/facet/{facetType}")
@Produces({ MediaType.APPLICATION_JSON })
- public abstract String specCollectionFacet(@PathParam("specFullName") final String specFullName,
+ @ClientResponseType(entityType=String.class)
+ public abstract Response specCollectionFacet(@PathParam("specFullName") final String specFullName,
@PathParam("collectionName") final String collectionName, @PathParam("facetType") final String facetTypeName);
@GET
@Path("/{specFullName}/action/{actionId}/facet/{facetType}")
@Produces({ MediaType.APPLICATION_JSON })
- public abstract String specActionFacet(@PathParam("specFullName") final String specFullName,
+ @ClientResponseType(entityType=String.class)
+ public abstract Response specActionFacet(@PathParam("specFullName") final String specFullName,
@PathParam("actionId") final String actionId, @PathParam("facetType") final String facetTypeName);
}
\ No newline at end of file
Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserResource.java (from r1148920, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/UserResource.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserResource.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserResource.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/UserResource.java&r1=1148920&r2=1149403&rev=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/resources/UserResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserResource.java Thu Jul 21 23:16:31 2011
@@ -16,16 +16,22 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.viewer.json.applib.resources;
+package org.apache.isis.viewer.json.applib.user;
import javax.ws.rs.GET;
+import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.jboss.resteasy.annotations.ClientResponseType;
+
+@Path("/user")
public interface UserResource {
@GET
@Produces({ MediaType.APPLICATION_JSON })
- public String user();
+ @ClientResponseType(entityType=String.class)
+ public Response user();
}
\ No newline at end of file
Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java?rev=1149403&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java Thu Jul 21 23:16:31 2011
@@ -0,0 +1,52 @@
+package org.apache.isis.viewer.json.applib.util;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.isis.viewer.json.applib.homepage.HomePage;
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.DeserializationConfig;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.SerializationConfig;
+
+
+public class JsonMapper {
+ private ObjectMapper objectMapper = new ObjectMapper();
+
+ public JsonMapper() {
+ objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
+ objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Map<String, Object> readAsMap(String json) {
+ return objectMapper.convertValue(json, LinkedHashMap.class);
+ }
+
+ public List<?> readAsList(String json) {
+ return objectMapper.convertValue(json, ArrayList.class);
+ }
+
+ public <T> T read(String json, Class<T> expectedType) throws JsonParseException, JsonMappingException, IOException {
+ return (T) objectMapper.readValue(json, expectedType);
+ }
+
+ public String write(Object object) throws JsonGenerationException, JsonMappingException, IOException {
+ return objectMapper.writeValueAsString(object);
+ }
+
+
+ /**
+ * @deprecated
+ * @return
+ */
+ @Deprecated
+ public ObjectMapper getObjectMapper() {
+ return objectMapper;
+ }
+
+}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/viewer/json/json-tck/pom.xml
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/pom.xml?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/pom.xml (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/pom.xml Thu Jul 21 23:16:31 2011
@@ -41,6 +41,13 @@
</plugins>
</build>
+ <repositories>
+ <repository>
+ <id>JBoss Public Release</id>
+ <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
+ </repository>
+ </repositories>
+
<dependencies>
<!-- other modules in this project -->
@@ -57,6 +64,12 @@
</dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-client</artifactId>
+ <version>1.0-beta-8</version>
+ </dependency>
+
<!-- isis viewer -->
<dependency>
<groupId>org.apache.isis.viewer</groupId>
@@ -105,6 +118,13 @@
<optional>true</optional>
</dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.2</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</project>
Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/HomePageResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/HomePageResourceTest.java?rev=1149403&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/HomePageResourceTest.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/HomePageResourceTest.java Thu Jul 21 23:16:31 2011
@@ -0,0 +1,79 @@
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Map;
+
+import javax.ws.rs.core.Response;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.apache.isis.viewer.json.applib.domain.DomainObjectResource;
+import org.apache.isis.viewer.json.applib.domain.ServicesResource;
+import org.apache.isis.viewer.json.applib.homepage.HomePage;
+import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
+import org.apache.isis.viewer.json.applib.user.UserResource;
+import org.apache.isis.viewer.json.applib.util.JsonMapper;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.jboss.resteasy.client.ClientRequestFactory;
+import org.jboss.resteasy.client.ProxyFactory;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+
+public class HomePageResourceTest {
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ webServer = new WebServer();
+ webServer.run(8080);
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ webServer.stop();
+ }
+
+ private static WebServer webServer;
+
+ private final static JsonMapper jsonMapper = new JsonMapper();
+
+ private HomePageResource homePageResource;
+ private DomainObjectResource domainObjectResource;
+ private ServicesResource servicesResource;
+ private UserResource userResource;
+
+ @Before
+ public void setUp() throws Exception {
+ URI base = webServer.getBase();
+ ClientRequestFactory clientRequestFactory = new ClientRequestFactory(base);
+
+ homePageResource = clientRequestFactory.createProxy(HomePageResource.class);
+ domainObjectResource = clientRequestFactory.createProxy(DomainObjectResource.class);
+ servicesResource = clientRequestFactory.createProxy(ServicesResource.class);
+ userResource = clientRequestFactory.createProxy(UserResource.class);
+ }
+
+ @Test
+ public void homePageResources() throws JsonParseException, JsonMappingException, IOException {
+ Response resources = homePageResource.resources();
+ assertThat(resources.getStatus(), is(200));
+ Object entity = resources.getEntity();
+ assertThat(entity, is(not(nullValue())));
+
+ // not yet working...
+
+ //HomePage homePage = jsonMapper.read(entity, HomePage.class);
+ //assertThat(homePage.getUser().getMethod(), is(Method.GET));
+
+// Map<String, Object> readAsMap = jsonMapper.readAsMap((String) entity);
+// assertThat(((Map<?,?>)readAsMap.get("user")).get("method"), is((Object)Method.GET));
+
+
+ }
+
+}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java Thu Jul 21 23:16:31 2011
@@ -45,6 +45,7 @@ import org.apache.isis.runtimes.dflt.run
import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManager;
import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.viewer.json.applib.util.JsonMapper;
import org.apache.isis.viewer.json.viewer.RepContext;
import org.apache.isis.viewer.json.viewer.ResourceContext;
import org.apache.isis.viewer.json.viewer.representations.Representation;
@@ -68,10 +69,7 @@ public abstract class ResourceAbstract {
private static final String HEADER_X_RESTFUL_OBJECTS_REASON = "X-RestfulObjects-Reason";
- protected final static ObjectMapper objectMapper = new ObjectMapper();
- static {
- objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
- }
+ protected final static JsonMapper jsonMapper = new JsonMapper();
public final static ActionType[] ACTION_TYPES = { ActionType.USER, ActionType.DEBUG, ActionType.EXPLORATION,
// SET is excluded; we simply flatten contributed actions.
@@ -132,7 +130,7 @@ public abstract class ResourceAbstract {
protected String asJson(final Object object) {
try {
- return objectMapper.writeValueAsString(object);
+ return jsonMapper.write(object);
} catch (JsonGenerationException e) {
throw new RuntimeException(e);
} catch (JsonMappingException e) {
@@ -239,6 +237,10 @@ public abstract class ResourceAbstract {
return Response.ok().build();
}
+ protected static Response responseOfOk(String entity) {
+ return Response.ok().entity(entity).build();
+ }
+
protected static Response responseOfGone(final String reason) {
return Response.status(Status.GONE).header(HEADER_X_RESTFUL_OBJECTS_REASON, reason).build();
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceImpl.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceImpl.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceImpl.java Thu Jul 21 23:16:31 2011
@@ -21,11 +21,13 @@ package org.apache.isis.viewer.json.view
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
-import org.apache.isis.viewer.json.applib.resources.HomePageResource;
+import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
import org.apache.isis.viewer.json.viewer.representations.LinkRepBuilder;
import org.apache.isis.viewer.json.viewer.representations.Representation;
import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
+import org.jboss.resteasy.annotations.ClientResponseType;
/**
* Implementation note: it seems to be necessary to annotate the implementation with {@link Path} rather than the
@@ -37,14 +39,14 @@ public class HomePageResourceImpl extend
@Override
@Produces(MediaType.APPLICATION_JSON)
- public String resources() {
+ public Response resources() {
init();
Representation representation = new Representation();
representation.put("user", linkTo("user"));
representation.put("services", linkTo("services"));
- return asJson(representation);
+ return responseOfOk(asJson(representation));
}
protected Representation linkTo(String url) {
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/DomainObjectResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/DomainObjectResourceImpl.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/DomainObjectResourceImpl.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/DomainObjectResourceImpl.java Thu Jul 21 23:16:31 2011
@@ -49,7 +49,7 @@ import org.apache.isis.core.metamodel.sp
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.viewer.json.applib.resources.DomainObjectResource;
+import org.apache.isis.viewer.json.applib.domain.DomainObjectResource;
import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
import org.apache.isis.viewer.json.viewer.util.UrlDecoderUtils;
import org.codehaus.jackson.JsonParseException;
@@ -66,18 +66,18 @@ public class DomainObjectResourceImpl ex
@GET
@Path("/{oid}")
@Produces({ MediaType.APPLICATION_JSON })
- public String object(@PathParam("oid") final String oidStr) {
+ public Response object(@PathParam("oid") final String oidStr) {
final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
final DomainObjectRepBuilder builder = DomainObjectRepBuilder
.newBuilder(getResourceContext().repContext(), objectAdapter);
- return jsonRepresentionFrom(builder);
+ return responseOfOk(jsonRepresentionFrom(builder));
}
@GET
@Path("/{oid}/properties/{propertyId}")
@Produces({ MediaType.APPLICATION_JSON })
- public String propertyDetails(
+ public Response propertyDetails(
@PathParam("oid") final String oidStr,
@PathParam("propertyId") final String propertyId) {
@@ -87,13 +87,13 @@ public class DomainObjectResourceImpl ex
final PropertyRepBuilder builder = PropertyRepBuilder.newBuilder(
getResourceContext().repContext(), objectAdapter, property);
- return jsonRepresentionFrom(builder);
+ return responseOfOk(jsonRepresentionFrom(builder));
}
@GET
@Path("/{oid}/collections/{collectionId}")
@Produces({ MediaType.APPLICATION_JSON })
- public String accessCollection(
+ public Response accessCollection(
@PathParam("oid") final String oidStr,
@PathParam("collectionId") final String collectionId) {
@@ -103,13 +103,13 @@ public class DomainObjectResourceImpl ex
final CollectionRepBuilder builder = CollectionRepBuilder.newBuilder(
getResourceContext().repContext(), objectAdapter, collection);
- return jsonRepresentionFrom(builder);
+ return responseOfOk(jsonRepresentionFrom(builder));
}
@GET
@Path("/{oid}/actions/{actionId}")
@Produces({ MediaType.APPLICATION_JSON })
- public String actionPrompt(
+ public Response actionPrompt(
@PathParam("oid") final String oidStr,
@PathParam("actionId") final String actionId) {
@@ -119,13 +119,13 @@ public class DomainObjectResourceImpl ex
ActionRepBuilder builder = ActionRepBuilder.newBuilder(
getResourceContext().repContext(), objectAdapter, action);
- return jsonRepresentionFrom(builder);
+ return responseOfOk(jsonRepresentionFrom(builder));
}
@GET
@Path("/{oid}/actions/{actionId}/invoke")
@Produces({ MediaType.APPLICATION_JSON })
- public Object invokeActionIdempotent(
+ public Response invokeActionIdempotent(
@PathParam("oid") final String oidStr,
@PathParam("actionId") final String actionId,
@QueryParam("arg") final List<String> arguments) {
@@ -178,15 +178,13 @@ public class DomainObjectResourceImpl ex
* (rather than having already been parsed into a List/Map representation).
*/
private ObjectAdapter objectAdapterFor(ObjectSpecification spec,
- String urlEncodedJson) {
+ String urlEncodedJson) {
final String json = UrlDecoderUtils.urlDecode(urlEncodedJson);
if (spec.containsFacet(EncodableFacet.class)) {
EncodableFacet encodableFacet = spec.getFacet(EncodableFacet.class);
return encodableFacet.fromEncodedString(json);
} else {
- @SuppressWarnings("unchecked")
- Map<String, Object> representation = objectMapper.convertValue(
- json, LinkedHashMap.class);
+ Map<String, Object> representation = jsonMapper.readAsMap(json);
return objectAdapterFor(spec, representation);
}
}
@@ -337,7 +335,7 @@ public class DomainObjectResourceImpl ex
@POST
@Path("/{oid}/actions/{actionId}/invoke")
@Produces({ MediaType.APPLICATION_JSON })
- public Object invokeAction(
+ public Response invokeAction(
@PathParam("oid") final String oidStr,
@PathParam("actionId") final String actionId,
final InputStream body) {
@@ -412,7 +410,7 @@ public class DomainObjectResourceImpl ex
// helpers
// ///////////////////////////////////////////////////////////////////
- private Object invokeActionUsingAdapters(final ObjectAction action,
+ private Response invokeActionUsingAdapters(final ObjectAction action,
final ObjectAdapter objectAdapter,
final List<ObjectAdapter> argAdapters) {
@@ -447,9 +445,9 @@ public class DomainObjectResourceImpl ex
if (facet != null) {
final Collection<ObjectAdapter> collectionAdapters = facet
.collection(returnedAdapter);
- return jsonRepresentationOf(collectionAdapters);
+ return responseOfOk(jsonRepresentationOf(collectionAdapters));
} else {
- return jsonRepresentationOf(returnedAdapter);
+ return responseOfOk(jsonRepresentationOf(returnedAdapter));
}
}
@@ -470,7 +468,7 @@ public class DomainObjectResourceImpl ex
byte[] byteArray = ByteStreams.toByteArray(body);
String bodyAsString = new String(byteArray, Charsets.UTF_8);
- List<?> arguments = objectMapper.readValue(bodyAsString, ArrayList.class);
+ List<?> arguments = jsonMapper.readAsList(bodyAsString);
return arguments;
} catch (JsonParseException e) {
throw new WebApplicationException(e,
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/MemberRepType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/MemberRepType.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/MemberRepType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/MemberRepType.java Thu Jul 21 23:16:31 2011
@@ -17,7 +17,7 @@
package org.apache.isis.viewer.json.viewer.resources.objects;
import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.viewer.json.applib.resources.DomainObjectResource;
+import org.apache.isis.viewer.json.applib.domain.DomainObjectResource;
/**
* Whether the representation of an {@link ObjectMember} (as generated by
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/services/ServicesResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/services/ServicesResourceImpl.java?rev=1149403&r1=1149402&r2=1149403&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/services/ServicesResourceImpl.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/services/ServicesResourceImpl.java Thu Jul 21 23:16:31 2011
@@ -23,18 +23,11 @@ import java.util.List;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.viewer.json.applib.resources.ServicesResource;
-import org.apache.isis.viewer.json.viewer.RepContext;
-import org.apache.isis.viewer.json.viewer.representations.Representation;
+import org.apache.isis.viewer.json.applib.domain.ServicesResource;
import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
-import org.apache.isis.viewer.json.viewer.resources.objects.DomainObjectRepBuilder;
-
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Lists;
/**
* Implementation note: it seems to be necessary to annotate the implementation with {@link Path} rather than the
@@ -45,12 +38,11 @@ public class ServicesResourceImpl extend
@Override
@Produces({ MediaType.APPLICATION_JSON })
- public String services() {
+ public Response services() {
init();
final List<ObjectAdapter> serviceAdapters = getPersistenceSession().getServices();
- return jsonRepresentationOf(serviceAdapters);
+ return responseOfOk(jsonRepresentationOf(serviceAdapters));
}
-
}