]> source.dussan.org Git - iciql.git/commitdiff
Moved data type adapters into separate package, added gson and xstream
authorJames Moger <james.moger@gitblit.com>
Sun, 9 Nov 2014 17:22:12 +0000 (12:22 -0500)
committerJames Moger <james.moger@gitblit.com>
Sun, 9 Nov 2014 17:22:12 +0000 (12:22 -0500)
15 files changed:
.classpath
build.moxie
src/main/java/com/iciql/JavaSerializationTypeAdapter.java [deleted file]
src/main/java/com/iciql/SQLDialectPostgreSQL.java
src/main/java/com/iciql/adapter/GsonTypeAdapter.java [new file with mode: 0644]
src/main/java/com/iciql/adapter/JavaSerializationTypeAdapter.java [new file with mode: 0644]
src/main/java/com/iciql/adapter/XStreamTypeAdapter.java [new file with mode: 0644]
src/main/java/com/iciql/adapter/postgres/GsonBTypeAdapter.java [new file with mode: 0644]
src/main/java/com/iciql/adapter/postgres/GsonTypeAdapter.java [new file with mode: 0644]
src/main/java/com/iciql/adapter/postgres/JsonStringAdapter.java [new file with mode: 0644]
src/main/java/com/iciql/adapter/postgres/JsonbStringAdapter.java [new file with mode: 0644]
src/main/java/com/iciql/adapter/postgres/XStreamTypeAdapter.java [new file with mode: 0644]
src/main/java/com/iciql/adapter/postgres/XmlStringAdapter.java [new file with mode: 0644]
src/site/dta.mkd
src/test/java/com/iciql/test/DataTypeAdapterTest.java

index 4431ee53d52be7ab1621b6c81be12c60e34c9d53..db0a9048e3044b6162cc871df4a5a2629d81eb03 100644 (file)
        <classpathentry kind="lib" path="ext/slf4j-api-1.6.1.jar" sourcepath="ext/src/slf4j-api-1.6.1.jar" />
        <classpathentry kind="lib" path="ext/commons-pool-1.5.6.jar" sourcepath="ext/src/commons-pool-1.5.6.jar" />
        <classpathentry kind="lib" path="ext/commons-dbcp-1.4.jar" sourcepath="ext/src/commons-dbcp-1.4.jar" />
+       <classpathentry kind="lib" path="ext/gson-2.3.jar" sourcepath="ext/src/gson-2.3.jar" />
+       <classpathentry kind="lib" path="ext/xstream-1.4.7.jar" sourcepath="ext/src/xstream-1.4.7.jar" />
+       <classpathentry kind="lib" path="ext/xmlpull-1.1.3.1.jar" />
+       <classpathentry kind="lib" path="ext/xpp3_min-1.1.4c.jar" />
        <classpathentry kind="lib" path="ext/junit-4.11.jar" sourcepath="ext/src/junit-4.11.jar" />
+       <classpathentry kind="lib" path="ext/jmock-1.0.1.jar" sourcepath="ext/src/jmock-1.0.1.jar" />
        <classpathentry kind="lib" path="ext/hamcrest-core-1.3.jar" sourcepath="ext/src/hamcrest-core-1.3.jar" />
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" />
        <classpathentry kind="output" path="bin/classes" />
index 03acef4f184e8e3fa875a392ce1b4323116a26c4..0595b2de425ae8ea28c1d6e54682a2e161ab3aad 100644 (file)
@@ -101,5 +101,7 @@ dependencies:
 - provided 'org.slf4j:slf4j-api:1.6.1'
 - provided 'commons-pool:commons-pool:1.5.6'
 - provided 'commons-dbcp:commons-dbcp:1.4'
+- provided 'com.google.code.gson:gson:2.3'
+- provided 'com.thoughtworks.xstream:xstream:1.4.7'
 - test 'junit'
 - build 'jacoco'
diff --git a/src/main/java/com/iciql/JavaSerializationTypeAdapter.java b/src/main/java/com/iciql/JavaSerializationTypeAdapter.java
deleted file mode 100644 (file)
index e38e0f8..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2014 James Moger.
- *
- * Licensed 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 com.iciql;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.sql.Blob;
-import java.sql.SQLException;
-
-import com.iciql.Iciql.DataTypeAdapter;
-
-/**
- * Base class for inserting/retrieving a Java Object as a BLOB field using Java Serialization.
- * <p>You use this by creating a subclass which defines your object class.</p>
- * <pre>
- * public class CustomObjectAdapter extends JavaSerializationTypeAdapter&lt;CustomObject&gt; {
- *
- *    public Class&lt;CustomObject&gt; getJavaType() {
- *        return CustomObject.class;
- *    }
- * }
- * </pre>
- * @param <T>
- */
-public abstract class JavaSerializationTypeAdapter<T> implements DataTypeAdapter<T> {
-
-       @Override
-       public final String getDataType() {
-               return "BLOB";
-       }
-
-       @Override
-       public final Object serialize(T value) {
-               ByteArrayOutputStream os = new ByteArrayOutputStream();
-               try {
-                       new ObjectOutputStream(os).writeObject(value);
-                       return os.toByteArray();
-               } catch (IOException e) {
-                       throw new IciqlException(e);
-               } finally {
-                       try {
-                               os.close();
-                       } catch (IOException e) {
-                               throw new IciqlException (e);
-                       }
-               }
-       }
-
-       @SuppressWarnings("unchecked")
-       @Override
-       public final T deserialize(Object value) {
-               InputStream is = null;
-               if (value instanceof Blob) {
-                       Blob blob = (Blob) value;
-                       try {
-                               is = blob.getBinaryStream();
-                       } catch (SQLException e) {
-                               throw new IciqlException(e);
-                       }
-               } else if (value instanceof byte[]) {
-                       byte [] bytes = (byte []) value;
-                       is = new ByteArrayInputStream(bytes);
-               }
-
-               try {
-                       T object = (T) new ObjectInputStream(is).readObject();
-                       return object;
-               } catch (Exception e) {
-                       throw new IciqlException(e);
-               } finally {
-                       if (is != null) {
-                               try {
-                                       is.close();
-                               } catch (IOException e) {
-                                       throw new IciqlException (e);
-                               }
-                       }
-               }
-       }
-}
index f10017cd815841264567e95a925eefaa7d8fd2b4..6998c24556fb1f33a5a9067423d20b2a704e18e4 100644 (file)
 \r
 package com.iciql;\r
 \r
-import java.sql.SQLException;\r
-\r
-import org.postgresql.util.PGobject;\r
-\r
-import com.iciql.Iciql.DataTypeAdapter;\r
 import com.iciql.TableDefinition.IndexDefinition;\r
 import com.iciql.util.StatementBuilder;\r
 \r
@@ -106,102 +101,4 @@ public class SQLDialectPostgreSQL extends SQLDialectDefault {
                stat.setSQL(buff.toString().trim());\r
        }\r
 \r
-       /**\r
-        * Handles transforming raw strings to/from the Postgres JSON data type.\r
-        */\r
-       public class JsonStringAdapter implements DataTypeAdapter<String> {\r
-\r
-               @Override\r
-               public String getDataType() {\r
-                       return "json";\r
-               }\r
-\r
-               @Override\r
-               public Class<String> getJavaType() {\r
-                       return String.class;\r
-               }\r
-\r
-               @Override\r
-               public Object serialize(String value) {\r
-                       PGobject pg = new PGobject();\r
-                       pg.setType(getDataType());\r
-                       try {\r
-                               pg.setValue(value);\r
-                       } catch (SQLException e) {\r
-                               // not thrown on base PGobject\r
-                       }\r
-                       return pg;\r
-               }\r
-\r
-               @Override\r
-               public String deserialize(Object value) {\r
-                       return value.toString();\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Handles transforming raw strings to/from the Postgres JSONB data type.\r
-        */\r
-       public class JsonbStringAdapter implements DataTypeAdapter<String> {\r
-\r
-               @Override\r
-               public String getDataType() {\r
-                       return "jsonb";\r
-               }\r
-\r
-               @Override\r
-               public Class<String> getJavaType() {\r
-                       return String.class;\r
-               }\r
-\r
-               @Override\r
-               public Object serialize(String value) {\r
-                       PGobject pg = new PGobject();\r
-                       pg.setType(getDataType());\r
-                       try {\r
-                               pg.setValue(value);\r
-                       } catch (SQLException e) {\r
-                               // not thrown on base PGobject\r
-                       }\r
-                       return pg;\r
-               }\r
-\r
-               @Override\r
-               public String deserialize(Object value) {\r
-                       return value.toString();\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Handles transforming raw strings to/from the Postgres XML data type.\r
-        */\r
-       public class XmlStringAdapter implements DataTypeAdapter<String> {\r
-\r
-               @Override\r
-               public String getDataType() {\r
-                       return "xml";\r
-               }\r
-\r
-               @Override\r
-               public Class<String> getJavaType() {\r
-                       return String.class;\r
-               }\r
-\r
-               @Override\r
-               public Object serialize(String value) {\r
-                       PGobject pg = new PGobject();\r
-                       pg.setType(getDataType());\r
-                       try {\r
-                               pg.setValue(value);\r
-                       } catch (SQLException e) {\r
-                               // not thrown on base PGobject\r
-                       }\r
-                       return pg;\r
-               }\r
-\r
-               @Override\r
-               public String deserialize(Object value) {\r
-                       return value.toString();\r
-               }\r
-       }\r
 }
\ No newline at end of file
diff --git a/src/main/java/com/iciql/adapter/GsonTypeAdapter.java b/src/main/java/com/iciql/adapter/GsonTypeAdapter.java
new file mode 100644 (file)
index 0000000..a85f15e
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2014 James Moger.
+ *
+ * Licensed 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 com.iciql.adapter;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.iciql.Iciql.DataTypeAdapter;
+
+/**
+ * Base class for inserting/retrieving a Java Object (de)serialized as JSON using Google GSON.
+ * <p>You use this by creating a subclass which defines your object class.</p>
+ * <pre>
+ * public class CustomObjectAdapter extends GsonTypeAdapter&lt;CustomObject&gt; {
+ *
+ *    public Class&lt;CustomObject&gt; getJavaType() {
+ *        return CustomObject.class;
+ *    }
+ * }
+ * </pre>
+ * @param <T>
+ */
+public abstract class GsonTypeAdapter<T> implements DataTypeAdapter<T> {
+
+       protected Gson gson() {
+               return new GsonBuilder().create();
+       }
+
+       @Override
+       public String getDataType() {
+               return "TEXT";
+       }
+
+       @Override
+       public Object serialize(T value) {
+               return gson().toJson(value);
+       }
+
+       @Override
+       public T deserialize(Object value) {
+               String json = value.toString();
+               Gson gson = gson();
+               T t = gson.fromJson(json, getJavaType());
+               return t;
+       }
+}
diff --git a/src/main/java/com/iciql/adapter/JavaSerializationTypeAdapter.java b/src/main/java/com/iciql/adapter/JavaSerializationTypeAdapter.java
new file mode 100644 (file)
index 0000000..c475817
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2014 James Moger.
+ *
+ * Licensed 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 com.iciql.adapter;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.sql.Blob;
+import java.sql.SQLException;
+
+import com.iciql.Iciql;
+import com.iciql.IciqlException;
+import com.iciql.Iciql.DataTypeAdapter;
+
+/**
+ * Base class for inserting/retrieving a Java Object as a BLOB field using Java Serialization.
+ * <p>You use this by creating a subclass which defines your object class.</p>
+ * <pre>
+ * public class CustomObjectAdapter extends JavaSerializationTypeAdapter&lt;CustomObject&gt; {
+ *
+ *    public Class&lt;CustomObject&gt; getJavaType() {
+ *        return CustomObject.class;
+ *    }
+ * }
+ * </pre>
+ * @param <T>
+ */
+public abstract class JavaSerializationTypeAdapter<T> implements DataTypeAdapter<T> {
+
+       @Override
+       public final String getDataType() {
+               return "BLOB";
+       }
+
+       @Override
+       public final Object serialize(T value) {
+               ByteArrayOutputStream os = new ByteArrayOutputStream();
+               try {
+                       new ObjectOutputStream(os).writeObject(value);
+                       return os.toByteArray();
+               } catch (IOException e) {
+                       throw new IciqlException(e);
+               } finally {
+                       try {
+                               os.close();
+                       } catch (IOException e) {
+                               throw new IciqlException (e);
+                       }
+               }
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public final T deserialize(Object value) {
+               InputStream is = null;
+               if (value instanceof Blob) {
+                       Blob blob = (Blob) value;
+                       try {
+                               is = blob.getBinaryStream();
+                       } catch (SQLException e) {
+                               throw new IciqlException(e);
+                       }
+               } else if (value instanceof byte[]) {
+                       byte [] bytes = (byte []) value;
+                       is = new ByteArrayInputStream(bytes);
+               }
+
+               try {
+                       T object = (T) new ObjectInputStream(is).readObject();
+                       return object;
+               } catch (Exception e) {
+                       throw new IciqlException(e);
+               } finally {
+                       if (is != null) {
+                               try {
+                                       is.close();
+                               } catch (IOException e) {
+                                       throw new IciqlException (e);
+                               }
+                       }
+               }
+       }
+}
diff --git a/src/main/java/com/iciql/adapter/XStreamTypeAdapter.java b/src/main/java/com/iciql/adapter/XStreamTypeAdapter.java
new file mode 100644 (file)
index 0000000..3d1a9ce
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2014 James Moger.
+ *
+ * Licensed 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 com.iciql.adapter;
+
+import com.iciql.Iciql.DataTypeAdapter;
+import com.thoughtworks.xstream.XStream;
+
+/**
+ * Base class for inserting/retrieving a Java Object (de)serialized as XML using XStream.
+ * <p>You use this by creating a subclass which defines your object class.</p>
+ * <pre>
+ * public class CustomObjectAdapter extends XStreamTypeAdapter&lt;CustomObject&gt; {
+ *
+ *    public Class&lt;CustomObject&gt; getJavaType() {
+ *        return CustomObject.class;
+ *    }
+ * }
+ * </pre>
+ * @param <T>
+ */
+public abstract class XStreamTypeAdapter<T> implements DataTypeAdapter<T> {
+
+       protected XStream xstream() {
+               return new XStream();
+       }
+
+       @Override
+       public String getDataType() {
+               return "TEXT";
+       }
+
+       @Override
+       public Object serialize(T value) {
+               return xstream().toXML(value);
+       }
+
+       @Override
+       public T deserialize(Object value) {
+               String xml = value.toString();
+               XStream xstream = xstream();
+               T t = (T) xstream.fromXML(xml);
+               return t;
+       }
+}
diff --git a/src/main/java/com/iciql/adapter/postgres/GsonBTypeAdapter.java b/src/main/java/com/iciql/adapter/postgres/GsonBTypeAdapter.java
new file mode 100644 (file)
index 0000000..6332742
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2014 James Moger.
+ *
+ * Licensed 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 com.iciql.adapter.postgres;
+
+import java.sql.SQLException;
+
+import org.postgresql.util.PGobject;
+
+import com.iciql.adapter.GsonTypeAdapter;
+
+/**
+ * Postgres JSONB data type adapter maps a JSONB column to a domain object using Google GSON.
+ *
+ * @author James Moger
+ *
+ * @param <T>
+ */
+public abstract class GsonBTypeAdapter<T> extends GsonTypeAdapter<T> {
+
+       @Override
+       public String getDataType() {
+               return "jsonb";
+       }
+
+       @Override
+       public Object serialize(T value) {
+
+               String json = gson().toJson(value);
+               PGobject pg = new PGobject();
+               pg.setType(getDataType());
+               try {
+                       pg.setValue(json);
+               } catch (SQLException e) {
+                       // not thrown on base PGobject
+               }
+               return pg;
+       }
+}
diff --git a/src/main/java/com/iciql/adapter/postgres/GsonTypeAdapter.java b/src/main/java/com/iciql/adapter/postgres/GsonTypeAdapter.java
new file mode 100644 (file)
index 0000000..64481bd
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2014 James Moger.
+ *
+ * Licensed 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 com.iciql.adapter.postgres;
+
+import java.sql.SQLException;
+
+import org.postgresql.util.PGobject;
+
+/**
+ * Postgres JSON data type adapter maps a JSON column to a domain object using Google GSON.
+ *
+ * @author James Moger
+ *
+ * @param <T>
+ */
+public abstract class GsonTypeAdapter<T> extends com.iciql.adapter.GsonTypeAdapter<T> {
+
+       @Override
+       public String getDataType() {
+               return "json";
+       }
+
+       @Override
+       public Object serialize(T value) {
+
+               String json = gson().toJson(value);
+               PGobject pg = new PGobject();
+               pg.setType(getDataType());
+               try {
+                       pg.setValue(json);
+               } catch (SQLException e) {
+                       // not thrown on base PGobject
+               }
+               return pg;
+       }
+}
diff --git a/src/main/java/com/iciql/adapter/postgres/JsonStringAdapter.java b/src/main/java/com/iciql/adapter/postgres/JsonStringAdapter.java
new file mode 100644 (file)
index 0000000..64ad073
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2014 James Moger.
+ *
+ * Licensed 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 com.iciql.adapter.postgres;
+
+import java.sql.SQLException;
+
+import org.postgresql.util.PGobject;
+
+import com.iciql.Iciql.DataTypeAdapter;
+
+/**
+        * Handles transforming raw strings to/from the Postgres JSON data type.
+        */
+       public class JsonStringAdapter implements DataTypeAdapter<String> {
+
+               @Override
+               public String getDataType() {
+                       return "json";
+               }
+
+               @Override
+               public Class<String> getJavaType() {
+                       return String.class;
+               }
+
+               @Override
+               public Object serialize(String value) {
+                       PGobject pg = new PGobject();
+                       pg.setType(getDataType());
+                       try {
+                               pg.setValue(value);
+                       } catch (SQLException e) {
+                               // not thrown on base PGobject
+                       }
+                       return pg;
+               }
+
+               @Override
+               public String deserialize(Object value) {
+                       return value.toString();
+               }
+       }
\ No newline at end of file
diff --git a/src/main/java/com/iciql/adapter/postgres/JsonbStringAdapter.java b/src/main/java/com/iciql/adapter/postgres/JsonbStringAdapter.java
new file mode 100644 (file)
index 0000000..1619811
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2014 James Moger.
+ *
+ * Licensed 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 com.iciql.adapter.postgres;
+
+import java.sql.SQLException;
+
+import org.postgresql.util.PGobject;
+
+import com.iciql.Iciql.DataTypeAdapter;
+
+/**
+ * Handles transforming raw strings to/from the Postgres JSONB data type.
+ */
+public class JsonbStringAdapter implements DataTypeAdapter<String> {
+
+       @Override
+       public String getDataType() {
+               return "jsonb";
+       }
+
+       @Override
+       public Class<String> getJavaType() {
+               return String.class;
+       }
+
+       @Override
+       public Object serialize(String value) {
+               PGobject pg = new PGobject();
+               pg.setType(getDataType());
+               try {
+                       pg.setValue(value);
+               } catch (SQLException e) {
+                       // not thrown on base PGobject
+               }
+               return pg;
+       }
+
+       @Override
+       public String deserialize(Object value) {
+               return value.toString();
+       }
+}
\ No newline at end of file
diff --git a/src/main/java/com/iciql/adapter/postgres/XStreamTypeAdapter.java b/src/main/java/com/iciql/adapter/postgres/XStreamTypeAdapter.java
new file mode 100644 (file)
index 0000000..1bf6fc2
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2014 James Moger.
+ *
+ * Licensed 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 com.iciql.adapter.postgres;
+
+
+
+/**
+ * Postgres XML data type adapter maps an XML column to a domain object using XStream.
+ *
+ * @author James Moger
+ *
+ * @param <T>
+ */
+public abstract class XStreamTypeAdapter<T> extends com.iciql.adapter.XStreamTypeAdapter<T> {
+
+       @Override
+       public String getDataType() {
+               return "xml";
+       }
+
+}
diff --git a/src/main/java/com/iciql/adapter/postgres/XmlStringAdapter.java b/src/main/java/com/iciql/adapter/postgres/XmlStringAdapter.java
new file mode 100644 (file)
index 0000000..ded517e
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2014 James Moger.
+ *
+ * Licensed 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 com.iciql.adapter.postgres;
+
+import java.sql.SQLException;
+
+import org.postgresql.util.PGobject;
+
+import com.iciql.Iciql.DataTypeAdapter;
+
+/**
+ * Handles transforming raw strings to/from the Postgres XML data type.
+ */
+public class XmlStringAdapter implements DataTypeAdapter<String> {
+
+       @Override
+       public String getDataType() {
+               return "xml";
+       }
+
+       @Override
+       public Class<String> getJavaType() {
+               return String.class;
+       }
+
+       @Override
+       public Object serialize(String value) {
+               PGobject pg = new PGobject();
+               pg.setType(getDataType());
+               try {
+                       pg.setValue(value);
+               } catch (SQLException e) {
+                       // not thrown on base PGobject
+               }
+               return pg;
+       }
+
+       @Override
+       public String deserialize(Object value) {
+               return value.toString();
+       }
+}
\ No newline at end of file
index 61c5f62d72f5cedbd6635373f888c7e60c3de9eb..6795a0fa7b29fd29b4ce36fa01eef2092f849717 100644 (file)
@@ -93,12 +93,22 @@ public @interface InvoiceAdapter { }
 Not every DataTypeAdapter has to be a custom implementation.\r
 The following adapters are included in Iciql for general purpose use.\r
 \r
-- `com.iciql.JavaSerializationTypeAdapter`\r
+- `com.iciql.adapter.JavaSerializationTypeAdapter`\r
 Uses Java serialization to store/retrieve your objects as BLOBs.\r
-- `com.iciql.SQLDialectPostgreSQL.JsonStringAdapter`\r
+- `com.iciql.adapter.GsonTypeAdapter`\r
+Uses Google Gson to store/retrieve your objects as TEXT.\r
+- `com.iciql.adapter.XmlTypeAdapter`\r
+Uses XStream to store/retrieve your objects as TEXT.\r
+- `com.iciql.adapter.postgres.GsonTypeAdapter`\r
+Uses Google Gson to store/retrieve your objects as JSON for Postgres.\r
+- `com.iciql.adapter.postgres.GsonBTypeAdapter`\r
+Uses Google Gson to store/retrieve your objects as JSONB for Postgres.\r
+- `com.iciql.adapter.postgres.XStreamTypeAdapter`\r
+Uses XStream to store/retrieve your objects as XML for Postgres.\r
+- `com.iciql.adapter.postgres.JsonStringAdapter`\r
 Allows you to use the Postgres JSON data type with a standard String.\r
-- `com.iciql.SQLDialectPostgreSQL.JsonbStringAdapter`\r
+- `com.iciql.adapter.postgres.JsonbStringAdapter`\r
 Allows you to use the Postgres JSONB data type with a standard String.\r
-- `com.iciql.SQLDialectPostgreSQL.XmlStringAdapter`\r
+- `com.iciql.adapter.postgres.XmlStringAdapter`\r
 Allows you to use the Postgres XML data type with a standard String.\r
 \r
index d1ccb538926d83e70d50575b270431cd5ba86727..1f0e77131f5d094a75d3af52a1e68f252a90069a 100644 (file)
@@ -31,7 +31,7 @@ import com.iciql.Db;
 import com.iciql.Iciql.IQColumn;
 import com.iciql.Iciql.IQTable;
 import com.iciql.Iciql.TypeAdapter;
-import com.iciql.JavaSerializationTypeAdapter;
+import com.iciql.adapter.JavaSerializationTypeAdapter;
 import com.iciql.test.models.SupportedTypes;
 
 /**