git://git.nikiroo.be
/
nikiroo-utils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into streamify
[nikiroo-utils.git]
/
src
/
be
/
nikiroo
/
utils
/
serial
/
Importer.java
diff --git
a/src/be/nikiroo/utils/serial/Importer.java
b/src/be/nikiroo/utils/serial/Importer.java
index 7a45ddfa0d51b54c43ce597d9fb8085c27bfb73b..810d694db5a316a4aca1290b5b31650312005f0d 100644
(file)
--- a/
src/be/nikiroo/utils/serial/Importer.java
+++ b/
src/be/nikiroo/utils/serial/Importer.java
@@
-7,9
+7,9
@@
import java.util.HashMap;
import java.util.Map;
import be.nikiroo.utils.IOUtils;
import java.util.Map;
import be.nikiroo.utils.IOUtils;
-import be.nikiroo.utils.NextableInputStream;
-import be.nikiroo.utils.NextableInputStreamStep;
import be.nikiroo.utils.StringUtils;
import be.nikiroo.utils.StringUtils;
+import be.nikiroo.utils.streams.NextableInputStream;
+import be.nikiroo.utils.streams.NextableInputStreamStep;
/**
* A simple class that can accept the output of {@link Exporter} to recreate
/**
* A simple class that can accept the output of {@link Exporter} to recreate
@@
-46,7
+46,7
@@
public class Importer {
* content, or a number of lines of it (any given line <b>MUST</b> be
* complete though) and accumulate it with the already present data.
*
* content, or a number of lines of it (any given line <b>MUST</b> be
* complete though) and accumulate it with the already present data.
*
- * @param
data
+ * @param
in
* the data to parse
*
* @return itself so it can be chained
* the data to parse
*
* @return itself so it can be chained
@@
-75,15
+75,23
@@
public class Importer {
if (in == null) {
throw new NullPointerException("InputStream is null");
}
if (in == null) {
throw new NullPointerException("InputStream is null");
}
- if (stream.eof()) {
- throw new NullPointerException("InputStream is empty");
- }
+ boolean first = true;
while (stream.next()) {
while (stream.next()) {
+ if (stream.eof()) {
+ if (first) {
+ throw new NullPointerException(
+ "InputStream empty, normal termination");
+ }
+ return this;
+ }
+ first = false;
+
boolean zip = stream.startsWiths("ZIP:");
boolean b64 = stream.startsWiths("B64:");
if (zip || b64) {
boolean zip = stream.startsWiths("ZIP:");
boolean b64 = stream.startsWiths("B64:");
if (zip || b64) {
+ stream.skip("XXX:".length());
InputStream decoded = StringUtils.unbase64(stream.open(),
zip);
try {
InputStream decoded = StringUtils.unbase64(stream.open(),
zip);
try {
@@
-106,7
+114,7
@@
public class Importer {
* Read a single (whole) line of serialised data into this {@link Importer}
* and accumulate it with the already present data.
*
* Read a single (whole) line of serialised data into this {@link Importer}
* and accumulate it with the already present data.
*
- * @param
line
+ * @param
in
* the line to parse
*
* @return TRUE if we are just done with one object or sub-object
* the line to parse
*
* @return TRUE if we are just done with one object or sub-object
@@
-141,6
+149,10
@@
public class Importer {
// TODO use the stream, Luke
String line = IOUtils.readSmallStream(in);
// TODO use the stream, Luke
String line = IOUtils.readSmallStream(in);
+ if (line.isEmpty()) {
+ return false;
+ }
+
if (line.equals("{")) { // START: new child if needed
if (link != null) {
child = new Importer(map);
if (line.equals("{")) { // START: new child if needed
if (link != null) {
child = new Importer(map);
@@
-159,7
+171,12
@@
public class Importer {
} else {
if (line.endsWith(":")) {
// construct
} else {
if (line.endsWith(":")) {
// construct
- me = SerialUtils.createObject(type);
+ try {
+ me = SerialUtils.createObject(type);
+ } catch (NoSuchMethodException e) {
+ System.out.println("LINE: <" + line + ">");
+ throw e;
+ }
} else {
// direct value
int pos = line.indexOf(":");
} else {
// direct value
int pos = line.indexOf(":");