0N/A/*
3261N/A * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/Apackage sun.management;
0N/A
0N/Aimport java.util.*;
0N/Aimport com.sun.management.VMOption;
0N/Aimport com.sun.management.VMOption.Origin;
0N/A
0N/A/**
0N/A * Flag class is a helper class for constructing a VMOption.
0N/A * It has the static methods for getting the Flag objects, each
0N/A * corresponds to one VMOption.
0N/A *
0N/A */
0N/Aclass Flag {
0N/A private String name;
0N/A private Object value;
0N/A private Origin origin;
0N/A private boolean writeable;
0N/A private boolean external;
0N/A
0N/A Flag(String name, Object value, boolean writeable,
0N/A boolean external, Origin origin) {
0N/A this.name = name;
1874N/A this.value = value == null ? "" : value ;
0N/A this.origin = origin;
0N/A this.writeable = writeable;
0N/A this.external = external;
0N/A }
0N/A
0N/A Object getValue() {
0N/A return value;
0N/A }
0N/A
0N/A boolean isWriteable() {
0N/A return writeable;
0N/A }
0N/A
0N/A boolean isExternal() {
0N/A return external;
0N/A }
0N/A
0N/A VMOption getVMOption() {
1874N/A return new VMOption(name, value.toString(), writeable, origin);
0N/A }
0N/A
0N/A static Flag getFlag(String name) {
0N/A String[] names = new String[1];
0N/A names[0] = name;
2155N/A
2155N/A List<Flag> flags = getFlags(names, 1);
2155N/A if (flags.isEmpty()) {
2155N/A return null;
0N/A } else {
2155N/A // flags should have only one element
2155N/A return flags.get(0);
0N/A }
0N/A }
0N/A
0N/A static List<Flag> getAllFlags() {
0N/A int numFlags = getInternalFlagCount();
0N/A
0N/A // Get all internal flags with names = null
2155N/A return getFlags(null, numFlags);
2155N/A }
2155N/A
2155N/A private static List<Flag> getFlags(String[] names, int numFlags) {
2155N/A Flag[] flags = new Flag[numFlags];
2155N/A int count = getFlags(names, flags, numFlags);
2155N/A
2155N/A List<Flag> result = new ArrayList<Flag>();
2155N/A for (Flag f : flags) {
2155N/A if (f != null) {
2155N/A result.add(f);
2155N/A }
2155N/A }
2155N/A return result;
0N/A }
0N/A
0N/A private static native String[] getAllFlagNames();
2155N/A // getFlags sets each element in the given flags array
2155N/A // with a Flag object only if the name is valid and the
2155N/A // type is supported. The flags array may contain null elements.
0N/A private static native int getFlags(String[] names, Flag[] flags, int count);
0N/A private static native int getInternalFlagCount();
0N/A
0N/A // These set* methods are synchronized on the class object
0N/A // to avoid multiple threads updating the same flag at the same time.
0N/A static synchronized native void setLongValue(String name, long value);
0N/A static synchronized native void setBooleanValue(String name, boolean value);
0N/A static synchronized native void setStringValue(String name, String value);
0N/A
0N/A static {
0N/A initialize();
0N/A }
0N/A private static native void initialize();
0N/A}