@SuppressFBWarnings("UP_UNUSED_PARAMETER") private void displayActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_displayActionPerformed try { String text = jTextPane1.getText().trim(); if (text.startsWith("[")) { Schema schema = Schema.createArray(StackSampleElement.getClassSchema()); DatumReader reader = new SpecificDatumReader(schema); List<StackSampleElement> samples; try { Decoder decoder = DecoderFactory.get().jsonDecoder(schema, text); samples = (List<StackSampleElement>) reader.read(null, decoder); } catch (IOException | RuntimeException ex) { throw new RuntimeException("Unable to read samples: " + text, ex); } nodeConsumer.accept(Converter.convert(samples.iterator())); } else { nodeConsumer.accept(SampleNode.parse(new StringReader(text)).getSecond()); } } catch (IOException | RuntimeException ex) { errorConsumer.accept(ex); } }//GEN-LAST:event_displayActionPerformed
public static Pair<Method, SampleNode> parse(@WillNotClose final Reader r) throws IOException { JsonParser jsonP = Lazy.JSON.createJsonParser(r); consume(jsonP, JsonToken.START_OBJECT); return parse(jsonP); }
private static Pair<Method, SampleNode> parse(final JsonParser jsonP) throws IOException { consume(jsonP, JsonToken.FIELD_NAME); String name = jsonP.getCurrentName(); consume(jsonP, JsonToken.VALUE_NUMBER_INT); int sc = jsonP.getIntValue(); JsonToken nextToken = jsonP.nextToken(); if (nextToken == JsonToken.END_OBJECT) { return Pair.of(Methods.from(name), new SampleNode(sc, null)); } else if (nextToken == JsonToken.FIELD_NAME) { consume(jsonP, JsonToken.START_ARRAY); TMap<Method, SampleNode> nodes = new MethodMap<>(); while (jsonP.nextToken() != JsonToken.END_ARRAY) { Pair<Method, SampleNode> parse = parse(jsonP); nodes.put(parse.getKey(), parse.getValue()); } consume(jsonP, JsonToken.END_OBJECT); return Pair.of(Methods.from(name), new SampleNode(sc, nodes)); } else { throw new IllegalArgumentException("Expected field name or end Object, not: " + nextToken); } }
node1.writeTo(sb); LOG.debug("Serialized String", sb); Pair<Method, SampleNode> parsed = SampleNode.parse(new StringReader(sb.toString())); Assert.assertEquals(node1, parsed.getSecond()); Assert.assertEquals(node1, Objects.clone(node1));