private static int embeddedEventToIon()

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;
    }