src/jdk.jfr/share/classes/jdk/jfr/internal/cmd/JSONWriter.java
branchJDK-8200758-branch
changeset 57061 ac44f38300b2
parent 57060 5103d6d2e796
parent 52859 413c28945e0f
child 57062 044e7a644ee3
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/cmd/JSONWriter.java	Wed Dec 05 17:03:58 2018 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.jfr.internal.cmd;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.nio.file.Path;
-
-import jdk.jfr.EventType;
-import jdk.jfr.ValueDescriptor;
-import jdk.jfr.consumer.RecordedEvent;
-import jdk.jfr.consumer.RecordedObject;
-import jdk.jfr.consumer.RecordingFile;
-
-final class JSONWriter extends StructuredWriter {
-
-    public JSONWriter(PrintWriter writer) {
-        super(writer);
-    }
-
-    public void print(Path source) throws IOException {
-        try (RecordingFile es = new RecordingFile(source)) {
-            printObjectBegin();
-            printRecording(es);
-            printObjectEnd();
-            flush();
-        }
-    }
-
-    private void printRecording(RecordingFile es) throws IOException {
-        printDataStructureName("recording");
-        printObjectBegin();
-        printEvents(es);
-        printObjectEnd();
-    }
-
-    private void printEvents(RecordingFile es) throws IOException {
-        printDataStructureName("events");
-        printArrayBegin();
-        boolean first = true;
-        while (es.hasMoreEvents()) {
-            RecordedEvent e = es.readEvent();
-            printNewDataStructure(first, true, null);
-            printEvent(e);
-            flush();
-            first = false;
-        }
-        printArrayEnd();
-    }
-
-    private void printEvent(RecordedEvent e) {
-        printObjectBegin();
-        EventType type = e.getEventType();
-        printValue(true, false, "name", type.getName());
-        printValue(false, false, "typeId", type.getId());
-        printValue(false, false, "startTime", e.getStartTime());
-        printValue(false, false, "duration", e.getDuration());
-        printNewDataStructure(false, false, "values");
-        printObject(e);
-        printObjectEnd();
-    }
-
-    void printValue(boolean first, boolean arrayElement, String name, Object value) {
-        printNewDataStructure(first, arrayElement, name);
-        if (!printIfNull(value)) {
-            if (value instanceof Boolean) {
-                printAsString(value);
-                return;
-            }
-            if (value instanceof Double) {
-                Double dValue = (Double) value;
-                if (Double.isNaN(dValue) || Double.isInfinite(dValue)) {
-                    printNull();
-                    return;
-                }
-                printAsString(value);
-                return;
-            }
-            if (value instanceof Float) {
-                Float fValue = (Float) value;
-                if (Float.isNaN(fValue) || Float.isInfinite(fValue)) {
-                    printNull();
-                    return;
-                }
-                printAsString(value);
-                return;
-            }
-            if (value instanceof Number) {
-                printAsString(value);
-                return;
-            }
-            print("\"");
-            printEscaped(String.valueOf(value));
-            print("\"");
-        }
-    }
-
-    public void printObject(RecordedObject object) {
-        printObjectBegin();
-        boolean first = true;
-        for (ValueDescriptor v : object.getFields()) {
-            printValueDescriptor(first, false, v, object.getValue(v.getName()));
-            first = false;
-        }
-        printObjectEnd();
-    }
-
-    private void printArray(ValueDescriptor v, Object[] array) {
-        printArrayBegin();
-        boolean first = true;
-        for (Object arrayElement : array) {
-            printValueDescriptor(first, true, v, arrayElement);
-            first = false;
-        }
-        printArrayEnd();
-    }
-
-    private void printValueDescriptor(boolean first, boolean arrayElement, ValueDescriptor vd, Object value) {
-        if (vd.isArray() && !arrayElement) {
-            printNewDataStructure(first, arrayElement, vd.getName());
-            if (!printIfNull(value)) {
-                printArray(vd, (Object[]) value);
-            }
-            return;
-        }
-        if (!vd.getFields().isEmpty()) {
-            printNewDataStructure(first, arrayElement, vd.getName());
-            if (!printIfNull(value)) {
-                printObject((RecordedObject) value);
-            }
-            return;
-        }
-        printValue(first, arrayElement, vd.getName(), value);
-    }
-
-    private void printNewDataStructure(boolean first, boolean arrayElement, String name) {
-        if (!first) {
-            print(", ");
-            if (!arrayElement) {
-                println();
-            }
-        }
-        if (!arrayElement) {
-            printDataStructureName(name);
-        }
-    }
-
-    private boolean printIfNull(Object value) {
-        if (value == null) {
-            printNull();
-            return true;
-        }
-        return false;
-    }
-
-    private void printNull() {
-        print("null");
-    }
-
-    private void printDataStructureName(String text) {
-        printIndent();
-        print("\"");
-        print(text);
-        print("\": ");
-    }
-
-    private void printObjectEnd() {
-        retract();
-        println();
-        printIndent();
-        print("}");
-    }
-
-    private void printObjectBegin() {
-        println("{");
-        indent();
-    }
-
-    private void printArrayEnd() {
-        print("]");
-    }
-
-    private void printArrayBegin() {
-        print("[");
-    }
-
-    private void printEscaped(String text) {
-        for (int i = 0; i < text.length(); i++) {
-            printEscaped(text.charAt(i));
-        }
-    }
-
-    private void printEscaped(char c) {
-        if (c == '\b') {
-            print("\\b");
-            return;
-        }
-        if (c == '\n') {
-            print("\\n");
-            return;
-        }
-        if (c == '\t') {
-            print("\\t");
-            return;
-        }
-        if (c == '\f') {
-            print("\\f");
-            return;
-        }
-        if (c == '\r') {
-            print("\\r");
-            return;
-        }
-        if (c == '\"') {
-            print("\\\"");
-            return;
-        }
-        if (c == '\\') {
-            print("\\\\");
-            return;
-        }
-        if (c == '/') {
-            print("\\/");
-            return;
-        }
-        if (c > 0x7F || c < 32) {
-            print("\\u");
-            // 0x10000 will pad with zeros.
-            print(Integer.toHexString(0x10000 + (int) c).substring(1));
-            return;
-        }
-        print(c);
-    }
-
-}