1 /* 2 * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 package build.tools.pandocfilter.json; 24 25 import java.util.*; 26 import java.util.stream.Stream; 27 28 public class JSONArray implements JSONValue, Iterable<JSONValue> { 29 private final List<JSONValue> values; 30 JSONArray()31 public JSONArray() { 32 this.values = new ArrayList<JSONValue>(); 33 } 34 JSONArray(JSONValue[] array)35 public JSONArray(JSONValue[] array) { 36 this.values = new ArrayList<JSONValue>(array.length); 37 for (var v : array) { 38 values.add(v); 39 } 40 } 41 append(JSONValue value)42 private void append(JSONValue value) { 43 if (value instanceof JSONArray) { 44 for (var v : value.asArray()) { 45 append(v); 46 } 47 } else { 48 this.values.add(value); 49 } 50 } 51 JSONArray(JSONValue value, JSONValue... values)52 public JSONArray(JSONValue value, JSONValue... values) { 53 this.values = new ArrayList<JSONValue>(values.length + 1); 54 append(value); 55 for (var v : values) { 56 append(v); 57 } 58 } 59 JSONArray(List<JSONValue> values)60 public JSONArray(List<JSONValue> values) { 61 this.values = new ArrayList<JSONValue>(values); 62 } 63 64 @Override isArray()65 public boolean isArray() { 66 return true; 67 } 68 69 @Override asArray()70 public JSONArray asArray() { 71 return this; 72 } 73 set(int i, boolean value)74 public JSONArray set(int i, boolean value) { 75 values.set(i, JSON.of(value)); 76 return this; 77 } 78 set(int i, int value)79 public JSONArray set(int i, int value) { 80 values.set(i, JSON.of(value)); 81 return this; 82 } 83 set(int i, long value)84 public JSONArray set(int i, long value) { 85 values.set(i, JSON.of(value)); 86 return this; 87 } 88 set(int i, String value)89 public JSONArray set(int i, String value) { 90 values.set(i, JSON.of(value)); 91 return this; 92 } 93 set(int i, double value)94 public JSONArray set(int i, double value) { 95 values.set(i, JSON.of(value)); 96 return this; 97 } 98 set(int i, JSONValue value)99 public JSONArray set(int i, JSONValue value) { 100 values.set(i, value); 101 return this; 102 } 103 setNull(int i)104 public JSONArray setNull(int i) { 105 values.set(i, JSON.of()); 106 return this; 107 } 108 add(boolean value)109 public JSONArray add(boolean value) { 110 values.add(JSON.of(value)); 111 return this; 112 } 113 add(int value)114 public JSONArray add(int value) { 115 values.add(JSON.of(value)); 116 return this; 117 } 118 add(long value)119 public JSONArray add(long value) { 120 values.add(JSON.of(value)); 121 return this; 122 } 123 add(String value)124 public JSONArray add(String value) { 125 values.add(JSON.of(value)); 126 return this; 127 } 128 add(double value)129 public JSONArray add(double value) { 130 values.add(JSON.of(value)); 131 return this; 132 } 133 add(JSONValue value)134 public JSONArray add(JSONValue value) { 135 values.add(value); 136 return this; 137 } 138 addNull()139 public JSONArray addNull() { 140 values.add(JSON.of()); 141 return this; 142 } 143 get(int i)144 public JSONValue get(int i) { 145 return values.get(i); 146 } 147 size()148 public int size() { 149 return values.size(); 150 } 151 152 @Override toString()153 public String toString() { 154 var builder = new StringBuilder(); 155 156 builder.append("["); 157 for (var i = 0; i < size(); i++) { 158 builder.append(get(i).toString()); 159 if (i != (size() - 1)) { 160 builder.append(","); 161 } 162 } 163 builder.append("]"); 164 return builder.toString(); 165 } 166 167 @Override stream()168 public Stream<JSONValue> stream() { 169 return values.stream(); 170 } 171 172 @Override iterator()173 public Iterator<JSONValue> iterator() { 174 return values.iterator(); 175 } 176 } 177