Search in sources :

Example 11 with Event

use of com.amazon.tools.events.Event in project ion-java by amzn.

the class IonJavaCli method parseStruct.

private static IonStruct parseStruct(ContainerContext containerContext, CompareContext compareContext, int end, boolean isFirst) {
    Event initEvent = isFirst ? compareContext.getEventStreamFirst().get(containerContext.getIndex()) : compareContext.getEventStreamSecond().get(containerContext.getIndex());
    if (initEvent.getEventType() != EventType.CONTAINER_START || initEvent.getIonType() != IonType.STRUCT) {
        return null;
    }
    IonStruct ionStruct = ION_SYSTEM.newEmptyStruct();
    while (containerContext.increaseIndex() < end) {
        Event event = isFirst ? compareContext.getEventStreamFirst().get(containerContext.getIndex()) : compareContext.getEventStreamSecond().get(containerContext.getIndex());
        EventType eventType = event.getEventType();
        if (eventType == EventType.CONTAINER_START) {
            switch(event.getIonType()) {
                case LIST:
                    ionStruct.add(event.getFieldName(), parseSequence(containerContext, compareContext, end, isFirst, ION_SYSTEM.newEmptyList()));
                    break;
                case STRUCT:
                    ionStruct.add(event.getFieldName(), parseStruct(containerContext, compareContext, end, isFirst));
                    break;
                case SEXP:
                    ionStruct.add(event.getFieldName(), parseSequence(containerContext, compareContext, end, isFirst, ION_SYSTEM.newEmptySexp()));
                    break;
            }
        } else if (eventType == EventType.CONTAINER_END) {
            break;
        } else if (eventType == EventType.STREAM_END) {
            throw new IonException("Invalid struct: eventStream ends without CONTAINER_END");
        } else {
            IonValue cloneValue = event.getValue().clone();
            cloneValue.setTypeAnnotationSymbols(event.getAnnotations());
            ionStruct.add(event.getFieldName(), cloneValue);
        }
    }
    return ionStruct;
}
Also used : IonValue(com.amazon.ion.IonValue) IonStruct(com.amazon.ion.IonStruct) EventType(com.amazon.tools.events.EventType) IonException(com.amazon.ion.IonException) Event(com.amazon.tools.events.Event)

Aggregations

Event (com.amazon.tools.events.Event)11 IonException (com.amazon.ion.IonException)7 EventType (com.amazon.tools.events.EventType)6 IonValue (com.amazon.ion.IonValue)5 IonType (com.amazon.ion.IonType)4 SymbolToken (com.amazon.ion.SymbolToken)3 ImportDescriptor (com.amazon.tools.events.ImportDescriptor)3 IonStruct (com.amazon.ion.IonStruct)2 SymbolTable (com.amazon.ion.SymbolTable)2 IonReader (com.amazon.ion.IonReader)1 IonTimestamp (com.amazon.ion.IonTimestamp)1 IonWriter (com.amazon.ion.IonWriter)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1