001/*
002 * (C) Copyright 2012-2013 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 */
017package org.nuxeo.connect.tools.report.client;
018
019import javax.json.stream.JsonGenerator;
020import javax.json.stream.JsonParser;
021
022/**
023 *
024 *
025 */
026public class StreamFeeder {
027
028
029    public void feed(JsonGenerator generator, JsonParser parser) {
030        parser.next(); // skip container start
031        while (parser.hasNext()) {
032            switch (parser.next()) {
033            case START_ARRAY:
034                generator.writeStartArray();
035                break;
036            case END_ARRAY:
037                generator.writeEnd();
038                break;
039            case START_OBJECT:
040                generator.writeStartObject();
041                break;
042            case END_OBJECT:
043                if (parser.hasNext()) { // skip container end
044                    generator.writeEnd();
045                }
046                break;
047            case KEY_NAME:
048                String name = parser.getString();
049                switch (parser.next()) {
050                case START_ARRAY:
051                    generator.writeStartArray(name);
052                    break;
053                case START_OBJECT:
054                    generator.writeStartObject(name);
055                    break;
056                case VALUE_FALSE:
057                    generator.write(name, false);
058                    break;
059                case VALUE_TRUE:
060                    generator.write(name, true);
061                    break;
062                case VALUE_NULL:
063                    generator.writeNull(name);
064                    break;
065                case VALUE_STRING:
066                    generator.write(name, parser.getString());
067                    break;
068                case VALUE_NUMBER:
069                    if (parser.isIntegralNumber()) {
070                        generator.write(name, parser.getLong());
071                    } else {
072                        generator.write(name, parser.getBigDecimal());
073                    }
074                    break;
075                default:
076                    throw new UnsupportedOperationException();
077                }
078                break;
079            case VALUE_TRUE:
080                generator.write(true);
081                break;
082            case VALUE_FALSE:
083                generator.write(false);
084                break;
085            case VALUE_NULL:
086                generator.writeNull();
087                break;
088            case VALUE_STRING:
089                generator.write(parser.getString());
090                break;
091            case VALUE_NUMBER:
092                if (parser.isIntegralNumber()) {
093                    generator.write(parser.getLong());
094                } else {
095                    generator.write(parser.getBigDecimal());
096                }
097                break;
098            default:
099                throw new UnsupportedOperationException();
100            }
101        }
102    }
103
104}