in ion-java-cli/src/com/amazon/tools/cli/IonJavaCli.java [255:318]
private static int embeddedEventToIon(ProcessContext processContext,
CommandArgs args,
int count,
IonType ionType) throws IOException {
processContext.getIonWriter().addTypeAnnotation(EMBEDDED_STREAM_ANNOTATION);
processContext.getIonWriter().stepIn(ionType);
List<Event> events = processContext.getEventStream();
int depth = 1;
boolean finish = false;
while (++count < events.size()) {
StringBuilder out = new StringBuilder();
ProcessContext embeddedContext = new ProcessContext(null,0,null, null,
ION_TEXT_WRITER_BUILDER.withImports(_Private_Utils.systemSymtab(1)).build(out));
embeddedContext.setEmbeddedOut(out);
try {
do {
Event event = events.get(count);
processContext.setEventIndex(processContext.getEventIndex() + 1);
processContext.setLastEventType(event.getEventType());
if (event.getEventType() == EventType.STREAM_END) {
break;
} else if (event.getEventType() == EventType.SCALAR) {
writeIonByType(event, embeddedContext.getIonWriter());
} else if (event.getEventType() == EventType.CONTAINER_START) {
depth++;
setFieldName(event, embeddedContext.getIonWriter());
setAnnotations(event, embeddedContext.getIonWriter());
embeddedContext.getIonWriter().stepIn(event.getIonType());
} else if (event.getEventType() == EventType.CONTAINER_END) {
depth--;
if (depth == 0) {
if (event.getIonType() == IonType.SEXP || event.getIonType() == IonType.LIST) {
finish = true;
break;
} else {
throw new IonException("invalid CONTAINER_END");
}
}
embeddedContext.getIonWriter().stepOut();
} else if (event.getEventType() == EventType.SYMBOL_TABLE) {
handleSymbolTableEvent(embeddedContext, event, args, true);
}
} while (++count < events.size());
if (!finish) {
embeddedContext.getIonWriter().finish();
processContext.getIonWriter().writeString(out.toString());
}
} finally {
IonWriter ionWriter = embeddedContext.getIonWriter();
if (ionWriter != null) {
try {
ionWriter.close();
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(IO_ERROR_EXIT_CODE);
}
}
}
if (finish) { break; }
}
processContext.getIonWriter().stepOut();
return count;
}