Another (in-place) bndlib update

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1368464 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/lib/json/BooleanHandler.java b/bundleplugin/src/main/java/aQute/lib/json/BooleanHandler.java
index 5dd4990..9dfbaf4 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/BooleanHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/BooleanHandler.java
@@ -12,22 +12,22 @@
 	}
 
 	@Override
-	Object decode(boolean s) {
+	Object decode(Decoder dec, boolean s) {
 		return s;
 	}
 
 	@Override
-	Object decode(String s) {
+	Object decode(Decoder dec, String s) {
 		return Boolean.parseBoolean(s);
 	}
 
 	@Override
-	Object decode(Number s) {
+	Object decode(Decoder dec, Number s) {
 		return s.intValue() != 0;
 	}
 
 	@Override
-	Object decode() {
+	Object decode(Decoder dec) {
 		return false;
 	}
 
diff --git a/bundleplugin/src/main/java/aQute/lib/json/ByteArrayHandler.java b/bundleplugin/src/main/java/aQute/lib/json/ByteArrayHandler.java
index d956a6c..957369f 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/ByteArrayHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/ByteArrayHandler.java
@@ -5,12 +5,16 @@
 import java.util.*;
 
 import aQute.lib.base64.*;
+import aQute.lib.hex.*;
 
 public class ByteArrayHandler extends Handler {
 
 	@Override
 	void encode(Encoder app, Object object, Map<Object,Type> visited) throws IOException, Exception {
-		StringHandler.string(app, Base64.encodeBase64((byte[]) object));
+		if ( app.codec.isHex())
+			StringHandler.string(app, Hex.toHexString((byte[]) object));
+		else
+			StringHandler.string(app, Base64.encodeBase64((byte[]) object));
 	}
 
 	@Override
@@ -26,7 +30,10 @@
 	}
 
 	@Override
-	Object decode(String s) throws Exception {
-		return Base64.decodeBase64(s);
+	Object decode(Decoder dec, String s) throws Exception {
+		if ( dec.codec.isHex())
+			return Hex.toByteArray(s);
+		else
+			return Base64.decodeBase64(s);
 	}
 }
diff --git a/bundleplugin/src/main/java/aQute/lib/json/CharacterHandler.java b/bundleplugin/src/main/java/aQute/lib/json/CharacterHandler.java
index 23605bf..799f73c 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/CharacterHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/CharacterHandler.java
@@ -13,22 +13,22 @@
 	}
 
 	@Override
-	Object decode(boolean s) {
+	Object decode(Decoder dec, boolean s) {
 		return s ? 't' : 'f';
 	}
 
 	@Override
-	Object decode(String s) {
+	Object decode(Decoder dec, String s) {
 		return (char) Integer.parseInt(s);
 	}
 
 	@Override
-	Object decode(Number s) {
+	Object decode(Decoder dec, Number s) {
 		return (char) s.shortValue();
 	}
 
 	@Override
-	Object decode() {
+	Object decode(Decoder dec) {
 		return 0;
 	}
 
diff --git a/bundleplugin/src/main/java/aQute/lib/json/DateHandler.java b/bundleplugin/src/main/java/aQute/lib/json/DateHandler.java
index 784fcbe..cb3c27e 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/DateHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/DateHandler.java
@@ -18,14 +18,14 @@
 	}
 
 	@Override
-	Object decode(String s) throws Exception {
+	Object decode(Decoder dec, String s) throws Exception {
 		synchronized (sdf) {
 			return sdf.parse(s);
 		}
 	}
 
 	@Override
-	Object decode(Number s) throws Exception {
+	Object decode(Decoder dec, Number s) throws Exception {
 		return new Date(s.longValue());
 	}
 
diff --git a/bundleplugin/src/main/java/aQute/lib/json/EnumHandler.java b/bundleplugin/src/main/java/aQute/lib/json/EnumHandler.java
index 85aad12..9b5eaf3 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/EnumHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/EnumHandler.java
@@ -17,8 +17,9 @@
 		StringHandler.string(app, object.toString());
 	}
 
+	@Override
 	@SuppressWarnings("unchecked")
-	Object decode(String s) throws Exception {
+	Object decode(Decoder dec, String s) throws Exception {
 		return Enum.valueOf(type, s);
 	}
 
diff --git a/bundleplugin/src/main/java/aQute/lib/json/FileHandler.java b/bundleplugin/src/main/java/aQute/lib/json/FileHandler.java
index c024090..b2c0838 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/FileHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/FileHandler.java
@@ -25,7 +25,8 @@
 		}
 	}
 
-	Object decode(String s) throws Exception {
+	@Override
+	Object decode(Decoder dec, String s) throws Exception {
 		File tmp = File.createTempFile("json", ".bin");
 		FileOutputStream fout = new FileOutputStream(tmp);
 		try {
diff --git a/bundleplugin/src/main/java/aQute/lib/json/Handler.java b/bundleplugin/src/main/java/aQute/lib/json/Handler.java
index c5e8b17..5738b04 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/Handler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/Handler.java
@@ -15,19 +15,19 @@
 		throw new UnsupportedOperationException("Cannot be mapped to array " + this);
 	}
 
-	Object decode(@SuppressWarnings("unused") String s) throws Exception {
+	Object decode(Decoder dec, @SuppressWarnings("unused") String s) throws Exception {
 		throw new UnsupportedOperationException("Cannot be mapped to string " + this);
 	}
 
-	Object decode(@SuppressWarnings("unused") Number s) throws Exception {
+	Object decode(Decoder dec, @SuppressWarnings("unused") Number s) throws Exception {
 		throw new UnsupportedOperationException("Cannot be mapped to number " + this);
 	}
 
-	Object decode(@SuppressWarnings("unused") boolean s) {
+	Object decode(Decoder dec, @SuppressWarnings("unused") boolean s) {
 		throw new UnsupportedOperationException("Cannot be mapped to boolean " + this);
 	}
 
-	Object decode() {
+	Object decode(Decoder dec) {
 		return null;
 	}
 
diff --git a/bundleplugin/src/main/java/aQute/lib/json/JSONCodec.java b/bundleplugin/src/main/java/aQute/lib/json/JSONCodec.java
index 8e608f8..47ad4ab 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/JSONCodec.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/JSONCodec.java
@@ -51,6 +51,7 @@
 	private static ByteArrayHandler					byteh				= new ByteArrayHandler();
 
 	boolean											ignorenull;
+	boolean											useHex;
 
 	/**
 	 * Create a new Encoder with the state and appropriate API.
@@ -191,7 +192,8 @@
 					else if (Map.class.isAssignableFrom(rawClass))
 						h = new MapHandler(rawClass, pt.getActualTypeArguments()[0], pt.getActualTypeArguments()[1]);
 					else if (Dictionary.class.isAssignableFrom(rawClass))
-						h = new MapHandler(Hashtable.class, pt.getActualTypeArguments()[0], pt.getActualTypeArguments()[1]);
+						h = new MapHandler(Hashtable.class, pt.getActualTypeArguments()[0],
+								pt.getActualTypeArguments()[1]);
 					else
 						throw new IllegalArgumentException("Found a parameterized type that is not a map or collection");
 				}
@@ -270,19 +272,19 @@
 				return h.decodeArray(isr);
 
 			case '"' :
-				return h.decode(parseString(isr));
+				return h.decode(isr, parseString(isr));
 
 			case 'n' :
 				isr.expect("ull");
-				return h.decode();
+				return h.decode(isr);
 
 			case 't' :
 				isr.expect("rue");
-				return h.decode(Boolean.TRUE);
+				return h.decode(isr,Boolean.TRUE);
 
 			case 'f' :
 				isr.expect("alse");
-				return h.decode(Boolean.FALSE);
+				return h.decode(isr,Boolean.FALSE);
 
 			case '0' :
 			case '1' :
@@ -295,7 +297,7 @@
 			case '8' :
 			case '9' :
 			case '-' :
-				return h.decode(parseNumber(isr));
+				return h.decode(isr,parseNumber(isr));
 
 			default :
 				throw new IllegalArgumentException("Unexpected character in input stream: " + (char) c);
@@ -486,4 +488,19 @@
 		return ignorenull;
 	}
 
+	/**
+	 * Use hex instead of default base 64 encoding
+	 * 
+	 * @param useHex
+	 * @return
+	 */
+	public JSONCodec setHex(boolean useHex) {
+		this.useHex = useHex;
+		return this;
+	}
+
+	public boolean isHex() {
+		return useHex;
+	}
+
 }
\ No newline at end of file
diff --git a/bundleplugin/src/main/java/aQute/lib/json/MapHandler.java b/bundleplugin/src/main/java/aQute/lib/json/MapHandler.java
index 62bf07f..504bb07 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/MapHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/MapHandler.java
@@ -62,7 +62,7 @@
 			Object key = r.codec.parseString(r);
 			if (!(keyType == null || keyType == Object.class)) {
 				Handler h = r.codec.getHandler(keyType);
-				key = h.decode((String) key);
+				key = h.decode(r,(String) key);
 			}
 
 			c = r.skipWs();
diff --git a/bundleplugin/src/main/java/aQute/lib/json/NumberHandler.java b/bundleplugin/src/main/java/aQute/lib/json/NumberHandler.java
index 310ca3e..d8e6160 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/NumberHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/NumberHandler.java
@@ -21,23 +21,23 @@
 	}
 
 	@Override
-	Object decode(boolean s) {
-		return decode(s ? 1d : 0d);
+	Object decode(Decoder dec, boolean s) {
+		return decode(dec,s ? 1d : 0d);
 	}
 
 	@Override
-	Object decode(String s) {
+	Object decode(Decoder dec, String s) {
 		double d = Double.parseDouble(s);
-		return decode(d);
+		return decode(dec, d);
 	}
 
 	@Override
-	Object decode() {
-		return decode(0d);
+	Object decode(Decoder dec) {
+		return decode(dec,0d);
 	}
 
 	@Override
-	Object decode(Number s) {
+	Object decode(Decoder dec, Number s) {
 		double dd = s.doubleValue();
 
 		if (type == double.class || type == Double.class)
diff --git a/bundleplugin/src/main/java/aQute/lib/json/SpecialHandler.java b/bundleplugin/src/main/java/aQute/lib/json/SpecialHandler.java
index bcd05ef..36218c8 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/SpecialHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/SpecialHandler.java
@@ -25,7 +25,7 @@
 	}
 
 	@Override
-	Object decode(String s) throws Exception {
+	Object decode(Decoder dec, String s) throws Exception {
 		if (type == Pattern.class)
 			return Pattern.compile(s);
 
diff --git a/bundleplugin/src/main/java/aQute/lib/json/StringHandler.java b/bundleplugin/src/main/java/aQute/lib/json/StringHandler.java
index 0971826..ba62a13 100644
--- a/bundleplugin/src/main/java/aQute/lib/json/StringHandler.java
+++ b/bundleplugin/src/main/java/aQute/lib/json/StringHandler.java
@@ -59,19 +59,23 @@
 		app.append('"');
 	}
 
-	Object decode(String s) throws Exception {
+	@Override
+	Object decode(Decoder dec, String s) throws Exception {
 		return s;
 	}
 
-	Object decode(Number s) {
+	@Override
+	Object decode(Decoder dec, Number s) {
 		return s.toString();
 	}
 
-	Object decode(boolean s) {
+	@Override
+	Object decode(Decoder dec, boolean s) {
 		return Boolean.toString(s);
 	}
 
-	Object decode() {
+	@Override
+	Object decode(Decoder dec ) {
 		return null;
 	}
 
@@ -87,6 +91,7 @@
 	 * An array can be assigned to a string. This means that the stream is
 	 * interpreted as the array but stored in its complete in the string.
 	 */
+	@Override
 	Object decodeArray(Decoder r) throws Exception {
 		return collect(r, ']');
 	}