コード例 #1
0
        /*
        /**********************************************************
        /* Public API, traversal
        /**********************************************************
        */
        /// <exception cref="System.IO.IOException"/>
        public override com.fasterxml.jackson.core.JsonToken nextToken()
        {
            // Anything buffered?
            com.fasterxml.jackson.core.filter.TokenFilterContext ctxt = _exposedContext;
            if (ctxt != null)
            {
                while (true)
                {
                    com.fasterxml.jackson.core.JsonToken t = ctxt.nextTokenToRead();
                    if (t != null)
                    {
                        _currToken = t;
                        return t;
                    }
                    // all done with buffered stuff?
                    if (ctxt == _headContext)
                    {
                        _exposedContext = null;
                        if (ctxt.inArray())
                        {
                            t = delegate_.getCurrentToken();
                            // Is this guaranteed to work without further checks?
                            //                        if (t != JsonToken.START_ARRAY) {
                            _currToken = t;
                            return t;
                        }
                        // Almost! Most likely still have the current token;
                        // with the sole exception of
                        /*
                        t = delegate.getCurrentToken();
                        if (t != JsonToken.FIELD_NAME) {
                        _currToken = t;
                        return t;
                        }
                        */
                        break;
                    }
                    // If not, traverse down the context chain
                    ctxt = _headContext.findChildOf(ctxt);
                    _exposedContext = ctxt;
                    if (ctxt == null)
                    {
                        // should never occur
                        throw _constructError("Unexpected problem: chain of filtered context broken");
                    }
                }
            }
            // If not, need to read more. If we got any:
            com.fasterxml.jackson.core.JsonToken t_1 = delegate_.nextToken();
            if (t_1 == null)
            {
                // no strict need to close, since we have no state here
                return (_currToken = t_1);
            }
            // otherwise... to include or not?
            com.fasterxml.jackson.core.filter.TokenFilter f;
            switch (t_1.id())
            {
                case JsonTokenIdConstants.ID_START_ARRAY:
                {
                    f = _itemFilter;
                    if (f == com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL)
                    {
                        _headContext = _headContext.createChildArrayContext(f, true);
                        return (_currToken = t_1);
                    }
                    if (f == null)
                    {
                        // does this occur?
                        delegate_.skipChildren();
                        break;
                    }
                    // Otherwise still iffy, need to check
                    f = _headContext.checkValue(f);
                    if (f == null)
                    {
                        delegate_.skipChildren();
                        break;
                    }
                    if (f != com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL)
                    {
                        f = f.filterStartArray();
                    }
                    _itemFilter = f;
                    if (f == com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL)
                    {
                        _headContext = _headContext.createChildArrayContext(f, true);
                        return (_currToken = t_1);
                    }
                    _headContext = _headContext.createChildArrayContext(f, false);
                    // Also: only need buffering if parent path to be included
                    if (_includePath)
                    {
                        t_1 = _nextTokenWithBuffering(_headContext);
                        if (t_1 != null)
                        {
                            _currToken = t_1;
                            return t_1;
                        }
                    }
                    break;
                }

                case JsonTokenIdConstants.ID_START_OBJECT:
                {
                    f = _itemFilter;
                    if (f == com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL)
                    {
                        _headContext = _headContext.createChildObjectContext(f, true);
                        return (_currToken = t_1);
                    }
                    if (f == null)
                    {
                        // does this occur?
                        delegate_.skipChildren();
                        break;
                    }
                    // Otherwise still iffy, need to check
                    f = _headContext.checkValue(f);
                    if (f == null)
                    {
                        delegate_.skipChildren();
                        break;
                    }
                    if (f != com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL)
                    {
                        f = f.filterStartObject();
                    }
                    _itemFilter = f;
                    if (f == com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL)
                    {
                        _headContext = _headContext.createChildObjectContext(f, true);
                        return (_currToken = t_1);
                    }
                    _headContext = _headContext.createChildObjectContext(f, false);
                    // Also: only need buffering if parent path to be included
                    if (_includePath)
                    {
                        t_1 = _nextTokenWithBuffering(_headContext);
                        if (t_1 != null)
                        {
                            _currToken = t_1;
                            return t_1;
                        }
                    }
                    // note: inclusion of surrounding Object handled separately via
                    // FIELD_NAME
                    break;
                }

                case JsonTokenIdConstants.ID_END_ARRAY:
                case JsonTokenIdConstants.ID_END_OBJECT:
                {
                    bool returnEnd = _headContext.isStartHandled();
                    f = _headContext.getFilter();
                    if ((f != null) && (f != com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL
                        ))
                    {
                        f.filterFinishArray();
                    }
                    _headContext = ((com.fasterxml.jackson.core.filter.TokenFilterContext)_headContext
                        .getParent());
                    _itemFilter = _headContext.getFilter();
                    if (returnEnd)
                    {
                        return (_currToken = t_1);
                    }
                    break;
                }

                case JsonTokenIdConstants.ID_FIELD_NAME:
                {
                    string name = delegate_.getCurrentName();
                    // note: this will also set 'needToHandleName'
                    f = _headContext.setFieldName(name);
                    if (f == com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL)
                    {
                        _itemFilter = f;
                        if (!_includePath)
                        {
                            // Minor twist here: if parent NOT included, may need to induce output of
                            // surrounding START_OBJECT/END_OBJECT
                            if (_includeImmediateParent && !_headContext.isStartHandled())
                            {
                                t_1 = _headContext.nextTokenToRead();
                                // returns START_OBJECT but also marks it handled
                                _exposedContext = _headContext;
                            }
                        }
                        return (_currToken = t_1);
                    }
                    if (f == null)
                    {
                        delegate_.nextToken();
                        delegate_.skipChildren();
                        break;
                    }
                    f = f.includeProperty(name);
                    if (f == null)
                    {
                        delegate_.nextToken();
                        delegate_.skipChildren();
                        break;
                    }
                    _itemFilter = f;
                    if (f == com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL)
                    {
                        if (_includePath)
                        {
                            return (_currToken = t_1);
                        }
                    }
                    if (_includePath)
                    {
                        t_1 = _nextTokenWithBuffering(_headContext);
                        if (t_1 != null)
                        {
                            _currToken = t_1;
                            return t_1;
                        }
                    }
                    break;
                }

                default:
                {
                    // scalar value
                    f = _itemFilter;
                    if (f == com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL)
                    {
                        return (_currToken = t_1);
                    }
                    if (f != null)
                    {
                        f = _headContext.checkValue(f);
                        if ((f == com.fasterxml.jackson.core.filter.TokenFilter.INCLUDE_ALL) || ((f != null
                            ) && f.includeValue(delegate_)))
                        {
                            return (_currToken = t_1);
                        }
                    }
                    // Otherwise not included (leaves must be explicitly included)
                    break;
                }
            }
            // We get here if token was not yet found; offlined handling
            return _nextToken2();
        }
コード例 #2
0
 /// <exception cref="System.IO.IOException"/>
 private com.fasterxml.jackson.core.JsonToken _nextBuffered(com.fasterxml.jackson.core.filter.TokenFilterContext
     buffRoot)
 {
     _exposedContext = buffRoot;
     com.fasterxml.jackson.core.filter.TokenFilterContext ctxt = buffRoot;
     com.fasterxml.jackson.core.JsonToken t = ctxt.nextTokenToRead();
     if (t != null)
     {
         return t;
     }
     while (true)
     {
         // all done with buffered stuff?
         if (ctxt == _headContext)
         {
             throw _constructError("Internal error: failed to locate expected buffered tokens"
                 );
         }
         /*
         _exposedContext = null;
         break;
         */
         // If not, traverse down the context chain
         ctxt = _exposedContext.findChildOf(ctxt);
         _exposedContext = ctxt;
         if (ctxt == null)
         {
             // should never occur
             throw _constructError("Unexpected problem: chain of filtered context broken");
         }
         t = _exposedContext.nextTokenToRead();
         if (t != null)
         {
             return t;
         }
     }
 }