in jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/PropertyData.java [85:151]
private PropertyData(String key, T value, String preservedBaseType) throws IllegalArgumentException {
if (key == null) {
throw new IllegalArgumentException("Argument key cannot be null");
}
if (value == null) {
throw new IllegalArgumentException("Argument value cannot be null");
}
this.key = key;
this.value = value;
Class<T> type = (Class<T>) value.getClass();
if (type.isArray()) {
this.encodedType = ARRAY_OF + type.getComponentType().getSimpleName();
StringBuilder builder = new StringBuilder();
int length = Array.getLength(value);
boolean useDelimiter = false;
for (int i = 0; i < length; i++) {
if (useDelimiter) {
builder.append(",");
} else {
useDelimiter = true;
}
builder.append(Array.get(value, i));
}
this.encodedValue = builder.toString();
} else if (type.equals(Vector.class)) {
Vector<?> vector = (Vector<?>) value;
Class<? extends Object> componentType = Object.class;
if (vector.size() > 0) {
componentType = vector.firstElement().getClass();
}
this.encodedType = VECTOR_OF + componentType.getSimpleName();
StringBuilder builder = new StringBuilder();
Vector<?> valueVector = (Vector<?>) value;
boolean useDelimiter = false;
for (Object val : valueVector) {
if (useDelimiter) {
builder.append(",");
} else {
useDelimiter = true;
}
builder.append(val);
}
this.encodedValue = builder.toString();
} else if (List.class.isAssignableFrom(type)) {
// Lists are encoded as Arrays...
List<?> list = (List<?>) value;
Class<?> componentType = Object.class;
if (list.size() > 0)
componentType = list.get(0).getClass();
this.encodedType = ARRAY_OF + componentType.getSimpleName();
StringBuilder builder = new StringBuilder();
boolean useDelimiter = false;
for (Object o : list) {
if (useDelimiter) {
builder.append(",");
} else {
useDelimiter = true;
}
builder.append(o);
}
this.encodedValue = builder.toString();
} else {
this.encodedType = (preservedBaseType == null) ? type.getSimpleName() : preservedBaseType;
this.encodedValue = value.toString();
}
}