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}