jdk/src/java.management/share/classes/sun/management/Flag.java
changeset 30355 e37c7eba132f
parent 30354 ca83b4cae363
child 30356 a56e57aad51f
equal deleted inserted replaced
30354:ca83b4cae363 30355:e37c7eba132f
     1 /*
       
     2  * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.  Oracle designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Oracle in the LICENSE file that accompanied this code.
       
    10  *
       
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14  * version 2 for more details (a copy is included in the LICENSE file that
       
    15  * accompanied this code).
       
    16  *
       
    17  * You should have received a copy of the GNU General Public License version
       
    18  * 2 along with this work; if not, write to the Free Software Foundation,
       
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20  *
       
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22  * or visit www.oracle.com if you need additional information or have any
       
    23  * questions.
       
    24  */
       
    25 
       
    26 package sun.management;
       
    27 
       
    28 import java.util.*;
       
    29 import com.sun.management.VMOption;
       
    30 import com.sun.management.VMOption.Origin;
       
    31 import java.security.AccessController;
       
    32 
       
    33 /**
       
    34  * Flag class is a helper class for constructing a VMOption.
       
    35  * It has the static methods for getting the Flag objects, each
       
    36  * corresponds to one VMOption.
       
    37  *
       
    38  */
       
    39 class Flag {
       
    40     private String name;
       
    41     private Object value;
       
    42     private Origin origin;
       
    43     private boolean writeable;
       
    44     private boolean external;
       
    45 
       
    46     Flag(String name, Object value, boolean writeable,
       
    47          boolean external, Origin origin) {
       
    48         this.name = name;
       
    49         this.value = value == null ? "" : value ;
       
    50         this.origin = origin;
       
    51         this.writeable = writeable;
       
    52         this.external = external;
       
    53     }
       
    54 
       
    55     Object getValue() {
       
    56         return value;
       
    57     }
       
    58 
       
    59     boolean isWriteable() {
       
    60         return writeable;
       
    61     }
       
    62 
       
    63     boolean isExternal() {
       
    64         return external;
       
    65     }
       
    66 
       
    67     VMOption getVMOption() {
       
    68         return new VMOption(name, value.toString(), writeable, origin);
       
    69     }
       
    70 
       
    71     static Flag getFlag(String name) {
       
    72         String[] names = new String[1];
       
    73         names[0] = name;
       
    74 
       
    75         List<Flag> flags = getFlags(names, 1);
       
    76         if (flags.isEmpty()) {
       
    77             return null;
       
    78         } else {
       
    79             // flags should have only one element
       
    80             return flags.get(0);
       
    81         }
       
    82     }
       
    83 
       
    84     static List<Flag> getAllFlags() {
       
    85         int numFlags = getInternalFlagCount();
       
    86 
       
    87         // Get all internal flags with names = null
       
    88         return getFlags(null, numFlags);
       
    89     }
       
    90 
       
    91     private static List<Flag> getFlags(String[] names, int numFlags) {
       
    92         Flag[] flags = new Flag[numFlags];
       
    93         int count = getFlags(names, flags, numFlags);
       
    94 
       
    95         List<Flag> result = new ArrayList<>();
       
    96         for (Flag f : flags) {
       
    97             if (f != null) {
       
    98                 result.add(f);
       
    99             }
       
   100         }
       
   101         return result;
       
   102     }
       
   103 
       
   104     private static native String[] getAllFlagNames();
       
   105     // getFlags sets each element in the given flags array
       
   106     // with a Flag object only if the name is valid and the
       
   107     // type is supported. The flags array may contain null elements.
       
   108     private static native int getFlags(String[] names, Flag[] flags, int count);
       
   109     private static native int getInternalFlagCount();
       
   110 
       
   111     // These set* methods are synchronized on the class object
       
   112     // to avoid multiple threads updating the same flag at the same time.
       
   113     static synchronized native void setLongValue(String name, long value);
       
   114     static synchronized native void setDoubleValue(String name, double value);
       
   115     static synchronized native void setBooleanValue(String name, boolean value);
       
   116     static synchronized native void setStringValue(String name, String value);
       
   117 
       
   118     static {
       
   119         AccessController.doPrivileged(
       
   120             new java.security.PrivilegedAction<Void>() {
       
   121                 public Void run() {
       
   122                     System.loadLibrary("management");
       
   123                     return null;
       
   124                 }
       
   125             });
       
   126         initialize();
       
   127     }
       
   128     private static native void initialize();
       
   129 }