Version 3.1.1: fixes: ServerBridge, Import/Export
[nikiroo-utils.git] / src / be / nikiroo / utils / serial / CustomSerializer.java
index b6928eec7685b853aff33537cd2844e0bfcc24d8..0bafb86f65152755ca7684614622af34e7aec449 100644 (file)
@@ -1,20 +1,38 @@
 package be.nikiroo.utils.serial;
 
+import java.io.IOException;
+
 public abstract class CustomSerializer {
 
        protected abstract String toString(Object value);
 
-       protected abstract Object fromString(String content);
+       protected abstract Object fromString(String content) throws IOException;
 
        protected abstract String getType();
 
-       public void encode(StringBuilder builder, Object value) {
+       /**
+        * Encode the object into the given builder if possible (if supported).
+        * 
+        * @param builder
+        *            the builder to append to
+        * @param value
+        *            the object to encode
+        * @return TRUE if success, FALSE if not (the content of the builder won't
+        *         be changed in case of failure)
+        */
+       public boolean encode(StringBuilder builder, Object value) {
+               int prev = builder.length();
                String customString = toString(value);
                builder.append("custom:").append(getType()).append(":");
-               SerialUtils.encode(builder, customString);
+               if (!SerialUtils.encode(builder, customString)) {
+                       builder.delete(prev, builder.length());
+                       return false;
+               }
+
+               return true;
        }
 
-       public Object decode(String encodedValue) {
+       public Object decode(String encodedValue) throws IOException {
                return fromString((String) SerialUtils.decode(contentOf(encodedValue)));
        }