test/jdk/jdk/jfr/event/metadata/TestDefaultConfigurations.java
author goetz
Fri, 20 Jul 2018 09:46:57 +0200
changeset 51214 67736b4846a0
parent 50113 caf115bb98ad
child 52621 f7309a1491d9
permissions -rw-r--r--
8207830: [aix] disable jfr in build and tests Reviewed-by: kvn, erikj
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     1
/*
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     4
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    10
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    15
 * accompanied this code).
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    16
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    20
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    23
 * questions.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    24
 */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    25
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    26
package jdk.jfr.event.metadata;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    27
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    28
import java.io.IOException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    29
import java.io.StringReader;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    30
import java.util.ArrayList;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    31
import java.util.Collection;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    32
import java.util.HashMap;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    33
import java.util.HashSet;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    34
import java.util.List;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    35
import java.util.Map;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    36
import java.util.Set;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    37
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    38
import javax.xml.parsers.DocumentBuilder;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    39
import javax.xml.parsers.DocumentBuilderFactory;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    40
import javax.xml.parsers.ParserConfigurationException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    41
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    42
import jdk.jfr.Configuration;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    43
import jdk.jfr.EventType;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    44
import jdk.jfr.FlightRecorder;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    45
import jdk.jfr.SettingDescriptor;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    46
import jdk.test.lib.jfr.EventNames;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    47
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    48
import org.w3c.dom.Attr;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    49
import org.w3c.dom.Document;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    50
import org.w3c.dom.Element;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    51
import org.w3c.dom.Node;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    52
import org.w3c.dom.NodeList;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    53
import org.xml.sax.InputSource;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    54
import org.xml.sax.SAXException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    55
51214
67736b4846a0 8207830: [aix] disable jfr in build and tests
goetz
parents: 50113
diff changeset
    56
/**
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    57
 * @test
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    58
 * @key jfr
51214
67736b4846a0 8207830: [aix] disable jfr in build and tests
goetz
parents: 50113
diff changeset
    59
 * @requires vm.hasJFR
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    60
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    61
 * @library /test/lib
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    62
 * @modules java.xml
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    63
 *          jdk.jfr
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    64
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    65
 * @run main/othervm jdk.jfr.event.metadata.TestDefaultConfigurations
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    66
 */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    67
public class TestDefaultConfigurations {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    68
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    69
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    70
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    71
    public static void main(String[] args) throws Exception {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    72
        List<String> errors = new ArrayList<>();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    73
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    74
        errors.addAll(testConfiguration(Configuration.getConfiguration("default")));
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    75
        errors.addAll(testConfiguration(Configuration.getConfiguration("profile")));
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    76
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    77
        if (!errors.isEmpty()) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    78
            throwExceptionWithErrors(errors);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    79
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    80
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    81
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    82
    private static List<String> testConfiguration(Configuration config) throws ParserConfigurationException, SAXException, IOException {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    83
        List<String> errors = new ArrayList<>();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    84
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    85
        Map<String, EventType> eventTypeLookup = new HashMap<>();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    86
        for (EventType t : FlightRecorder.getFlightRecorder().getEventTypes()) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    87
            eventTypeLookup.put(t.getName(), t);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    88
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    89
        String content = config.getContents();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    90
        Document doc = createDocument(content);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    91
        Element configuration = doc.getDocumentElement();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    92
        errors.addAll(checkConfiguration(configuration));
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    93
        for (Element event : getChildElements(configuration, "event")) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    94
            String name = event.getAttribute("name");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    95
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    96
            EventType cd = eventTypeLookup.get(name);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    97
            if (cd != null) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    98
                errors.addAll(checkSettings(config, cd, event));
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    99
            } else {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   100
                errors.add("Preset '" + config.getName() + "' reference unknown event '" + name + "'");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   101
            }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   102
            eventTypeLookup.remove(name);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   103
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   104
        for (String name : eventTypeLookup.keySet()) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   105
            errors.add("Preset '" + config.getName() + "' doesn't configure event '" + name + "'");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   106
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   107
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   108
        return errors;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   109
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   110
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   111
    private static void throwExceptionWithErrors(List<String> errors) throws Exception {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   112
        StringBuilder sb = new StringBuilder();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   113
        for (String error : errors) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   114
            sb.append(error);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   115
            sb.append(LINE_SEPARATOR);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   116
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   117
        throw new Exception(sb.toString());
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   118
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   119
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   120
    private static List<String> checkConfiguration(Element configuration) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   121
        List<String> errors = new ArrayList<>();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   122
        if (configuration.getAttribute("description").length() < 2) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   123
            errors.add("Configuration should have a valid description!");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   124
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   125
        if (configuration.getAttribute("label").length() < 2) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   126
            errors.add("Configuration should have a label!");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   127
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   128
        if (!configuration.getAttribute("provider").equals("Oracle")) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   129
            errors.add("Configuration should set provider to 'Oracle'!");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   130
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   131
        return errors;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   132
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   133
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   134
    private static List<String> checkSettings(Configuration config, EventType eventType, Element event) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   135
        List<String> errors = new ArrayList<>();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   136
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   137
        Set<String> requiredSettings = createRequiredSettingNameSet(eventType);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   138
        for (Element setting : getChildElements(event, "setting")) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   139
            String settingName = setting.getAttribute("name");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   140
            if (requiredSettings.contains(settingName)) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   141
                requiredSettings.remove(settingName);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   142
            } else {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   143
                errors.add("Setting '" + settingName + "' for event '" + eventType.getName() + "' should not be part of confirguaration '" + config.getName()
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   144
                        + "' since it won't have an impact on the event.");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   145
            }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   146
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   147
        for (String required : requiredSettings) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   148
            errors.add("Setting '" + required + "' in event '" + eventType.getName() + "' was not configured in the configuration '" + config.getName() + "'");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   149
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   150
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   151
        return errors;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   152
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   153
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   154
    private static Set<String> createRequiredSettingNameSet(EventType cd) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   155
        Set<String> requiredSettings = new HashSet<>();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   156
        for (SettingDescriptor s : cd.getSettingDescriptors()) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   157
            requiredSettings.add(s.getName());
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   158
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   159
        return requiredSettings;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   160
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   161
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   162
    private static Document createDocument(String content) throws ParserConfigurationException, SAXException, IOException {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   163
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   164
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   165
        Document doc = dBuilder.parse(new InputSource(new StringReader(content)));
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   166
        doc.getDocumentElement().normalize();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   167
        // Don't want to add these settings to the jfc-files we ship since they
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   168
        // are not useful to configure. They are however needed to make the test
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   169
        // pass.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   170
        insertSetting(doc, EventNames.ActiveSetting, "stackTrace", "false");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   171
        insertSetting(doc, EventNames.ActiveSetting, "threshold", "0 ns");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   172
        insertSetting(doc, EventNames.ActiveRecording, "stackTrace", "false");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   173
        insertSetting(doc, EventNames.ActiveRecording, "threshold", "0 ns");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   174
        insertSetting(doc, EventNames.JavaExceptionThrow, "threshold", "0 ns");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   175
        insertSetting(doc, EventNames.JavaErrorThrow, "threshold", "0 ns");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   176
        return doc;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   177
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   178
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   179
    private static void insertSetting(Document doc, String eventName, String settingName, String settingValue) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   180
        for (Element event : getChildElements(doc.getDocumentElement(), "event")) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   181
            Attr attribute = event.getAttributeNode("name");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   182
            if (attribute != null) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   183
                if (eventName.equals(attribute.getValue())) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   184
                    Element setting = doc.createElement("setting");
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   185
                    setting.setAttribute("name", settingName);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   186
                    setting.setTextContent(settingValue);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   187
                    event.appendChild(setting);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   188
                }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   189
            }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   190
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   191
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   192
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   193
    private static Collection<Element> getChildElements(Element parent, String name) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   194
        NodeList elementsByTagName = parent.getElementsByTagName(name);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   195
        List<Element> elements = new ArrayList<>();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   196
        for (int i = 0; i < elementsByTagName.getLength(); i++) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   197
            Node node = elementsByTagName.item(i);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   198
            if (node.getNodeType() == Node.ELEMENT_NODE) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   199
                elements.add((Element) node);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   200
            }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   201
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   202
        return elements;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   203
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   204
}