001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package javax.management;
023:
024: import java.io.Serializable;
025:
026: /**
027: * This interface defines behavioral and runtime metadata for ModelMBeans.
028: * A descriptor is a set of name-value pairs.<p>
029: *
030: * The {@link DescriptorAccess} interface defines how to get and set
031: * Descriptors for a ModelMBean's metadata classes.<p>
032: *
033: * The implementation must implement the following constructors.<p>
034: *
035: * <i>Descriptor()</i> returns an empty descriptor.<p>
036: *
037: * <i>Descriptor(Descriptor)</i> returns a copy of the decriptor.<p>
038: *
039: * <i>Descriptor(String[], Object[])</i> a constructor that verifies the
040: * field names include a descriptorType and that predefined fields
041: * contain valid values.<p>
042: *
043: * @see javax.management.DescriptorAccess
044: * @see javax.management.modelmbean.ModelMBean
045: *
046: * @author <a href="mailto:Adrian.Brock@HappeningTimes.com">Adrian Brock</a>.
047: * @version $Revision: 57200 $
048: *
049: */
050: public interface Descriptor extends Serializable, Cloneable {
051: // Constants ---------------------------------------------------
052:
053: // Public ------------------------------------------------------
054:
055: /**
056: * Retrieves the value of a field.
057: *
058: * @param fieldName the name of the field.
059: * @return the value of the field.
060: * @exception RuntimeOperationsException when the field name is not
061: * valid.
062: */
063: public Object getFieldValue(String fieldName)
064: throws RuntimeOperationsException;
065:
066: /**
067: * Sets the value of a field.
068: *
069: * @param fieldName the name of the field.
070: * @param fieldValue the value of the field.
071: * @exception RuntimeOperationsException when the field name or value
072: * is not valid.
073: */
074: public void setField(String fieldName, Object fieldValue)
075: throws RuntimeOperationsException;
076:
077: /**
078: * Retrieves all the fields in this descriptor. The format is
079: * <i>fieldName=fieldValue</i> for String values and
080: * <i>fieldName=(fieldValue.toString())</i> for other value types.<p>
081: *
082: * @return an array of fieldName=fieldValue strings.
083: */
084: public String[] getFields();
085:
086: /**
087: * Retrieves all the field names in this descriptor.
088: *
089: * @return an array of field name strings.
090: */
091: public String[] getFieldNames();
092:
093: /**
094: * Retrieves all the field values for the passed field names. The
095: * array of object values returned is in the same order as the
096: * field names passed to the method.<p>
097: *
098: * When a fieldName does not exist, the corresponding element of
099: * the returned array is null.<p>
100: *
101: * @param fieldNames the array of field names to retrieve. Pass null
102: * to retrieve all fields.
103: * @return an array of field values.
104: */
105: public Object[] getFieldValues(String[] fieldNames);
106:
107: /**
108: * Remove a field from the descriptor.
109: *
110: * @param fieldName the field to remove. No exception is thrown
111: * when the field is not in the descriptor.
112: */
113: public void removeField(String fieldName);
114:
115: /**
116: * Set multiple fields in this descriptor. The field in the fieldNames
117: * array is set to the value of the corresponding fieldValues array.
118: * The two arrays must be the same size.
119: *
120: * @param fieldNames an array of fieldNames to set. Neither the array
121: * or array elements can be null. The fieldName must exist.
122: * @param fieldValues an array of fieldValues to set. Neither the array
123: * or array elements can be null. The fieldValue must be valid for
124: * the corresponding fieldName.
125: * @exception RuntimeOperationsException for not existent or fieldNames,
126: * invalid or null fieldValues, the two arrays are different sizes or
127: * the contructor fails for any reason.
128: */
129: public void setFields(String[] fieldNames, Object[] fieldValues)
130: throws RuntimeOperationsException;
131:
132: /**
133: * Returns a descriptor that is a duplicate of this one.
134: *
135: * @exception RuntimeOperationsException for invalid fieldNames,
136: * fieldValues or the contructor fails for any reason.
137: */
138: public java.lang.Object clone() throws RuntimeOperationsException;
139:
140: /**
141: * Checks to see that this descriptor is valid.
142: *
143: * @return true when the fieldValues are legal for the fieldNames,
144: * false otherwise.
145: * @exception RuntimeOperationsException for any error performing
146: * the validation.
147: */
148: public boolean isValid() throws RuntimeOperationsException;
149: }
|