1 /*
   2  * Copyright (c) 2007, 2010, 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 
  27 package com.sun.org.glassfish.gmbal ;
  28 
  29 import java.lang.annotation.Documented ;
  30 import java.lang.annotation.Target ;
  31 import java.lang.annotation.ElementType ;
  32 import java.lang.annotation.Retention ;
  33 import java.lang.annotation.RetentionPolicy ;
  34 
  35 /** This annotation defines CompositeData.   An interface or class annotated as @ManagedData
  36  * has a corresponding CompositeData instance constructed according to the @ManagedAttribute
  37  * annotations on its methods.  All inherited annotated methods are included.
  38  * In the case of conflicts, the most derived method is used (that is the method
  39  * declared in the method
  40  * closest to the class annotated as @ManagedData).
  41  */
  42 @Documented
  43 @Target(ElementType.TYPE)
  44 @Retention(RetentionPolicy.RUNTIME)
  45 public @interface ManagedData {
  46     /** The name of the ManagedData.
  47      * <P>
  48      * Gmbal determines the ManagedData name as follows:
  49      * <ol>
  50      * <li>If the class has a final static field of type String with the
  51      * name "GMBAL_TYPE", the value of the field is the ManagedData name.
  52      * <li>Otherwise, if the class has an @ManagedData annotation, and the
  53      * value of the name is not "", the value of the name is the ManagedData name.
  54      * <li>Otherwise, if the package prefix of the class name matches one of
  55      * the type prefixes added by an stripPrefix call to the ManagedObjectManager,
  56      * the ManagedData name is the full class name with the matching prefix removed.
  57      * <li>Otherwise, if the stripPackagePrefix method was called on the
  58      * ManagedObjectManager, the ManagedData name is the class name without any
  59      * package prefixes.
  60      * <li>Otherwise, the ManagedData name is the class name.
  61      * </ol>
  62      *
  63      */
  64     String name() default "" ;
  65 }