INtroduce Server JSON
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 16 Sep 2009 07:50:32 +0000 (07:50 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 16 Sep 2009 07:50:32 +0000 (07:50 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@2929 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/runtime/org.argeo.slc.server.json/.classpath [new file with mode: 0644]
server/runtime/org.argeo.slc.server.json/.project [new file with mode: 0644]
server/runtime/org.argeo.slc.server.json/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
server/runtime/org.argeo.slc.server.json/.settings/org.maven.ide.eclipse.prefs [new file with mode: 0644]
server/runtime/org.argeo.slc.server.json/pom.xml [new file with mode: 0644]
server/runtime/org.argeo.slc.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java [new file with mode: 0644]

diff --git a/server/runtime/org.argeo.slc.server.json/.classpath b/server/runtime/org.argeo.slc.server.json/.classpath
new file mode 100644 (file)
index 0000000..16f01e2
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" output="target/classes" path="src/main/java"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+       <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+       <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/server/runtime/org.argeo.slc.server.json/.project b/server/runtime/org.argeo.slc.server.json/.project
new file mode 100644 (file)
index 0000000..af5ade4
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.argeo.slc.server.json</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.maven.ide.eclipse.maven2Builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.maven.ide.eclipse.maven2Nature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/server/runtime/org.argeo.slc.server.json/.settings/org.eclipse.jdt.core.prefs b/server/runtime/org.argeo.slc.server.json/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..57c9743
--- /dev/null
@@ -0,0 +1,5 @@
+#Wed Sep 16 09:48:59 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/server/runtime/org.argeo.slc.server.json/.settings/org.maven.ide.eclipse.prefs b/server/runtime/org.argeo.slc.server.json/.settings/org.maven.ide.eclipse.prefs
new file mode 100644 (file)
index 0000000..cb4dc85
--- /dev/null
@@ -0,0 +1,9 @@
+#Wed Sep 16 09:47:45 CEST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/server/runtime/org.argeo.slc.server.json/pom.xml b/server/runtime/org.argeo.slc.server.json/pom.xml
new file mode 100644 (file)
index 0000000..5b7991b
--- /dev/null
@@ -0,0 +1,61 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.argeo.commons.server</groupId>
+               <artifactId>runtime</artifactId>
+               <version>0.1.1-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>org.argeo.server.json</artifactId>
+       <name>Commons Server JSON</name>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-compiler-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-source-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-jar-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <version>${version.maven-bundle-plugin}</version>
+                               <configuration>
+                                       <instructions>
+                                               <Export-Package>
+                                                       org.argeo.*
+                                               </Export-Package>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+       <dependencies>
+               <!-- JSON  -->
+               <dependency>
+                       <groupId>org.codehaus.jackson</groupId>
+                       <artifactId>com.springsource.org.codehaus.jackson.mapper</artifactId>
+                       <version>1.0.0</version>
+               </dependency>
+
+               <!-- Spring -->
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>org.springframework.web.servlet</artifactId>
+               </dependency>
+
+               <!-- J2EE -->
+               <dependency>
+                       <groupId>javax.servlet</groupId>
+                       <artifactId>com.springsource.javax.servlet</artifactId>
+               </dependency>
+
+       </dependencies>
+</project>
diff --git a/server/runtime/org.argeo.slc.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java b/server/runtime/org.argeo.slc.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java
new file mode 100644 (file)
index 0000000..fcd070a
--- /dev/null
@@ -0,0 +1,47 @@
+package org.argeo.slc.web.mvc;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.web.servlet.view.AbstractView;
+
+/** Marshal one of the object of the map to the output. */
+public class JsonView extends AbstractView {
+       private String modelKey = null;
+
+       public JsonView() {
+       }
+
+       @Override
+       @SuppressWarnings(value = { "unchecked" })
+       protected void renderMergedOutputModel(Map model,
+                       HttpServletRequest request, HttpServletResponse response)
+                       throws Exception {
+               final Object answer;
+               if (modelKey != null) {
+                       if (!model.containsKey(modelKey))
+                               throw new SlcException("Key " + modelKey
+                                               + " not found in model.");
+                       answer = model.get(modelKey);
+               } else {
+                       if (model.size() != 1)
+                               throw new SlcException(
+                                               "Model has a size different from 1. Specify a modelKey.");
+                       answer = model.values().iterator().next();
+               }
+
+               if (answer instanceof JSONObject) {
+                       ((JSONObject) answer).write(response.getWriter());
+               } else {
+                       JSONObject jsonObject = new JSONObject(answer);
+                       jsonObject.write(response.getWriter());
+               }
+       }
+
+       public void setModelKey(String modelKey) {
+               this.modelKey = modelKey;
+       }
+
+}