diff options
Diffstat (limited to 'libjava/classpath/javax/management/MBeanAttributeInfo.java')
-rw-r--r-- | libjava/classpath/javax/management/MBeanAttributeInfo.java | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/libjava/classpath/javax/management/MBeanAttributeInfo.java b/libjava/classpath/javax/management/MBeanAttributeInfo.java new file mode 100644 index 00000000000..bded7e41a07 --- /dev/null +++ b/libjava/classpath/javax/management/MBeanAttributeInfo.java @@ -0,0 +1,301 @@ +/* MBeanAttributeInfo.java -- Information about an attribute of a bean. + Copyright (C) 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.management; + +import java.lang.reflect.Method; + +/** + * Describes the attributes of a management bean. + * The information in this class is immutable as standard. + * Of course, subclasses may change this, but this + * behaviour is not recommended. + * + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) + * @since 1.5 + */ +public class MBeanAttributeInfo + extends MBeanFeatureInfo + implements Cloneable +{ + + /** + * The type of the attribute. + * + * @serial the attribute type. + */ + private String attributeType; + + /** + * True if the attribute's value can be changed. + * + * @serial true if the value can be changed. + */ + private boolean isWrite; + + /** + * True if the attribute's value can be read. + * + * @serial true if the value can be read. + */ + private boolean isRead; + + /** + * True if the attribute is a boolean and thus + * has a isXXX accessor rather than a getXXX accessor. + * + * @serial true if the attribute has an isXXX accessor. + */ + private boolean is; + + /** + * Constructs a new {@link MBeanAttributeInfo} using the specified + * name and description, with the given accessor and mutator + * methods. A <code>null</code> value for the accessor method + * indicates that the value can not be read. A <code>null</code> + * value for the mutator method indicates that the value can not be + * changed. + * + * @param name the name of the attribute. + * @param desc a description of the attribute. + * @param getter the accessor method, or <code>null</code> if the value + * can not be read. + * @param setter the mutator method, or <code>null</code> if the value + * can not be changed. + * @throws IntrospectionException if both the accessor and mutator method + * are <code>null</code>. + */ + public MBeanAttributeInfo(String name, String desc, + Method getter, Method setter) + throws IntrospectionException + { + super(name, desc); + if (getter == null && setter == null) + throw new IntrospectionException("Both the getter and setter methods can " + + "not be null."); + if (getter == null) + { + attributeType = setter.getParameterTypes()[0].getName(); + isRead = false; + is = false; + } + else + { + attributeType = getter.getReturnType().getName(); + isRead = true; + is = getter.getName().startsWith("is"); + } + if (setter != null) + isWrite = true; + } + + /** + * Constructs a new {@link MBeanAttributeInfo} using the specified + * name, description and type with the given settings for the accessor + * and mutator methods. + * + * @param name the name of the attribute. + * @param type the type of the attribute, in the form of its class name. + * @param desc a description of the attribute. + * @param isReadable true if the attribute's value can be read. + * @param isWritable true if the attribute's value can be changed. + * @param isIs true if the attribute uses an accessor of the form isXXX. + * @throws IllegalArgumentException if the attribute is both unreadable + * and unwritable. + */ + public MBeanAttributeInfo(String name, String type, String desc, + boolean isReadable, boolean isWritable, + boolean isIs) + { + super(name, desc); + if (!isReadable && !isWritable) + throw new IllegalArgumentException("The attribute can not be both " + + "unreadable and unwritable."); + attributeType = type; + isRead = isReadable; + isWrite = isWritable; + is = isIs; + } + + /** + * Returns a clone of this instance. The clone is created + * using just the method provided by {@link java.lang.Object}. + * Thus, the clone is just a shallow clone as returned by + * that method, and does not contain any deeper cloning based + * on the subject of this class. + * + * @return a clone of this instance. + * @see java.lang.Cloneable + */ + public Object clone() + { + try + { + return super.clone(); + } + catch (CloneNotSupportedException e) + { + /* This shouldn't happen; we implement Cloneable */ + throw new IllegalStateException("clone() called on " + + "non-cloneable object."); + } + } + + /** + * Compares this feature with the supplied object. This + * returns true iff the object is an instance of + * {@link MBeanAttributeInfo}, {@link Object#equals()} + * returns true for a comparison of both the name and + * description of this attribute with that of the specified + * object (performed by the superclass), and the type and + * boolean flags of the two instances are equal. + * + * @param obj the object to compare. + * @return true if the object is a {@link MBeanAttributeInfo} + * instance, + * <code>name.equals(object.getName())</code>, + * <code>description.equals(object.getDescription())</code>, + * <code>attributeType.equals(object.getType())</code>, + * <code>isRead == object.isReadable()</code>, + * <code>isWrite == object.isWritable()</code>, + * <code>is == object.isIs()</code> + */ + public boolean equals(Object obj) + { + if (!(obj instanceof MBeanAttributeInfo)) + return false; + if (!(super.equals(obj))) + return false; + MBeanAttributeInfo o = (MBeanAttributeInfo) obj; + return (attributeType.equals(o.getType()) && + isRead == o.isReadable() && + isWrite == o.isWritable() && + is == o.isIs()); + } + + /** + * Returns the type of this attribute, in the form of its class name. + * + * @return the type of this attribute. + */ + public String getType() + { + return attributeType; + } + + /** + * Returns the hashcode of the attribute information as the sum of + * the hashcode of the superclass, the hashcode of the type, + * the hashcode of {@link #isReadable()}, twice the hashcode + * of {@link #isWritable()} and four times the hashcode + * of {@link #isIs()}. + * + * @return the hashcode of the attribute information. + */ + public int hashCode() + { + return super.hashCode() + attributeType.hashCode() + + Boolean.valueOf(isRead).hashCode() + + (2 * Boolean.valueOf(isWrite).hashCode()) + + (4 * Boolean.valueOf(is).hashCode()); + } + + /** + * Returns true if the accessor method of this attribute + * is of the form <code>isXXX</code>. + * + * @return true if the accessor takes the form <code>isXXX</code>. + */ + public boolean isIs() + { + return is; + } + + /** + * Returns true if value of this attribute can be read. + * + * @return true if the value of the attribute can be read. + */ + public boolean isReadable() + { + return isRead; + } + + /** + * Returns true if the value of this attribute can be changed. + * + * @return true if the value of the attribute can be changed. + */ + public boolean isWritable() + { + return isWrite; + } + + /** + * <p> + * Returns a textual representation of this instance. This + * is constructed using the class name + * (<code>javax.management.MBeanAttributeInfo</code>), + * the name, description and type of the attribute and the + * current settings of the {@link #isReadable()}, + * {@link #isWritable()} and {@link #isIs()} properties. + * </p> + * <p> + * As instances of this class are immutable, the return value + * is computed just once for each instance and reused + * throughout its life. + * </p> + * + * @return a @link{java.lang.String} instance representing + * the instance in textual form. + */ + public String toString() + { + if (string == null) + { + super.toString(); + string = string.substring(0, string.length() - 1) + + ",type=" + attributeType + + ",isReadable=" + (isRead ? "yes" : "no") + + ",isWritable=" + (isWrite ? "yes" : "no") + + ",isIs=" + (is ? "yes" : "no") + + "]"; + } + return string; + } + +} |