/* * Copyright (C) 2015 The Android Open Source Project * * Licensed 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 com.android.statementservice.retriever; import android.util.JsonWriter; import java.io.IOException; import java.io.StringWriter; import java.util.List; import java.util.Locale; /** * Creates a Json string where the order of the fields can be specified. */ /* package private */ final class AssetJsonWriter { private StringWriter mStringWriter = new StringWriter(); private JsonWriter mWriter; private boolean mClosed = false; public AssetJsonWriter() { mWriter = new JsonWriter(mStringWriter); try { mWriter.beginObject(); } catch (IOException e) { throw new AssertionError("Unreachable exception."); } } /** * Appends a field to the output, putting both the key and value in lowercase. Null values are * not written. */ public void writeFieldLower(String key, String value) { if (mClosed) { throw new IllegalArgumentException( "Cannot write to an object that has already been closed."); } if (value != null) { try { mWriter.name(key.toLowerCase(Locale.US)); mWriter.value(value.toLowerCase(Locale.US)); } catch (IOException e) { throw new AssertionError("Unreachable exception."); } } } /** * Appends an array to the output, putting both the key and values in lowercase. If {@code * values} is null, this field will not be written. Individual values in the list must not be * null. */ public void writeArrayUpper(String key, List values) { if (mClosed) { throw new IllegalArgumentException( "Cannot write to an object that has already been closed."); } if (values != null) { try { mWriter.name(key.toLowerCase(Locale.US)); mWriter.beginArray(); for (String value : values) { mWriter.value(value.toUpperCase(Locale.US)); } mWriter.endArray(); } catch (IOException e) { throw new AssertionError("Unreachable exception."); } } } /** * Returns the string representation of the constructed json. After calling this method, {@link * #writeFieldLower} can no longer be called. */ public String closeAndGetString() { if (!mClosed) { try { mWriter.endObject(); } catch (IOException e) { throw new AssertionError("Unreachable exception."); } mClosed = true; } return mStringWriter.toString(); } }