org.codehaus.jackson.util
Class JsonParserSequence

java.lang.Object
  extended by org.codehaus.jackson.JsonParser
      extended by org.codehaus.jackson.util.JsonParserDelegate
          extended by org.codehaus.jackson.util.JsonParserSequence
All Implemented Interfaces:
Closeable, Versioned

public class JsonParserSequence
extends JsonParserDelegate

Helper class that can be used to sequence multiple physical JsonParsers to create a single logical sequence of tokens, as a single JsonParser.

Fairly simple use of JsonParserDelegate: only need to override nextToken() to handle transition

Since:
1.5
Author:
tatu

Nested Class Summary
 
Nested classes/interfaces inherited from class org.codehaus.jackson.JsonParser
JsonParser.Feature, JsonParser.NumberType
 
Field Summary
protected  int _nextParser
          Index of the next parser in _parsers.
protected  JsonParser[] _parsers
          Parsers other than the first one (which is initially assigned as delegate)
 
Fields inherited from class org.codehaus.jackson.util.JsonParserDelegate
delegate
 
Fields inherited from class org.codehaus.jackson.JsonParser
_currToken, _features, _lastClearedToken
 
Constructor Summary
protected JsonParserSequence(JsonParser[] parsers)
           
 
Method Summary
protected  void addFlattenedActiveParsers(List<JsonParser> result)
           
 void close()
          Closes the parser so that no further iteration or data access can be made; will also close the underlying input source if parser either owns the input source, or feature JsonParser.Feature.AUTO_CLOSE_SOURCE is enabled.
 int containedParsersCount()
          Method that is most useful for debugging or testing; returns actual number of underlying parsers sequence was constructed with (nor just ones remaining active)
static JsonParserSequence createFlattened(JsonParser first, JsonParser second)
          Method that will construct a parser (possibly a sequence) that contains all given sub-parsers.
 JsonToken nextToken()
          Main iteration method, which will advance stream enough to determine type of the next token, if any.
protected  boolean switchToNext()
          Method that will switch active parser from the current one to next parser in sequence, if there is another parser left, making this the new delegate.
 
Methods inherited from class org.codehaus.jackson.util.JsonParserDelegate
clearCurrentToken, disable, enable, getBigIntegerValue, getBinaryValue, getByteValue, getCodec, getCurrentLocation, getCurrentName, getCurrentToken, getDecimalValue, getDoubleValue, getFloatValue, getIntValue, getLastClearedToken, getLongValue, getNumberType, getNumberValue, getParsingContext, getShortValue, getText, getTextCharacters, getTextLength, getTextOffset, getTokenLocation, hasCurrentToken, isClosed, isEnabled, setCodec, skipChildren
 
Methods inherited from class org.codehaus.jackson.JsonParser
_constructError, configure, disableFeature, enableFeature, getBinaryValue, getBooleanValue, getEmbeddedObject, getValueAsDouble, getValueAsDouble, getValueAsInt, getValueAsInt, getValueAsLong, getValueAsLong, hasTextCharacters, isFeatureEnabled, nextValue, readValueAs, readValueAs, readValueAsTree, releaseBuffered, releaseBuffered, setFeature, version
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_parsers

protected final JsonParser[] _parsers
Parsers other than the first one (which is initially assigned as delegate)


_nextParser

protected int _nextParser
Index of the next parser in _parsers.

Constructor Detail

JsonParserSequence

protected JsonParserSequence(JsonParser[] parsers)
Method Detail

createFlattened

public static JsonParserSequence createFlattened(JsonParser first,
                                                 JsonParser second)
Method that will construct a parser (possibly a sequence) that contains all given sub-parsers. All parsers given are checked to see if they are sequences: and if so, they will be "flattened", that is, contained parsers are directly added in a new sequence instead of adding sequences within sequences. This is done to minimize delegation depth, ideally only having just a single level of delegation.


addFlattenedActiveParsers

protected void addFlattenedActiveParsers(List<JsonParser> result)

close

public void close()
           throws IOException
Description copied from class: JsonParser
Closes the parser so that no further iteration or data access can be made; will also close the underlying input source if parser either owns the input source, or feature JsonParser.Feature.AUTO_CLOSE_SOURCE is enabled. Whether parser owns the input source depends on factory method that was used to construct instance (so check JsonFactory for details, but the general idea is that if caller passes in closable resource (such as InputStream or Reader) parser does NOT own the source; but if it passes a reference (such as File or URL and creates stream or reader it does own them.

Specified by:
close in interface Closeable
Overrides:
close in class JsonParserDelegate
Throws:
IOException

nextToken

public JsonToken nextToken()
                    throws IOException,
                           JsonParseException
Description copied from class: JsonParser
Main iteration method, which will advance stream enough to determine type of the next token, if any. If none remaining (stream has no content other than possible white space before ending), null will be returned.

Overrides:
nextToken in class JsonParserDelegate
Returns:
Next token from the stream, if any found, or null to indicate end-of-input
Throws:
IOException
JsonParseException

containedParsersCount

public int containedParsersCount()
Method that is most useful for debugging or testing; returns actual number of underlying parsers sequence was constructed with (nor just ones remaining active)


switchToNext

protected boolean switchToNext()
Method that will switch active parser from the current one to next parser in sequence, if there is another parser left, making this the new delegate. Old delegate is returned if switch succeeds.

Returns:
True if switch succeeded; false otherwise