/* * Copyright (c) 2016, 2019, 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.management.jfr; import java.util.concurrent.Callable; import javax.management.openmbean.CompositeData; import jdk.jfr.EventType; import jdk.jfr.SettingDescriptor; /** * Management class that describes a setting, for example name, description and * default value. * * @see EventType#getSettingDescriptors() * * @since 9 */ public final class SettingDescriptorInfo { private final String name; private final String label; private final String description; private final String typeName; private final String contentType; private final String defaultValue; // package private SettingDescriptorInfo(SettingDescriptor settingDescriptor) { this.name = settingDescriptor.getName(); this.label = settingDescriptor.getLabel(); this.description = settingDescriptor.getDescription(); this.typeName = settingDescriptor.getTypeName(); this.contentType = settingDescriptor.getContentType(); this.defaultValue = settingDescriptor.getDefaultValue(); } private SettingDescriptorInfo(CompositeData cd) { this.name = (String) cd.get("name"); this.label = (String) cd.get("label"); this.description = (String) cd.get("description"); this.typeName = (String) cd.get("typeName"); this.defaultValue = (String) cd.get("defaultValue"); this.contentType = (String) cd.get("contentType"); } /** * Returns the human-readable name of this setting, for example * {@code "Threshold"}. * * @return the label for this setting, not {@code null} */ public String getLabel() { return label; } /** * Returns the name of the setting associated with this * {@code SettingDescriptorInfo}, for example {@code "threshold"}. * * @return the name of this setting, not {@code null} */ public String getName() { return name; } /** * Returns the description of the setting associated this * {@code SettingDescriptorInfo}, for example * {@code "The duration an event must exceed to be be recorded"}. * * @return the description of this setting, not null */ public String getDescription() { return description; } /** * Returns the type name of the setting associated this * {@code SettingDescriptorInfo}, for example * {@code "com.oracle.jfr.settings.Threshold"}. *

* The type can be used to identify what type of setting this is. * * @return the name of this settings type, not {@code null} */ public String getTypeName() { return typeName; } /** * Returns the content type of the setting associated this * {@code SettingDescriptorInfo}, for example {@code "jdk.jfr.Timespan"}. *

* The content type can be used to determine how the setting should be * rendered in a graphical user interface. * * @return the name of this settings type, not {@code null} */ public String getContentType() { return contentType; } /** * Returns the default value of the setting associated this * {@code SettingDescriptorInfo}, for example {@code "20 ms"}. * * @return default value for this setting, not {@code null} * * @see SettingDescriptor#getDefaultValue() */ public String getDefaultValue() { return defaultValue; } /** * Returns an {@code SettingDescriptorInfo} represented by the specified * {@code CompositeData} *

* The supplied {@code CompositeData} must have the following item names and * item types to be valid.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
The name and type the specified CompositeData must contain
NameType
name{@code String}
label{@code String}
description{@code String}
typeName{@code String}
contentType{@code String}
defaultValue{@code String}
*
* * @param cd {@code CompositeData} representing the {@code SettingDescriptorInfo} to * return * * @throws IllegalArgumentException if {@code cd} does not represent a valid * {@code EventTypeInfo} * * @return a {@code SettingDescriptorInfo}, or {@code null} if {@code cd} is * {@code null} */ public static SettingDescriptorInfo from(CompositeData cd) { if (cd == null) { return null; } return new SettingDescriptorInfo(cd); } /** * Returns a string description of this {@code SettingDescriptorInfo}. * * @return a string describing this setting, not {@code null} */ @Override public String toString() { Stringifier s = new Stringifier(); s.add("name", name); s.add("label", label); s.add("description", description); s.add("typeName", typeName); s.add("contentType", contentType); s.add("defaultValue", defaultValue); return s.toString(); } }