jdk/src/share/classes/sun/management/LockInfoCompositeData.java
changeset 13803 889df16bef60
child 25522 10d789df41bb
equal deleted inserted replaced
13802:7e765d50416f 13803:889df16bef60
       
     1 /*
       
     2  * Copyright (c) 2012, 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.lang.management.LockInfo;
       
    29 import javax.management.openmbean.CompositeType;
       
    30 import javax.management.openmbean.CompositeData;
       
    31 import javax.management.openmbean.CompositeDataSupport;
       
    32 import javax.management.openmbean.OpenDataException;
       
    33 
       
    34 /**
       
    35  * A CompositeData for LockInfo for the local management support.
       
    36  * This class avoids the performance penalty paid to the
       
    37  * construction of a CompositeData use in the local case.
       
    38  */
       
    39 public class LockInfoCompositeData extends LazyCompositeData {
       
    40     private final LockInfo lock;
       
    41 
       
    42     private LockInfoCompositeData(LockInfo li) {
       
    43         this.lock = li;
       
    44     }
       
    45 
       
    46     public LockInfo getLockInfo() {
       
    47         return lock;
       
    48     }
       
    49 
       
    50     public static CompositeData toCompositeData(LockInfo li) {
       
    51         if (li == null) {
       
    52             return null;
       
    53         }
       
    54 
       
    55         LockInfoCompositeData licd = new LockInfoCompositeData(li);
       
    56         return licd.getCompositeData();
       
    57     }
       
    58 
       
    59     protected CompositeData getCompositeData() {
       
    60         // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH
       
    61         // lockInfoItemNames!
       
    62         final Object[] lockInfoItemValues = {
       
    63             new String(lock.getClassName()),
       
    64             new Integer(lock.getIdentityHashCode()),
       
    65         };
       
    66 
       
    67         try {
       
    68             return new CompositeDataSupport(lockInfoCompositeType,
       
    69                                             lockInfoItemNames,
       
    70                                             lockInfoItemValues);
       
    71         } catch (OpenDataException e) {
       
    72             // Should never reach here
       
    73             throw Util.newException(e);
       
    74         }
       
    75     }
       
    76 
       
    77     private static final CompositeType lockInfoCompositeType;
       
    78     static {
       
    79         try {
       
    80             lockInfoCompositeType = (CompositeType)
       
    81                 MappedMXBeanType.toOpenType(LockInfo.class);
       
    82         } catch (OpenDataException e) {
       
    83             // Should never reach here
       
    84             throw Util.newException(e);
       
    85         }
       
    86     }
       
    87 
       
    88     static CompositeType getLockInfoCompositeType() {
       
    89         return lockInfoCompositeType;
       
    90     }
       
    91 
       
    92     private static final String CLASS_NAME         = "className";
       
    93     private static final String IDENTITY_HASH_CODE = "identityHashCode";
       
    94     private static final String[] lockInfoItemNames = {
       
    95         CLASS_NAME,
       
    96         IDENTITY_HASH_CODE,
       
    97     };
       
    98 
       
    99     /*
       
   100      * Returns a LockInfo object mapped from the given CompositeData.
       
   101      */
       
   102     public static LockInfo toLockInfo(CompositeData cd) {
       
   103         if (cd == null) {
       
   104             throw new NullPointerException("Null CompositeData");
       
   105         }
       
   106 
       
   107         if (!isTypeMatched(lockInfoCompositeType, cd.getCompositeType())) {
       
   108             throw new IllegalArgumentException(
       
   109                 "Unexpected composite type for LockInfo");
       
   110         }
       
   111 
       
   112         String className = getString(cd, CLASS_NAME);
       
   113         int identityHashCode = getInt(cd, IDENTITY_HASH_CODE);
       
   114         return new LockInfo(className, identityHashCode);
       
   115     }
       
   116 
       
   117     private static final long serialVersionUID = -6374759159749014052L;
       
   118 }