Constructs a CompositeDataSupport instance with the specified * compositeType, whose item values * are specified by itemValues[], in the same order as in * itemNames[]. * As a CompositeType does not specify any order on its items, * the itemNames[] parameter is used * to specify the order in which the values are given in itemValues[]. * The items contained in this CompositeDataSupport instance are * internally stored in a TreeMap, * thus sorted in ascending lexicographic order of their names, for faster * retrieval of individual item values.
* *The constructor checks that all the constraints listed below for each * parameter are satisfied, * and throws the appropriate exception if they are not.
* * @param compositeType the composite type of this composite * data instance; must not be null. * * @param itemNames itemNames must list, in any order, all the * item names defined in compositeType; the order in which the * names are listed, is used to match values in itemValues[]; must * not be null. * * @param itemValues the values of the items, listed in the same order as * their respective names in itemNames; each item value can be * null, but if it is non-null it must be a valid value for the open type * defined in compositeType for the corresponding item; must be of * the same size as itemNames; must not be null. * * @throws IllegalArgumentException compositeType is null, or * itemNames[] or itemValues[] is null, or one * of the elements in itemNames[] is a null or empty string, or * itemNames[] and itemValues[] are not of the same size. * * @throws OpenDataException itemNames[] or * itemValues[]'s size differs from the number of items defined in * compositeType, or one of the elements in itemNames[] * does not exist as an item name defined in compositeType, or one * of the elements in itemValues[] is not a valid value for the * corresponding item as defined in compositeType. */ public CompositeDataSupport( CompositeType compositeType, String[] itemNames, Object[] itemValues) throws OpenDataException { this(makeMap(itemNames, itemValues), compositeType); } private static SortedMap
* Constructs a CompositeDataSupport instance with the specified compositeType, whose item names and corresponding values
* are given by the mappings in the map items.
* This constructor converts the keys to a string array and the values to an object array and calls
* CompositeDataSupport(javax.management.openmbean.CompositeType, java.lang.String[], java.lang.Object[]).
*
* @param compositeType the composite type of this composite data instance;
* must not be null.
* @param items the mappings of all the item names to their values;
* items must contain all the item names defined in compositeType;
* must not be null.
*
* @throws IllegalArgumentException compositeType is null, or
* items is null, or one of the keys in items is a null
* or empty string.
* @throws OpenDataException items' size differs from the
* number of items defined in compositeType, or one of the
* keys in items does not exist as an item name defined in
* compositeType, or one of the values in items
* is not a valid value for the corresponding item as defined in
* compositeType.
* @throws ArrayStoreException one or more keys in items is not of
* the class java.lang.String.
*
* @see #toMap
*/
public CompositeDataSupport(CompositeType compositeType,
Map Returns a Map representing the contents of the given CompositeData.
* Each item in the CompositeData is represented by an entry in the map,
* where the name and value of the item are the key and value of the entry.
* The returned value is modifiable but modifications to it have no effect
* on the original CompositeData. For example, if you have a CompositeData {@code cd1} and you want
* to produce another CompositeData {@code cd2} which is the same except
* that the value of its {@code id} item has been changed to 253, you
* could write: Logically, this method would be a method in the {@link CompositeData}
* interface, but cannot be for compatibility reasons.
* Returns true if and only if all of the following statements are true:
*
* This ensures that this equals method works properly for
* obj parameters which are different implementations of the
*
* The hash code of a
* This ensures that
* Each item value's hash code is added to the returned hash code.
* If an item value is an array,
* its hash code is obtained as if by calling the
* {@link java.util.Arrays#deepHashCode(Object[]) deepHashCode} method
* for arrays of object reference types or the appropriate overloading
* of {@code Arrays.hashCode(e)} for arrays of primitive types.
*
* @return the hash code value for this
* The string representation consists of the name of this class (ie
* CompositeData cd1 = ...;
* {@code Map
*
* CompositeDataSupport
instance for equality.
*
*
* CompositeData
interface,CompositeData
interface, with the restrictions mentioned in the
* {@link java.util.Collection#equals(Object) equals}
* method of the java.util.Collection interface.
*
* @param obj the object to be compared for equality with this
* CompositeDataSupport
instance.
* @return true
if the specified object is equal to this
* CompositeDataSupport
instance.
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
// if obj is not a CompositeData, return false
if (!(obj instanceof CompositeData)) {
return false;
}
CompositeData other = (CompositeData) obj;
// their compositeType should be equal
if (!this.getCompositeType().equals(other.getCompositeType()) ) {
return false;
}
if (contents.size() != other.values().size()) {
return false;
}
for (Map.EntryCompositeDataSupport
instance.
* CompositeDataSupport
instance is the sum of the hash codes
* of all elements of information used in equals
comparisons
* (ie: its composite type and all the item values).
* t1.equals(t2)
implies that t1.hashCode()==t2.hashCode()
* for any two CompositeDataSupport
instances t1
and t2
,
* as required by the general contract of the method
* {@link Object#hashCode() Object.hashCode()}.
* CompositeDataSupport
instance
*/
@Override
public int hashCode() {
int hashcode = compositeType.hashCode();
for (Object o : contents.values()) {
if (o instanceof Object[])
hashcode += Arrays.deepHashCode((Object[]) o);
else if (o instanceof byte[])
hashcode += Arrays.hashCode((byte[]) o);
else if (o instanceof short[])
hashcode += Arrays.hashCode((short[]) o);
else if (o instanceof int[])
hashcode += Arrays.hashCode((int[]) o);
else if (o instanceof long[])
hashcode += Arrays.hashCode((long[]) o);
else if (o instanceof char[])
hashcode += Arrays.hashCode((char[]) o);
else if (o instanceof float[])
hashcode += Arrays.hashCode((float[]) o);
else if (o instanceof double[])
hashcode += Arrays.hashCode((double[]) o);
else if (o instanceof boolean[])
hashcode += Arrays.hashCode((boolean[]) o);
else if (o != null)
hashcode += o.hashCode();
}
return hashcode;
}
/**
* Returns a string representation of this CompositeDataSupport
instance.
* javax.management.openmbean.CompositeDataSupport
),
* the string representation of the composite type of this instance, and the string representation of the contents
* (ie list the itemName=itemValue mappings).
*
* @return a string representation of this CompositeDataSupport
instance
*/
@Override
public String toString() {
return new StringBuilder()
.append(this.getClass().getName())
.append("(compositeType=")
.append(compositeType.toString())
.append(",contents=")
.append(contentString())
.append(")")
.toString();
}
private String contentString() {
StringBuilder sb = new StringBuilder("{");
String sep = "";
for (Map.Entry