Role DAO
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.json / src / main / java / org / argeo / server / json / JsonServerMapper.java
diff --git a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java
new file mode 100644 (file)
index 0000000..4ab128e
--- /dev/null
@@ -0,0 +1,53 @@
+package org.argeo.server.json;
+
+import java.io.BufferedReader;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.argeo.server.ArgeoServerException;
+import org.argeo.server.ServerDeserializer;
+import org.argeo.server.ServerSerializer;
+import org.codehaus.jackson.JsonFactory;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.ObjectMapper;
+
+public class JsonServerMapper implements ServerSerializer, ServerDeserializer {
+       private JsonFactory jsonFactory = new JsonFactory();
+       private ObjectMapper objectMapper = new ObjectMapper();
+
+       public void serialize(Object obj, HttpServletRequest request,
+                       HttpServletResponse response) {
+               try {
+                       response.setContentType("application/json");
+
+                       JsonGenerator jsonGenerator = jsonFactory
+                                       .createJsonGenerator(response.getWriter());
+                       jsonGenerator.useDefaultPrettyPrinter();
+
+                       objectMapper.writeValue(jsonGenerator, obj);
+               } catch (Exception e) {
+                       throw new ArgeoServerException("Cannot serialize " + obj, e);
+               }
+       }
+
+       public Object deserialize(Object obj, HttpServletRequest request) {
+               try {
+                       String body = request.getParameter("body");
+                       if (body == null) {
+                               // lets read the message body instead
+                               BufferedReader reader = request.getReader();
+                               StringBuffer buffer = new StringBuffer();
+                               String line = null;
+                               while (((line = reader.readLine()) != null)) {
+                                       buffer.append(line);
+                               }
+                               body = buffer.toString();
+                       }
+                       return objectMapper.readValue(body, Object.class);
+               } catch (Exception e) {
+                       throw new ArgeoServerException("Cannot deserialize " + request, e);
+               }
+       }
+
+}