public void setElementList(Array_Of_ListElement<ListElement> les) {
// TF:8/8/07:Made a shallow clone in case there is a really big object attached to the list element
Array_Of_ListElement<ListElement> clonedList = CloneHelper.clone(les, false);
Object currentValue = this.list.getValue();
ListElement valueToReselect = null;
if (currentValue instanceof ListElement && clonedList != null && this.list.getSelectionHolder() instanceof TypeAwareValueModel) {
TypeAwareValueModel tavm = (TypeAwareValueModel)this.list.getSelectionHolder();
// We need to find an item in the new list which is the same as an item in the old list,
// depending on the type being considered. For example, if the list is mapped to an int,
// we need to find an element in the new list with the same IntegerValue.
Class<?> clazz = tavm.getValueType();
ListElement currentSelection = (ListElement)currentValue;
for (ListElement item : clonedList) {
if (clazz.equals(Integer.TYPE) ||
clazz.equals(Short.TYPE) ||
NumericData.class.isAssignableFrom(clazz) ||
Number.class.isAssignableFrom(clazz)) {
if (item.getIntegerValue() == currentSelection.getIntegerValue()) {
valueToReselect = item;
break;
}
}
else if (String.class.isAssignableFrom(clazz) || TextData.class.isAssignableFrom(clazz) && currentSelection.getTextValue() != null) {
if (currentSelection.getTextValue().equals(item.getTextValue())) {
valueToReselect = item;
break;
}
}
else {
if (currentSelection.getObjectValue() != null && currentSelection.getObjectValue() == item.getObjectValue()) {
valueToReselect = item;
break;
}
}
}