Use local copy of latest bndlib code for pre-release testing purposes
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1347815 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/lib/json/SpecialHandler.java b/bundleplugin/src/main/java/aQute/lib/json/SpecialHandler.java
new file mode 100644
index 0000000..33bde8f
--- /dev/null
+++ b/bundleplugin/src/main/java/aQute/lib/json/SpecialHandler.java
@@ -0,0 +1,44 @@
+package aQute.lib.json;
+
+import java.io.*;
+import java.lang.reflect.*;
+import java.text.*;
+import java.util.*;
+import java.util.regex.*;
+
+public class SpecialHandler extends Handler {
+ @SuppressWarnings("rawtypes")
+ final Class type;
+ final Method valueOf;
+ final Constructor< ? > constructor;
+ final static SimpleDateFormat sdf = new SimpleDateFormat();
+
+ public SpecialHandler(Class< ? > type, Constructor< ? > constructor,
+ Method valueOf) {
+ this.type = type;
+ this.constructor = constructor;
+ this.valueOf = valueOf;
+ }
+
+ @Override
+ void encode(Encoder app, Object object, Map<Object, Type> visited)
+ throws IOException, Exception {
+ StringHandler.string(app, object.toString());
+ }
+
+ @Override
+ Object decode(String s) throws Exception {
+ if (type == Pattern.class)
+ return Pattern.compile(s);
+
+ if (constructor != null)
+ return constructor.newInstance(s);
+
+ if (valueOf != null)
+ return valueOf.invoke(null, s);
+
+ throw new IllegalArgumentException("Do not know how to convert a "
+ + type + " from a string");
+ }
+
+}