| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package sun.management;  | 
 | 
 | 
 | 
import java.util.*;  | 
 | 
import com.sun.management.VMOption;  | 
 | 
import com.sun.management.VMOption.Origin;  | 
 | 
import java.security.AccessController;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
class Flag { | 
 | 
    private String name;  | 
 | 
    private Object value;  | 
 | 
    private Origin origin;  | 
 | 
    private boolean writeable;  | 
 | 
    private boolean external;  | 
 | 
 | 
 | 
    Flag(String name, Object value, boolean writeable,  | 
 | 
         boolean external, Origin origin) { | 
 | 
        this.name = name;  | 
 | 
        this.value = value == null ? "" : value ;  | 
 | 
        this.origin = origin;  | 
 | 
        this.writeable = writeable;  | 
 | 
        this.external = external;  | 
 | 
    }  | 
 | 
 | 
 | 
    Object getValue() { | 
 | 
        return value;  | 
 | 
    }  | 
 | 
 | 
 | 
    boolean isWriteable() { | 
 | 
        return writeable;  | 
 | 
    }  | 
 | 
 | 
 | 
    boolean isExternal() { | 
 | 
        return external;  | 
 | 
    }  | 
 | 
 | 
 | 
    VMOption getVMOption() { | 
 | 
        return new VMOption(name, value.toString(), writeable, origin);  | 
 | 
    }  | 
 | 
 | 
 | 
    static Flag getFlag(String name) { | 
 | 
        String[] names = new String[1];  | 
 | 
        names[0] = name;  | 
 | 
 | 
 | 
        List<Flag> flags = getFlags(names, 1);  | 
 | 
        if (flags.isEmpty()) { | 
 | 
            return null;  | 
 | 
        } else { | 
 | 
              | 
 | 
            return flags.get(0);  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    static List<Flag> getAllFlags() { | 
 | 
        int numFlags = getInternalFlagCount();  | 
 | 
 | 
 | 
          | 
 | 
        return getFlags(null, numFlags);  | 
 | 
    }  | 
 | 
 | 
 | 
    private static List<Flag> getFlags(String[] names, int numFlags) { | 
 | 
        Flag[] flags = new Flag[numFlags];  | 
 | 
        int count = getFlags(names, flags, numFlags);  | 
 | 
 | 
 | 
        List<Flag> result = new ArrayList<>();  | 
 | 
        for (Flag f : flags) { | 
 | 
            if (f != null) { | 
 | 
                result.add(f);  | 
 | 
            }  | 
 | 
        }  | 
 | 
        return result;  | 
 | 
    }  | 
 | 
 | 
 | 
    private static native String[] getAllFlagNames();  | 
 | 
    // getFlags sets each element in the given flags array  | 
 | 
    // with a Flag object only if the name is valid and the  | 
 | 
      | 
 | 
    private static native int getFlags(String[] names, Flag[] flags, int count);  | 
 | 
    private static native int getInternalFlagCount();  | 
 | 
 | 
 | 
    // These set* methods are synchronized on the class object  | 
 | 
      | 
 | 
    static synchronized native void setLongValue(String name, long value);  | 
 | 
    static synchronized native void setDoubleValue(String name, double value);  | 
 | 
    static synchronized native void setBooleanValue(String name, boolean value);  | 
 | 
    static synchronized native void setStringValue(String name, String value);  | 
 | 
 | 
 | 
    static { | 
 | 
        AccessController.doPrivileged(  | 
 | 
            new java.security.PrivilegedAction<Void>() { | 
 | 
                public Void run() { | 
 | 
                    System.loadLibrary("management"); | 
 | 
                    return null;  | 
 | 
                }  | 
 | 
            });  | 
 | 
        initialize();  | 
 | 
    }  | 
 | 
    private static native void initialize();  | 
 | 
}  |