/* * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except * in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * 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 org.wso2.carbon.mediator.datamapper.engine.input.builders; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import java.io.IOException; import java.io.StringWriter; import static org.wso2.carbon.mediator.datamapper.engine.utils.DataMapperEngineConstants.BOOLEAN_ELEMENT_TYPE; import static org.wso2.carbon.mediator.datamapper.engine.utils.DataMapperEngineConstants.INTEGER_ELEMENT_TYPE; import static org.wso2.carbon.mediator.datamapper.engine.utils.DataMapperEngineConstants.NUMBER_ELEMENT_TYPE; import static org.wso2.carbon.mediator.datamapper.engine.utils.DataMapperEngineConstants.STRING_ELEMENT_TYPE; /** * This class implements {@link Builder} interface and JSON builder for data mapper engine using * jackson */ public class JSONBuilder implements Builder { private JsonGenerator jsonGenerator; private StringWriter writer; public JSONBuilder() throws IOException { JsonFactory jsonFactory = new JsonFactory(); writer = new StringWriter(); jsonGenerator = jsonFactory.createGenerator(writer); } @Override public void writeStartArray() throws IOException { jsonGenerator.writeStartArray(); } @Override public void writeEndArray() throws IOException { jsonGenerator.writeEndArray(); } @Override public void writeStartObject() throws IOException { jsonGenerator.writeStartObject(); } @Override public void writeEndObject() throws IOException { jsonGenerator.writeEndObject(); } @Override public void writeFieldName(String name) throws IOException { jsonGenerator.writeFieldName(name); } @Override public void writeString(String text) throws IOException { jsonGenerator.writeString(text); } @Override public void writeBinary(byte[] data, int offset, int len) throws IOException { jsonGenerator.writeBinary(data, offset, len); } @Override public void writeNumber(int number) throws IOException { jsonGenerator.writeNumber(number); } @Override public void writeNumber(double number) throws IOException { jsonGenerator.writeNumber(number); } @Override public void writeBoolean(boolean state) throws IOException { jsonGenerator.writeBoolean(state); } @Override public void writeStringField(String fieldName, String value) throws IOException { writeFieldName(fieldName); writeString(value); } @Override public void writeField(String fieldName, Object value, String fieldType) throws IOException { switch (fieldType) { case STRING_ELEMENT_TYPE: writeStringField(fieldName, (String) value); break; case BOOLEAN_ELEMENT_TYPE: writeBooleanField(fieldName, (Boolean) value); break; case NUMBER_ELEMENT_TYPE: writeNumberField(fieldName, (Double) value); break; case INTEGER_ELEMENT_TYPE: writeNumberField(fieldName, (Long) value); break; default: writeStringField(fieldName, (String) value); } } @Override public void writeBooleanField(String fieldName, boolean value) throws IOException { writeFieldName(fieldName); writeBoolean(value); } @Override public void writeNumberField(String fieldName, int value) throws IOException { writeFieldName(fieldName); writeNumber(value); } @Override public void writeNumberField(String fieldName, double value) throws IOException { writeFieldName(fieldName); writeNumber(value); } @Override public void writeBinaryField(String fieldName, byte[] data) throws IOException { writeFieldName(fieldName); writeBinary(data, 0, 0); } @Override public void writeArrayFieldStart(String fieldName) throws IOException { writeFieldName(fieldName); writeStartArray(); } @Override public void writeObjectFieldStart(String fieldName) throws IOException { writeFieldName(fieldName); writeStartObject(); } @Override public void close() throws IOException { jsonGenerator.close(); } @Override public void writePrimitive(Object value, String fieldType) throws IOException { switch (fieldType) { case STRING_ELEMENT_TYPE: writeString((String) value); break; case BOOLEAN_ELEMENT_TYPE: writeBoolean((Boolean) value); break; case NUMBER_ELEMENT_TYPE: writeNumber((Double) value); break; case INTEGER_ELEMENT_TYPE: writeNumber((Long) value); break; default: writeString((String) value); } } public String getContent() throws IOException { String inputJSVariable = writer.toString(); writer.close(); return inputJSVariable; } }