Methods Summary |
---|
public java.lang.Object[] | calculateIndex(javax.management.openmbean.CompositeData value)Calculates the index that would be used in this TabularData instance to refer to the specified
composite data value parameter if it were added to this instance.
This method checks for the type validity of the specified value,
but does not check if the calculated index is already used to refer to a value in this TabularData instance.
// Check value is valid
//
checkValueType(value);
// Return its calculated index
//
return internalCalculateIndex(value).toArray();
|
private void | checkKeyType(java.lang.Object[] key)Checks if the specified key is valid for this TabularData instance.
// Check key is neither null nor empty
//
if ( (key == null) || (key.length == 0) ) {
throw new NullPointerException("Argument key cannot be null or empty.");
}
/* Now check key is valid with tabularType index and row type definitions: */
// key[] should have the size expected for an index
//
if (key.length != this.indexNamesArray.length) {
throw new InvalidKeyException("Argument key's length="+ key.length +
" is different from the number of item values, which is "+ indexNamesArray.length +
", specified for the indexing rows in this TabularData instance.");
}
// each element in key[] should be a value for its corresponding open type specified in rowType
//
OpenType keyElementType;
for (int i=0; i<key.length; i++) {
keyElementType = tabularType.getRowType().getType(this.indexNamesArray[i]);
if ( (key[i] != null) && (! keyElementType.isValue(key[i])) ) {
throw new InvalidKeyException("Argument element key["+ i +"] is not a value for the open type expected for "+
"this element of the index, whose name is \""+ indexNamesArray[i] +
"\" and whose open type is "+ keyElementType);
}
}
|
private java.util.List | checkValueAndIndex(javax.management.openmbean.CompositeData value)Checks if the specified value can be put (ie added) in this TabularData instance
(ie value is not null, its composite type is equal to row type, and its index is not already used),
and returns the index calculated for this value.
The index is a List, and not an array, so that an index.equals(otherIndex) call will actually compare contents,
not just the objects references as is done for an array object.
// Check value is valid
//
checkValueType(value);
// Calculate value's index according to this instance's tabularType
// and check it is not already used for a mapping in the parent HashMap
//
List index = internalCalculateIndex(value);
if (dataMap.containsKey(index)) {
throw new KeyAlreadyExistsException("Argument value's index, calculated according to this TabularData "+
"instance's tabularType, already refers to a value in this table.");
}
// The check is OK, so return the index
//
return index;
|
private void | checkValueType(javax.management.openmbean.CompositeData value)Checks the specified value's type is valid for this TabularData instance
(ie value is not null, and its composite type is equal to row type).
// Check value is not null
//
if (value == null) {
throw new NullPointerException("Argument value cannot be null.");
}
// if value's type is not the same as this instance's row type, throw InvalidOpenTypeException
//
if ( ! value.getCompositeType().equals(tabularType.getRowType()) ) {
throw new InvalidOpenTypeException("Argument value's composite type ["+ value.getCompositeType() +
"] is not equal to "+
"this TabularData instance's row type ["+ tabularType.getRowType() +"].");
}
|
public void | clear()Removes all rows from this TabularDataSupport instance.
dataMap.clear();
|
public java.lang.Object | clone()Returns a clone of this TabularDataSupport instance:
the clone is obtained by calling super.clone(), and then cloning the underlying map.
Only a shallow clone of the underlying map is made, i.e. no cloning of the indexes and row values is made as they are immutable.
try {
TabularDataSupport c = (TabularDataSupport) super.clone();
c.dataMap = (HashMap) ((HashMap) c.dataMap).clone();
return c;
}
catch (CloneNotSupportedException e) {
throw new InternalError(e.toString());
}
|
public boolean | containsKey(java.lang.Object key)Returns true if and only if this TabularData instance contains a CompositeData value
(ie a row) whose index is the specified key. If key cannot be cast to a one dimension array
of Object instances, this method simply returns false; otherwise it returns the the result of the call to
this.containsKey((Object[]) key).
// if key is not an array of Object instances, return false
//
Object[] k;
try {
k = (Object[]) key;
} catch (ClassCastException e) {
return false;
}
return this.containsKey(k);
|
public boolean | containsKey(java.lang.Object[] key)Returns true if and only if this TabularData instance contains a CompositeData value
(ie a row) whose index is the specified key. If key is null or does not conform to
this TabularData instance's TabularType definition, this method simply returns false.
return ( key == null ? false : dataMap.containsKey(Arrays.asList(key)) );
|
public boolean | containsValue(javax.management.openmbean.CompositeData value)Returns true if and only if this TabularData instance contains the specified
CompositeData value. If value is null or does not conform to
this TabularData instance's row type definition, this method simply returns false.
return dataMap.containsValue(value);
|
public boolean | containsValue(java.lang.Object value)Returns true if and only if this TabularData instance contains the specified
value.
return dataMap.containsValue(value);
|
public java.util.Set | entrySet()Returns a collection view of the index to row mappings contained in this TabularDataSupport instance.
Each element in the returned collection is a Map.Entry.
The collection is backed by the underlying map of this TabularDataSupport instance, in
so changes to the TabularDataSupport instance are reflected the collection, and vice-versa.
The collection supports element removal, which removes the corresponding mapping from the map, via the
Iterator.remove, Collection.remove,
removeAll, retainAll, and clear operations.
It does not support the add or addAll operations.
IMPORTANT NOTICE: Do not use the SetValue method of Map.Entry elements contained in the returned
collection view. Doing so would corrupt the index to row mappings contained in this TabularDataSupport instance.
return dataMap.entrySet();
|
public boolean | equals(java.lang.Object obj)Compares the specified obj parameter with this TabularDataSupport instance for equality.
Returns true if and only if all of the following statements are true:
- obj is non null,
- obj also implements the
TabularData interface,
- their tabular types are equal
- their contents (ie all CompositeData values) are equal.
This ensures that this equals method works properly for obj parameters which are
different implementations of the TabularData interface.
// if obj is null, return false
//
if (obj == null) {
return false;
}
// if obj is not a TabularData, return false
//
TabularData other;
try {
other = (TabularData) obj;
} catch (ClassCastException e) {
return false;
}
// Now, really test for equality between this TabularData implementation and the other:
//
// their tabularType should be equal
if ( ! this.getTabularType().equals(other.getTabularType()) ) {
return false;
}
// their contents should be equal:
// . same size
// . values in this instance are in the other (we know there are no duplicate elements possible)
// (row values comparison is enough, because keys are calculated according to tabularType)
if (this.size() != other.size()) {
return false;
}
for (Iterator iter = this.values().iterator(); iter.hasNext(); ) {
CompositeData value = (CompositeData) iter.next();
if ( ! other.containsValue(value) ) {
return false;
}
}
// All tests for equality were successfull
//
return true;
|
public javax.management.openmbean.CompositeData | get(java.lang.Object[] key)Returns the CompositeData value whose index is
key, or null if there is no value mapping
to key, in this TabularData instance.
// Check key is not null and valid with tabularType
// (throws NullPointerException, InvalidKeyException)
//
checkKeyType(key);
// Return the mapping stored in the parent HashMap
//
return (CompositeData) dataMap.get(Arrays.asList(key));
|
public java.lang.Object | get(java.lang.Object key)This method simply calls get((Object[]) key).
return get((Object[]) key);
|
public javax.management.openmbean.TabularType | getTabularType()Returns the tabular type describing this TabularData instance.
return tabularType;
|
public int | hashCode()Returns the hash code value for this TabularDataSupport instance.
The hash code of a TabularDataSupport instance is the sum of the hash codes
of all elements of information used in equals comparisons
(ie: its tabular type and its content, where the content is defined as all the CompositeData values).
This ensures that t1.equals(t2) implies that t1.hashCode()==t2.hashCode()
for any two TabularDataSupport instances t1 and t2 ,
as required by the general contract of the method
{@link Object#hashCode() Object.hashCode()}.
However, note that another instance of a class implementing the TabularData interface
may be equal to this TabularDataSupport instance as defined by {@link #equals},
but may have a different hash code if it is calculated differently.
int result = 0;
result += this.tabularType.hashCode();
for (Iterator iter = this.values().iterator(); iter.hasNext(); ) {
result += ((CompositeData)iter.next()).hashCode();
}
return result;
|
private java.util.List | internalCalculateIndex(javax.management.openmbean.CompositeData value)Returns the index for value, assuming value is valid for this TabularData instance
(ie value is not null, and its composite type is equal to row type).
The index is a List, and not an array, so that an index.equals(otherIndex) call will actually compare contents,
not just the objects references as is done for an array object.
The returned List is unmodifiable so that once a row has been put into the dataMap, its index cannot be modified,
for example by a user that would attempt to modify an index contained in the Set returned by keySet().
return Collections.unmodifiableList(Arrays.asList(value.getAll(this.indexNamesArray)));
|
public boolean | isEmpty()Returns true if this TabularDataSupport instance contains no rows.
return (this.size() == 0);
|
public java.util.Set | keySet()Returns a set view of the keys contained in the underlying map of this TabularDataSupport instance,
and used to index the rows. Each key contained in this set is an unmodifiable List.
The set is backed by the underlying map of this TabularDataSupport instance,
so changes to the TabularDataSupport instance are reflected in the set, and vice-versa.
The set supports element removal, which removes the
corresponding row from this TabularDataSupport instance, via the Iterator.remove,
Set.remove, removeAll, retainAll, and
clear operations.
It does not support the add or addAll operations
return dataMap.keySet() ;
|
public java.lang.Object | put(java.lang.Object key, java.lang.Object value)This method simply calls put((CompositeData) value) and
therefore ignores its key parameter which can be null.
put((CompositeData) value);
return value;
|
public void | put(javax.management.openmbean.CompositeData value)
// Check value is not null, value's type is the same as this instance's row type,
// and calculate the value's index according to this instance's tabularType and
// check it is not already used for a mapping in the parent HashMap
//
List index = checkValueAndIndex(value);
// store the (key, value) mapping in the dataMap HashMap
//
dataMap.put(index, value);
|
public void | putAll(java.util.Map t)Add all the values contained in the specified map t to this TabularData instance.
This method converts the collection of values contained in this map into an array of CompositeData values,
if possible, and then call the method putAll(CompositeData[]). Note that the keys used in the specified
map t are ignored. This method allows, for example to add the content of another TabularData
instance with the same row type (but possibly different index names) into this instance.
// if t is null or empty, just return
//
if ( (t == null) || (t.size() == 0) ) {
return;
}
// Convert the values in t into an array of <tt>CompositeData</tt>
//
CompositeData[] values;
try {
values = (CompositeData[]) t.values().toArray(new CompositeData[t.size()]);
} catch (java.lang.ArrayStoreException e) {
throw new ClassCastException("Map argument t contains values which are not instances of <tt>CompositeData</tt>");
}
// Add the array of values
//
putAll(values);
|
public void | putAll(javax.management.openmbean.CompositeData[] values)Add all the elements in values to this TabularData instance.
If any element in values does not satisfy the constraints defined in {@link #put(CompositeData) put},
or if any two elements in values have the same index calculated according to this TabularData
instance's TabularType definition, then an exception describing the failure is thrown
and no element of values is added, thus leaving this TabularData instance unchanged.
// if values is null or empty, just return
//
if ( (values == null) || (values.length == 0) ) {
return;
}
// create the list of indexes corresponding to each value
ArrayList indexes = new ArrayList(values.length + 1);
// Check all elements in values and build index list
//
List index;
for (int i=0; i<values.length; i++) {
// check value and calculate index
index = checkValueAndIndex(values[i]);
// check index is different of those previously calculated
if (indexes.contains(index)) {
throw new KeyAlreadyExistsException("Argument elements values["+ i +"] and values["+ indexes.indexOf(index) +
"] have the same indexes, "+
"calculated according to this TabularData instance's tabularType.");
}
// add to index list
indexes.add(index);
}
// store all (index, value) mappings in the dataMap HashMap
//
for (int i=0; i<values.length; i++) {
dataMap.put(indexes.get(i), values[i]);
}
|
private void | readObject(java.io.ObjectInputStream in)Deserializes a {@link TabularDataSupport} from an {@link ObjectInputStream}.
in.defaultReadObject();
List tmpNames = tabularType.getIndexNames();
indexNamesArray = (String[]) tmpNames.toArray(new String[tmpNames.size()]);
|
public java.lang.Object | remove(java.lang.Object key)This method simply calls remove((Object[]) key).
return remove((Object[]) key);
|
public javax.management.openmbean.CompositeData | remove(java.lang.Object[] key)Removes the CompositeData value whose index is key from this TabularData instance,
and returns the removed value, or returns null if there is no value whose index is key.
// Check key is not null and valid with tabularType
// (throws NullPointerException, InvalidKeyException)
//
checkKeyType(key);
// Removes the (key, value) mapping in the parent HashMap
//
return (CompositeData) dataMap.remove(Arrays.asList(key));
|
public int | size()Returns the number of rows in this TabularDataSupport instance.
return dataMap.size();
|
public java.lang.String | toString()Returns a string representation of this TabularDataSupport instance.
The string representation consists of the name of this class (ie javax.management.openmbean.TabularDataSupport ),
the string representation of the tabular type of this instance, and the string representation of the contents
(ie list the key=value mappings as returned by a call to
dataMap.{@link java.util.HashMap#toString() toString()}).
return new StringBuffer()
.append(this.getClass().getName())
.append("(tabularType=")
.append(tabularType.toString())
.append(",contents=")
.append(dataMap.toString())
.append(")")
.toString();
|
public java.util.Collection | values()Returns a collection view of the rows contained in this TabularDataSupport instance.
The collection is backed by the underlying map, so changes to the TabularDataSupport instance
are reflected in the collection, and vice-versa.
The collection supports element removal,
which removes the corresponding index to row mapping from this TabularDataSupport instance,
via the Iterator.remove, Collection.remove,
removeAll, retainAll, and clear operations.
It does not support the add or addAll operations.
return dataMap.values() ;
|