X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2FCustomSerializer.java;h=e29e8cf93969e950a096ece9d48d14a9a81576be;hb=4d31956549a05df6dca42d58a1150a348a58dcd1;hp=80bac595a8a13068b1b45b10ece585c1566d5bb9;hpb=ecd81c088d8df94c47c85399afdab87bbd39afaf;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/serial/CustomSerializer.java b/src/be/nikiroo/utils/serial/CustomSerializer.java index 80bac59..e29e8cf 100644 --- a/src/be/nikiroo/utils/serial/CustomSerializer.java +++ b/src/be/nikiroo/utils/serial/CustomSerializer.java @@ -4,6 +4,10 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import be.nikiroo.utils.IOUtils; +import be.nikiroo.utils.NextableInputStream; +import be.nikiroo.utils.NextableInputStreamStep; + public abstract class CustomSerializer { protected abstract void toStream(OutputStream out, Object value) @@ -29,20 +33,53 @@ public abstract class CustomSerializer { * in case of I/O error */ public boolean encode(OutputStream out, Object value) throws IOException { - if (!isSupported(value)) { - return false; - } - SerialUtils.write(out, "custom^"); SerialUtils.write(out, getType()); SerialUtils.write(out, "^"); + // TODO: manage ENTER toStream(out, value); return true; } - public Object decode(String encodedValue) throws IOException { - return fromString((String) SerialUtils.decode(contentOf(encodedValue))); + public Object decode(InputStream in) throws IOException { + // TODO: manage ENTER + NextableInputStream stream = new NextableInputStream(in, + new NextableInputStreamStep('^')); + + try { + if (!stream.next()) { + throw new IOException("Cannot find the first custom^ element"); + } + + String custom = IOUtils.readSmallStream(stream); + if (!"custom".equals(custom)) { + throw new IOException( + "Cannot find the first custom^ element, it is: " + + custom + "^"); + } + + if (!stream.next()) { + throw new IOException("Cannot find the second custom^" + + getType() + " element"); + } + + String type = IOUtils.readSmallStream(stream); + if (!getType().equals(type)) { + throw new IOException("Cannot find the second custom^" + + getType() + " element, it is: custom^" + type + "^"); + } + + if (!stream.nextAll()) { + throw new IOException("Cannot find the third custom^" + + getType() + "^value element"); + } + + // TODO: manage ENTER + return fromStream(stream); + } finally { + stream.close(false); + } } public static boolean isCustom(String encodedValue) {