summaryrefslogtreecommitdiff
path: root/orkbasej/java/net/sf/oreka/serializers
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2005-10-20 13:40:58 +0000
committerHenri Herscher <henri@oreka.org>2005-10-20 13:40:58 +0000
commit7e1d63dd9fd149e4934bf77095c8610fac786b04 (patch)
tree5fe486a1b0300c3b84fb559107a868e5cc2c95da /orkbasej/java/net/sf/oreka/serializers
parent467768fc956fc3e5a253373f26c71c681b31b6b8 (diff)
First checkin
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@2 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkbasej/java/net/sf/oreka/serializers')
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/DomSerializer.java186
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/KeyValueSerializer.java47
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/OrkSerializer.java239
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/ServletRequestSerializer.java79
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/SingleLineSerializer.java231
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/test/DomSerializerTest.java82
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/test/NullHttpServletRequest.java163
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/test/ServletRequestSerializerTest.java45
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/test/SingleLineSerializerTest.java172
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/test/TestMessageSimple.xml5
-rw-r--r--orkbasej/java/net/sf/oreka/serializers/test/TestNestedMessage.xml6
11 files changed, 1255 insertions, 0 deletions
diff --git a/orkbasej/java/net/sf/oreka/serializers/DomSerializer.java b/orkbasej/java/net/sf/oreka/serializers/DomSerializer.java
new file mode 100644
index 0000000..ac64a13
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/DomSerializer.java
@@ -0,0 +1,186 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+
+
+package net.sf.oreka.serializers;
+
+
+import java.io.ByteArrayOutputStream;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import net.sf.oreka.OrkException;
+import net.sf.oreka.OrkObject;
+import net.sf.oreka.OrkObjectFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+
+public class DomSerializer extends OrkSerializer {
+
+ Node node = null;
+ Document document = null;
+
+ public OrkObject deSerialize(Node node) throws OrkException
+ {
+ if (node == null)
+ {
+ throw (new OrkException("DomSerializer: null node was passed in"));
+ }
+ this.node = node;
+ deserialize = true; // Set DeSerialize mode
+ OrkObject obj = OrkObjectFactory.instance().newOrkObject(node.getNodeName());
+ obj.define(this);
+ obj.validate();
+ return obj;
+ }
+
+ public void serialize(Document document, Node node, OrkObject object) throws OrkException {
+
+ if (node == null) {
+ throw ( new OrkException("DomSerializer: passed DOM node is null"));
+ }
+ if (document == null) {
+ throw ( new OrkException("DomSerializer: passed DOM document is null"));
+ }
+ this.document = document;
+ this.node = node;
+
+ deserialize = false; // Set Serialize mode
+ object.define(this);
+ }
+
+ @Override
+ public void addClassName(String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ void addString(String key, String value) {
+
+ Element newElem = document.createElement(key);
+ node.appendChild(newElem);
+
+ Text newText = document.createTextNode(value);
+ newElem.appendChild(newText);
+ }
+
+ @Override
+ String getString(String key, String oldValue, boolean required) throws OrkException {
+
+ String value = null;
+
+ // Find the right node
+ Node stringNode = findElementByName(node, key);
+
+ if(stringNode != null)
+ {
+ // Now, the string associated to element should be the first child (text element)
+ Node textNode = stringNode.getFirstChild();
+ if (textNode != null && textNode.getNodeType() == Node.TEXT_NODE) {
+ value = textNode.getNodeValue().trim();
+ }
+ }
+ if (value == null) {
+ if (required) {
+ throw(new OrkException("DomSerializer::GetString: required parameter missing:" + key));
+ }
+ value = oldValue;
+ }
+ return value;
+ }
+
+ @Override
+ public OrkObject objectValue(String key, OrkObject value, boolean required) throws OrkException {
+
+ if (deserialize) {
+ return getObject(key, value, required);
+ }
+ else {
+ addObject(key, value);
+ return value;
+ }
+ }
+
+ void addObject(String key, OrkObject value) throws OrkException {
+
+ Element newElem = document.createElement(key);
+ node.appendChild(newElem);
+ DomSerializer ser = new DomSerializer();
+ ser.serialize(document, newElem, value);
+ }
+
+ OrkObject getObject(String key, OrkObject oldValue, boolean required) throws OrkException {
+
+ OrkObject value = null;
+
+ // Find the node corresponding to the object wanting to be populated
+ Node objectNode = findElementByName(node, key);
+
+ // Create a new serializer and affect it to this object
+ if (objectNode != null)
+ {
+ DomSerializer serializer = new DomSerializer();
+ value = serializer.deSerialize(objectNode);
+ }
+ if (value == null) {
+ if (required) {
+ throw(new OrkException("DomSerializer.getObject: required node missing:" + key));
+ }
+ value = oldValue;
+ }
+ return value;
+ }
+
+ public Node findElementByName(Node node, String name)
+ {
+ Node child = node.getFirstChild();
+ while(child != null)
+ {
+ if (child.getNodeName().equalsIgnoreCase(name) && child.getNodeType() == Node.ELEMENT_NODE)
+ {
+ return child;
+ }
+ child = child.getNextSibling();
+ }
+ return null;
+ }
+
+ public static String NodeToString(Node node) {
+
+ String result = null;
+ TransformerFactory xformerFactory = TransformerFactory.newInstance();
+ try {
+ Transformer xformer = xformerFactory.newTransformer();
+ xformer.setOutputProperty("indent", "yes");
+ ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
+ Result output = new StreamResult(byteArray);
+ DOMSource source = new DOMSource(node);
+ xformer.transform(source,output);
+ result = byteArray.toString();
+ }
+ catch (Exception e) {
+ ;
+ }
+ return result;
+ }
+
+}
diff --git a/orkbasej/java/net/sf/oreka/serializers/KeyValueSerializer.java b/orkbasej/java/net/sf/oreka/serializers/KeyValueSerializer.java
new file mode 100644
index 0000000..bc65819
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/KeyValueSerializer.java
@@ -0,0 +1,47 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+package net.sf.oreka.serializers;
+
+import java.util.HashMap;
+
+import net.sf.oreka.*;
+
+public abstract class KeyValueSerializer extends OrkSerializer
+{
+ HashMap<String, String> map;
+
+ KeyValueSerializer()
+ {
+ map = new HashMap<String, String>();
+ }
+
+ String getString(String key, String oldValue, boolean required) throws OrkException
+ {
+ String value = map.get(key.toLowerCase());
+ if (value == null)
+ {
+ if (required == true)
+ {
+ throw (new OrkException("Serializer.GetString: required parameter missing:" + key));
+ }
+ value = oldValue;
+ }
+ return value;
+ }
+
+ public OrkObject objectValue(String key, OrkObject value, boolean required) throws OrkException
+ {
+ throw (new OrkException("KeyValueSerializer.objectValue: Nested objects not allowed for key-value serializers"));
+ }
+}
diff --git a/orkbasej/java/net/sf/oreka/serializers/OrkSerializer.java b/orkbasej/java/net/sf/oreka/serializers/OrkSerializer.java
new file mode 100644
index 0000000..f4b0d54
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/OrkSerializer.java
@@ -0,0 +1,239 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+package net.sf.oreka.serializers;
+
+import net.sf.oreka.*;
+
+/**
+ *
+ * Base class for all serializers.
+ * Serializers have to implement their own serialize and deserialize methods
+ * since the data can be read from and written to many different formats
+ *
+ * Enum and Boolean value are case insensitive (all enum values must be defined
+ * lower case in the project, otherwise they won't be recognized at all)
+ *
+ */
+public abstract class OrkSerializer {
+
+ boolean deserialize = false;
+ String classKey = "class";
+
+ public void setClassKey(String classKey)
+ {
+ this.classKey = classKey;
+ }
+
+ public int intValue(String key, int value, boolean required) throws OrkException
+ {
+ if (deserialize)
+ {
+ return getInt(key, value, required);
+ }
+ else
+ {
+ addInt(key, value);
+ return value;
+ }
+ }
+
+ public double doubleValue(String key, double value, boolean required) throws OrkException
+ {
+ if (deserialize)
+ {
+ return getDouble(key, value, required);
+ }
+ else
+ {
+ addDouble(key, value);
+ return value;
+ }
+ }
+
+ public String stringValue(String key, String value, boolean required ) throws OrkException
+ {
+ if (deserialize)
+ {
+ return getString(key, value, required);
+ }
+ else
+ {
+ addString(key, value);
+ return value;
+ }
+ }
+
+ public boolean booleanValue(String key, boolean value, boolean required ) throws OrkException
+ {
+ if (deserialize)
+ {
+ return getBoolean(key, value, required);
+ }
+ else
+ {
+ addBoolean(key, value);
+ return value;
+ }
+ }
+
+ public Enum enumValue(String key, Enum value, boolean required ) throws OrkException
+ {
+ if (deserialize)
+ {
+ return getEnum(key, value, required);
+ }
+ else
+ {
+ addEnum(key, value);
+ return value;
+ }
+ }
+
+ public abstract OrkObject objectValue(String key, OrkObject value, boolean required ) throws OrkException;
+
+ public abstract void addClassName(String value);
+
+ void addInt(String key, int value)
+ {
+ String valueString = String.valueOf(value);
+ addString(key, valueString);
+ }
+
+ void addDouble(String key, double value)
+ {
+ String valueString = String.valueOf(value);
+ addString(key, valueString);
+ }
+
+ void addBoolean(String key, boolean value)
+ {
+ if(value)
+ {
+ addString(key, "true");
+ }
+ else
+ {
+ addString(key, "false");
+ }
+ }
+
+ void addEnum(String key, Enum value)
+ {
+ addString(key, value.name());
+ }
+
+ abstract void addString(String key, String value);
+
+ int getInt(String key, int oldValue, boolean required) throws OrkException
+ {
+ int value = 0;
+ String stringValue = getString(key, null, required);
+
+ if (stringValue == null)
+ {
+ value = oldValue;
+ }
+ else
+ {
+ try
+ {
+ value = Integer.valueOf(stringValue);
+ }
+ catch (Exception e)
+ {
+ throw (new OrkException("Serializer: value:" + stringValue + " not an int for key:" + key));
+ }
+ }
+ return value;
+ }
+
+ double getDouble(String key, double oldValue, boolean required) throws OrkException
+ {
+ double value = 0.0;
+ String stringValue = getString(key, null, required);
+
+ if (stringValue == null)
+ {
+ value = oldValue;
+ }
+ else
+ {
+ try
+ {
+ value = Double.valueOf(stringValue);
+ }
+ catch (Exception e)
+ {
+ throw (new OrkException("Serializer: value:" + stringValue + " not a double for key:" + key));
+ }
+ }
+ return value;
+ }
+
+ boolean getBoolean(String key, boolean oldValue, boolean required) throws OrkException
+ {
+ boolean value;
+ String stringValue = getString(key, null, required);
+
+ if (stringValue == null)
+ {
+ value = oldValue;
+ }
+ else
+ {
+ stringValue = stringValue.toLowerCase();
+
+ if( stringValue.equals("true") || stringValue.equals("yes") || stringValue.equals("1") )
+ {
+ value = true;
+ }
+ else if( stringValue.equals("false") || stringValue.equals("no") || stringValue.equals("0") )
+ {
+ value = false;
+ }
+ else
+ {
+ throw(new OrkException("Serializer: Invalid boolean value:" + stringValue + " for key:" + key));
+ }
+ }
+ return value;
+ }
+
+ Enum getEnum(String key, Enum oldValue, boolean required) throws OrkException
+ {
+ Enum value = null;
+ String stringValue = getString(key, null, required);
+
+ if (stringValue == null)
+ {
+ value = oldValue;
+ }
+ else
+ {
+ stringValue = stringValue.toLowerCase();
+ Class valueClass = oldValue.getClass();
+ try
+ {
+ value = Enum.valueOf(valueClass, stringValue);
+ }
+ catch (IllegalArgumentException e)
+ {
+ throw (new OrkException("Serializer: Invalid enum value:" + stringValue + " for parameter:" + key));
+ }
+ }
+ return value;
+ }
+
+ abstract String getString(String key, String oldValue, boolean required ) throws OrkException;
+}
diff --git a/orkbasej/java/net/sf/oreka/serializers/ServletRequestSerializer.java b/orkbasej/java/net/sf/oreka/serializers/ServletRequestSerializer.java
new file mode 100644
index 0000000..8eded74
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/ServletRequestSerializer.java
@@ -0,0 +1,79 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+package net.sf.oreka.serializers;
+
+import javax.servlet.http.*;
+
+import net.sf.oreka.OrkException;
+import net.sf.oreka.OrkObject;
+import net.sf.oreka.OrkObjectFactory;
+
+public class ServletRequestSerializer extends OrkSerializer {
+
+ HttpServletRequest request = null;
+ final String classMarker = "cmd";
+
+ public OrkObject deSerialize(HttpServletRequest request) throws OrkException
+ {
+ this.request = request;
+ deserialize = true; // Set DeSerialize mode
+
+ // Instanciate the right object
+ String classMarker2 = (String)request.getParameterNames().nextElement();
+ String orkClass = null;
+ if(classMarker2 != null)
+ {
+ orkClass = request.getParameter(classMarker2);
+ }
+ if(orkClass == null) {
+ throw (new OrkException("ServletRequestSerializer.deSerialize: where is the command in:" + request.getQueryString()));
+ }
+
+ OrkObject obj = OrkObjectFactory.instance().newOrkObject(orkClass.toLowerCase());
+ obj.define(this);
+ obj.validate();
+ return obj;
+ }
+
+ @Override
+ public void addClassName(String value) {
+ ; // not needed, this serializer is only a de-serializer
+ }
+
+ @Override
+ void addString(String key, String value) {
+ ; // not needed, this serializer is only a de-serializer
+ }
+
+ @Override
+ String getString(String key, String oldValue, boolean required) throws OrkException {
+ String value = request.getParameter(key);
+ if(value == null) {
+ if (required) {
+ throw (new OrkException("ServletRequestSerializer.getString: parameter not found:" + key));
+ }
+ else {
+ value = oldValue;
+ }
+ }
+ return value;
+ }
+
+ @Override
+ public OrkObject objectValue(String key, OrkObject value, boolean required) throws OrkException {
+ throw (new OrkException("ServletRequestSerializer.objectValue: Nested objects not allowed"));
+ }
+
+
+}
diff --git a/orkbasej/java/net/sf/oreka/serializers/SingleLineSerializer.java b/orkbasej/java/net/sf/oreka/serializers/SingleLineSerializer.java
new file mode 100644
index 0000000..44f2fe3
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/SingleLineSerializer.java
@@ -0,0 +1,231 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+package net.sf.oreka.serializers;
+
+import net.sf.oreka.OrkException;
+import net.sf.oreka.OrkObject;
+import net.sf.oreka.OrkObjectFactory;
+
+/**
+ * Serializer that generates and parses objects to and from a single line of text.
+ * key-value pairs are separated by spaces.
+ * key and values are separated by equal signs.
+ * example: message=doit what=run
+ */
+public class SingleLineSerializer extends KeyValueSerializer
+{
+ StringBuffer output;
+
+ public String serialize(OrkObject input) throws OrkException
+ {
+ output = new StringBuffer();
+ deserialize = false; // Set Serialize mode
+ addClassName(input.getOrkClassName());
+ input.define(this);
+ return output.toString();
+ }
+
+ enum SingleLineState {StartState, KeyState, ValueState};
+
+ public OrkObject deSerialize(String input) throws OrkException
+ {
+ // read string and extract values into map
+ input = input.trim();
+
+ SingleLineState state = SingleLineState.StartState;
+
+ StringBuffer key = new StringBuffer();
+ StringBuffer value = new StringBuffer();
+ String firstValue = null;
+
+ for(int i=0; i<input.length(); i++)
+ {
+ Character character = input.charAt(i);
+
+ switch(state)
+ {
+ case StartState:
+ if(character == ' ')
+ {
+ ; // ignore spaces
+ }
+
+ else if ( Character.isLetterOrDigit(character) )
+ {
+ state = SingleLineState.KeyState;
+ key.append(character);
+ }
+ else
+ {
+ throw new OrkException("SingleLineSerializer.deSerialize: Cannot find key start, keys must be alphanum, wrong char:" + character + " input:" + input);
+ }
+ break;
+
+ case KeyState:
+ if( Character.isLetterOrDigit(character) )
+ {
+ key.append(character);
+ }
+ else if (character == '=')
+ {
+ state = SingleLineState.ValueState;
+ value = new StringBuffer();
+ }
+ else
+ {
+ throw new OrkException("SingleLineSerializer.deSerialize: Invalid key character, keys must be alphanum, wrong char:" + character + " input:" + input);
+ }
+ break;
+ case ValueState:
+ if( character == '=')
+ {
+ throw new OrkException("SingleLineSerializer.deSerialize: equals sign misplaced at index:" + i + " in input:" + input);
+ }
+ else if (character == ' ')
+ {
+ state = SingleLineState.StartState;
+ }
+ else
+ {
+ value.append(character);
+ }
+ break;
+ } // switch(state)
+
+ if ( (state == SingleLineState.StartState) || (i == (input.length()-1)) )
+ {
+ if (key.length() > 0)
+ {
+ // Add pair to key-value map
+ map.put(key.toString().toLowerCase(), unEscapeSingleLine(value.toString()));
+ if (firstValue == null)
+ {
+ firstValue = value.toString().toLowerCase();
+ }
+ key = new StringBuffer();
+ value = new StringBuffer();
+ }
+ }
+ }
+
+ deserialize = true; // Set DeSerialize mode
+
+ OrkObject obj = OrkObjectFactory.instance().newOrkObject(firstValue);
+ obj.define(this);
+ obj.validate();
+ return obj;
+ }
+
+ public void addClassName(String value)
+ {
+ addString(classKey, value);
+ }
+
+ void addString(String key, String value)
+ {
+ String pair;
+ String escapedValue = escapeSingleLine(value);
+ pair = key + "=" + escapedValue + " ";
+ output.append(pair);
+ }
+
+ /**
+ * Finds the Object Class from a serialized string.
+ * i.e. for a serialized object of the form:
+ * message=dosomething when=now
+ * it returns "dosomething"
+ *
+ * @param input
+ * @return
+ */
+ /*
+ static String findClass(String input)
+ {
+ String result = "";
+ int equalsPosition = input.indexOf("=");
+ if (equalsPosition != -1)
+ {
+ int spacePostion = input.indexOf(" ");
+ if (spacePostion > equalsPosition)
+ {
+ result = input.substring(equalsPosition+1, spacePostion-1);
+ }
+ else
+ {
+ result = input.substring(equalsPosition+1, input.length() - 1);
+ }
+ }
+ return result.toLowerCase();
+ }
+ */
+
+ String escapeSingleLine(String in)
+ {
+ StringBuffer out = new StringBuffer();
+ for(int i=0; i<in.length();i++)
+ {
+ char c = in.charAt(i);
+ if (c == ' ')
+ {
+ out.append("%s");
+ }
+ else if (c == ':')
+ {
+ out.append("%c");
+ }
+ else if (c == '%')
+ {
+ out.append("%p");
+ }
+ else
+ {
+ out.append(c);
+ }
+ }
+ return out.toString();
+ }
+
+ String unEscapeSingleLine(String in)
+ {
+ StringBuffer out = new StringBuffer();
+ int iin = 0;
+
+ while(iin<in.length())
+ {
+ if ( in.charAt(iin) == '%')
+ {
+ iin++;
+
+ switch (in.charAt(iin))
+ {
+ case 's':
+ out.append(' ');
+ break;
+ case 'c':
+ out.append(':');
+ break;
+ case 'p':
+ out.append('%');
+ break;
+ }
+ }
+ else
+ {
+ out.append(in.charAt(iin));
+ }
+ iin++;
+ }
+ return out.toString();
+ }
+}
diff --git a/orkbasej/java/net/sf/oreka/serializers/test/DomSerializerTest.java b/orkbasej/java/net/sf/oreka/serializers/test/DomSerializerTest.java
new file mode 100644
index 0000000..198da4d
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/test/DomSerializerTest.java
@@ -0,0 +1,82 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+package net.sf.oreka.serializers.test;
+
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import net.sf.oreka.OrkObject;
+import net.sf.oreka.OrkObjectFactory;
+import net.sf.oreka.messages.test.TestNestedMessage;
+import net.sf.oreka.messages.test.TestSubMessage;
+import net.sf.oreka.serializers.DomSerializer;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+
+
+public class DomSerializerTest extends TestCase {
+
+ DocumentBuilder builder = null;
+
+ public static void main (String[] args) {
+ junit.textui.TestRunner.run (suite());
+ }
+ protected void setUp() throws Exception {
+ OrkObjectFactory.instance().registerOrkObject(new TestNestedMessage());
+ OrkObjectFactory.instance().registerOrkObject(new TestSubMessage());
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ builder = factory.newDocumentBuilder();
+ }
+ public static Test suite() {
+ return new TestSuite(DomSerializerTest.class);
+ }
+
+ public void testDeSerializeBasic() throws Exception
+ {
+ InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream ("net/sf/oreka/serializers/test/TestNestedMessage.xml");
+ Document doc = builder.parse(is);
+ DomSerializer ser = new DomSerializer();
+ OrkObject obj = ser.deSerialize(doc.getFirstChild());
+ assertTrue(((TestNestedMessage)obj).getIntParm() == 546);
+
+ TestNestedMessage tnm = (TestNestedMessage)obj;
+ TestSubMessage tsm = tnm.getSubMsg();
+ assertTrue(tsm.getStringSubParm().equals("hello"));
+ }
+
+ public void testSerializeBasic() throws Exception
+ {
+ // This does a round trip serialization-deserialization in order to test serialization
+ TestNestedMessage tnm = new TestNestedMessage();
+ tnm.getSubMsg().setStringSubParm("le maure");
+ tnm.setDoubleParm(0.666);
+ Document doc = builder.newDocument();
+ Element docNode = doc.createElement(tnm.getOrkClassName());
+ doc.appendChild(docNode);
+
+ DomSerializer ser = new DomSerializer();
+ ser.serialize(doc, docNode, tnm);
+ //System.out.println(DomSerializer.NodeToString(doc));
+ OrkObject obj = ser.deSerialize(docNode);
+ assertTrue(((TestNestedMessage)obj).getDoubleParm() == 0.666);
+ assertTrue(((TestNestedMessage)obj).getSubMsg().getStringSubParm() == "le maure");
+ }
+}
diff --git a/orkbasej/java/net/sf/oreka/serializers/test/NullHttpServletRequest.java b/orkbasej/java/net/sf/oreka/serializers/test/NullHttpServletRequest.java
new file mode 100644
index 0000000..71cb22f
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/test/NullHttpServletRequest.java
@@ -0,0 +1,163 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+package net.sf.oreka.serializers.test;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.Principal;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+public class NullHttpServletRequest implements HttpServletRequest
+{
+ public Hashtable<String, String> parameters = new Hashtable<String, String>();
+
+ public void setParameter(String key, String value) {
+ parameters.put(key, value);
+ }
+
+ public String getParameter(String key) {
+ return (String)this.parameters.get(key);
+ }
+
+ public Enumeration getParameterNames(){
+ return this.parameters.elements();
+ }
+
+ public Cookie[] getCookies() {return null;}
+ public String getMethod(){return null;}
+ public String getRequestURI(){return null;}
+ public String getServletPath(){return null;}
+ public String getPathInfo(){return null;}
+ public String getPathTranslated(){return null;}
+ public String getQueryString(){return null;}
+ public String getRemoteUser(){return null;}
+ public String getAuthType(){return null;}
+ public String getHeader(String name){return null;}
+ public int getIntHeader(String name){return 0;}
+ public long getDateHeader(String name){return 0;}
+ public Enumeration getHeaderNames(){return null;}
+ public HttpSession getSession(boolean create){return null;}
+ public String getRequestedSessionId(){return null;}
+ public boolean isRequestedSessionIdValid(){return false;}
+ public boolean isRequestedSessionIdFromCookie(){return false;}
+ public boolean isRequestedSessionIdFromUrl(){return false;}
+ public int getContentLength(){return 0;}
+ public String getContentType(){return null;}
+ public String getProtocol(){return null;}
+ public String getScheme(){return null;}
+ public String getServerName(){return null;}
+ public int getServerPort(){return 0;}
+ public String getRemoteAddr(){return null;}
+ public String getRemoteHost(){return null;}
+ public String getRealPath(String path){return null;}
+ public ServletInputStream getInputStream() throws IOException{return null;}
+ public String[] getParameterValues(String name){return null;}
+ public Enumeration getAttributeNames(){return null;}
+ public Object getAttribute(String name){return null;}
+ public HttpSession getSession(){return null;}
+ public BufferedReader getReader() throws IOException{return null;}
+ public String getCharacterEncoding(){return null;}
+ public void setAttribute(String name, Object o) {}
+ public boolean isRequestedSessionIdFromURL() {return false;}
+
+ public String getContextPath() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Enumeration getHeaders(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public StringBuffer getRequestURL() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Principal getUserPrincipal() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public boolean isUserInRole(String arg0) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public String getLocalAddr() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Locale getLocale() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Enumeration getLocales() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String getLocalName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public int getLocalPort() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public Map getParameterMap() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public int getRemotePort() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public RequestDispatcher getRequestDispatcher(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public boolean isSecure() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public void removeAttribute(String arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException {
+ // TODO Auto-generated method stub
+
+ }
+} \ No newline at end of file
diff --git a/orkbasej/java/net/sf/oreka/serializers/test/ServletRequestSerializerTest.java b/orkbasej/java/net/sf/oreka/serializers/test/ServletRequestSerializerTest.java
new file mode 100644
index 0000000..08260fb
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/test/ServletRequestSerializerTest.java
@@ -0,0 +1,45 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+package net.sf.oreka.serializers.test;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import net.sf.oreka.OrkObject;
+import net.sf.oreka.OrkObjectFactory;
+import net.sf.oreka.messages.test.TestMessage;
+import net.sf.oreka.serializers.ServletRequestSerializer;
+
+public class ServletRequestSerializerTest extends TestCase {
+
+ public static void main (String[] args) {
+ junit.textui.TestRunner.run (suite());
+ }
+ protected void setUp() {
+ OrkObjectFactory.instance().registerOrkObject(new TestMessage());
+ }
+ public static Test suite() {
+ return new TestSuite(ServletRequestSerializerTest.class);
+ }
+
+ public void testSerializeBasic() throws Exception
+ {
+ NullHttpServletRequest req = new NullHttpServletRequest();
+ ServletRequestSerializer ser = new ServletRequestSerializer();
+ req.setParameter("cmd", "test");
+ req.setParameter("intParm", "45");
+ OrkObject obj = ser.deSerialize(req);
+ assertTrue(((TestMessage)obj).getIntParm() == 45);
+ }
+}
diff --git a/orkbasej/java/net/sf/oreka/serializers/test/SingleLineSerializerTest.java b/orkbasej/java/net/sf/oreka/serializers/test/SingleLineSerializerTest.java
new file mode 100644
index 0000000..5520626
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/test/SingleLineSerializerTest.java
@@ -0,0 +1,172 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+package net.sf.oreka.serializers.test;
+
+import junit.framework.*;
+import net.sf.oreka.*;
+import net.sf.oreka.messages.*;
+import net.sf.oreka.messages.test.TestMessage;
+import net.sf.oreka.serializers.SingleLineSerializer;
+
+public class SingleLineSerializerTest extends TestCase
+{
+ public static void main (String[] args) {
+ junit.textui.TestRunner.run (suite());
+ }
+ protected void setUp() {
+ OrkObjectFactory.instance().registerOrkObject(new TestMessage());
+ }
+ public static Test suite() {
+ return new TestSuite(SingleLineSerializerTest.class);
+ }
+
+ public void testSerializeBasic() throws Exception
+ {
+ String output = null;
+
+ TestMessage msg = new TestMessage();
+ SingleLineSerializer ser = new SingleLineSerializer();
+
+ msg.setIntParm(6);
+ output = ser.serialize(msg);
+ System.out.println("\noutput:" + output);
+ assertTrue(output.toLowerCase().indexOf("intparm=6") != -1);
+
+ msg.setIntParm(-5);
+ output = ser.serialize(msg);
+ System.out.println("\noutput:" + output);
+ assertTrue(output.toLowerCase().indexOf("intparm=-5") != -1);
+
+ msg.setDoubleParm(7.7);
+ output = ser.serialize(msg);
+ System.out.println("\noutput:" + output);
+ assertTrue(output.toLowerCase().indexOf("doubleparm=7.7") != -1);
+
+ msg.setBoolParm(true);
+ output = ser.serialize(msg);
+ System.out.println("\noutput:" + output);
+ assertTrue(output.toLowerCase().indexOf("boolparm=true") != -1);
+
+ msg.setStringParm("hello");
+ output = ser.serialize(msg);
+ System.out.println("\noutput:" + output);
+ assertTrue(output.toLowerCase().indexOf("stringparm=hello") != -1);
+ }
+
+ public void testDeSerializeBasic() throws Exception
+ {
+ String input;
+ SingleLineSerializer ser = new SingleLineSerializer();
+ TestMessage msg;
+
+ input = "class=test intparm=3";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertTrue(msg.getIntParm() == 3);
+
+ input = "class=test doubleparm=-14.6";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertTrue(msg.getDoubleParm() == -14.6);
+
+ input = "class=test boolparm=yes";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertTrue(msg.isBoolParm());
+ }
+
+ public void testDeSerializeBoolean() throws Exception
+ {
+ String input;
+ SingleLineSerializer ser = new SingleLineSerializer();
+ TestMessage msg;
+
+ input = "class=test intparm=78 boolparm=no";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertFalse(msg.isBoolParm());
+
+ input = "class=test intparm=78 boolparm=0";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertFalse(msg.isBoolParm());
+
+ input = "class=test intparm=78 boolparm=false";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertFalse(msg.isBoolParm());
+
+ input = "class=test intparm=78 boolparm=true";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertTrue(msg.isBoolParm());
+
+ input = "class=test intparm=78 boolparm=yes";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertTrue(msg.isBoolParm());
+
+ input = "class=test intparm=78 boolparm=1";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertTrue(msg.isBoolParm());
+
+ input = "class=test intparm=78 boolparm=asdf";
+ boolean threw = false;
+ try {
+ msg = (TestMessage)ser.deSerialize(input);
+ }
+ catch (OrkException e) {
+ threw = true;
+ }
+ assertTrue(threw);
+ }
+
+ public void testDeSerializeRequired() throws Exception
+ {
+ String input;
+ SingleLineSerializer ser = new SingleLineSerializer();
+ TestMessage msg;
+
+ input = "class=test";
+ boolean threw = false;
+ try {
+ msg = (TestMessage)ser.deSerialize(input);
+ }
+ catch (OrkException e) {
+ threw = true;
+ }
+ assertTrue(threw);
+ }
+
+ public void testEnum() throws Exception
+ {
+ // deserialize
+ String input;
+ SingleLineSerializer ser = new SingleLineSerializer();
+ TestMessage msg;
+
+ input = "class=test intparm=78 enumparm=value2";
+ msg = (TestMessage)ser.deSerialize(input);
+ assertTrue(msg.getEnumParm() == TestMessage.TestEnum.value2);
+
+ input = "class=test intparm=78 enumparm=garbage";
+ boolean threw = false;
+ try {
+ msg = (TestMessage)ser.deSerialize(input);
+ }
+ catch (OrkException e) {
+ threw = true;
+ }
+ assertTrue(threw);
+
+ // serialize
+ String output = null;
+ msg.setEnumParm(TestMessage.TestEnum.value3);
+ output = ser.serialize(msg);
+ assertTrue(output.toLowerCase().indexOf("enumparm=value3") != -1);
+ }
+
+}
diff --git a/orkbasej/java/net/sf/oreka/serializers/test/TestMessageSimple.xml b/orkbasej/java/net/sf/oreka/serializers/test/TestMessageSimple.xml
new file mode 100644
index 0000000..20347c4
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/test/TestMessageSimple.xml
@@ -0,0 +1,5 @@
+<test>
+ <intParm>
+ 546
+ </intParm>
+</test> \ No newline at end of file
diff --git a/orkbasej/java/net/sf/oreka/serializers/test/TestNestedMessage.xml b/orkbasej/java/net/sf/oreka/serializers/test/TestNestedMessage.xml
new file mode 100644
index 0000000..0309449
--- /dev/null
+++ b/orkbasej/java/net/sf/oreka/serializers/test/TestNestedMessage.xml
@@ -0,0 +1,6 @@
+<testnested>
+ <intParm>546</intParm>
+ <testsub>
+ <stringsubparm>hello</stringsubparm>
+ </testsub>
+</testnested> \ No newline at end of file