X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2FCustomSerializer.java;h=0bafb86f65152755ca7684614622af34e7aec449;hb=451f434bd60a354ae5928f5da36b76f24b7b423b;hp=b6928eec7685b853aff33537cd2844e0bfcc24d8;hpb=db31c35860081535d6e7ddc83ab4af573bb0522e;p=fanfix.git diff --git a/src/be/nikiroo/utils/serial/CustomSerializer.java b/src/be/nikiroo/utils/serial/CustomSerializer.java index b6928ee..0bafb86 100644 --- a/src/be/nikiroo/utils/serial/CustomSerializer.java +++ b/src/be/nikiroo/utils/serial/CustomSerializer.java @@ -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))); }