String filestr = file.getPath();
try {
InputStream inputStream = new FileInputStream(file);
inputStream = FileUtil.tryGzipInput(inputStream);
final BundleStreamSource source;
if(parser instanceof StreamingParser) {
final StreamingParser streamParser = (StreamingParser) parser;
streamParser.initStream(inputStream);
source = streamParser;
}
else {
MultipleObjectsBundle parsingResult = parser.parse(inputStream);
// normalize objects and transform labels
source = new StreamFromBundle(parsingResult);
}
BundleMeta meta = null; // NullPointerException on invalid streams
loop: for(Event e = source.nextEvent();; e = source.nextEvent()) {
switch(e){
case END_OF_STREAM:
break loop;
case META_CHANGED:
meta = source.getMeta();
for(int i = 0; i < meta.size(); i++) {
if(i + 1 >= objects.metaLength()) {
objects.appendColumn(meta.get(i), new ArrayList<Object>());
}
else {
// Ensure compatibility:
if(!objects.meta(i + 1).isAssignableFromType(meta.get(i))) {
throw new AbortException("Incompatible files loaded. Cannot concatenate with unaligned columns, please preprocess manually.");
}
}
}
break;
case NEXT_OBJECT:
Object[] o = new Object[objects.metaLength()];
o[0] = filestr;
for(int i = 0; i < meta.size(); i++) {
o[i + 1] = source.data(i);
}
objects.appendSimple(o);
}
}
}