/* Jackson JSON-processor. * * Copyright (c) 2007- Tatu Saloranta, tatu.saloranta@iki.fi * * Licensed under the License specified in file LICENSE, included with * the source code and binary code bundles. * You may not use this file except in compliance with the License. * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.fasterxml.jackson.core; /** * Shared base class for streaming processing contexts used during * reading and writing of Json content using Streaming API. * This context is also exposed to applications: * context object can be used by applications to get an idea of * relative position of the parser/generator within json content * being processed. This allows for some contextual processing: for * example, output within Array context can differ from that of * Object context. */ public abstract class JsonStreamContext { // // // Type constants used internally protected final static int TYPE_ROOT = 0; protected final static int TYPE_ARRAY = 1; protected final static int TYPE_OBJECT = 2; protected int _type; /** * Index of the currently processed entry. Starts with -1 to signal * that no entries have been started, and gets advanced each * time a new entry is started, either by encountering an expected * separator, or with new values if no separators are expected * (the case for root context). */ protected int _index; /* /********************************************************** /* Life-cycle /********************************************************** */ protected JsonStreamContext() { } /* /********************************************************** /* Public API, accessors /********************************************************** */ /** * Accessor for finding parent context of this context; will * return null for root context. */ public abstract JsonStreamContext getParent(); /** * Method that returns true if this context is an Array context; * that is, content is being read from or written to a Json Array. */ public final boolean inArray() { return _type == TYPE_ARRAY; } /** * Method that returns true if this context is a Root context; * that is, content is being read from or written to without * enclosing array or object structure. */ public final boolean inRoot() { return _type == TYPE_ROOT; } /** * Method that returns true if this context is an Object context; * that is, content is being read from or written to a Json Object. */ public final boolean inObject() { return _type == TYPE_OBJECT; } /** * Method for accessing simple type description of current context; * either ROOT (for root-level values), OBJECT (for field names and * values of JSON Objects) or ARRAY (for values of JSON Arrays) */ public final String getTypeDesc() { switch (_type) { case TYPE_ROOT: return "ROOT"; case TYPE_ARRAY: return "ARRAY"; case TYPE_OBJECT: return "OBJECT"; } return "?"; } /** * @return Number of entries that are complete and started. */ public final int getEntryCount() { return _index + 1; } /** * @return Index of the currently processed entry, if any */ public final int getCurrentIndex() { return (_index < 0) ? 0 : _index; } /** * Method for accessing name associated with the current location. * Non-null for <code>FIELD_NAME</code> and value events that directly * follow field names; null for root level and array values. */ public abstract String getCurrentName(); }