protected void initialize(Class type,
Object oldInstance,
Object newInstance,
Encoder out) {
java.util.List oldO = (java.util.List)oldInstance;
java.util.List newO = (java.util.List)newInstance;
int oldSize = oldO.size();
int newSize = (newO == null) ? 0 : newO.size();
if (oldSize < newSize) {
invokeStatement(oldInstance, "clear", new Object[]{}, out);
newSize = 0;
}
for (int i = 0; i < newSize; i++) {
Object index = new Integer(i);
Expression oldGetExp = new Expression(oldInstance, "get", new Object[]{index});
Expression newGetExp = new Expression(newInstance, "get", new Object[]{index});
try {
Object oldValue = oldGetExp.getValue();
Object newValue = newGetExp.getValue();
out.writeExpression(oldGetExp);
if (!MetaData.equals(newValue, out.get(oldValue))) {
invokeStatement(oldInstance, "set", new Object[]{index, oldValue}, out);
}
}
catch (Exception e) {
out.getExceptionListener().exceptionThrown(e);
}
}
for (int i = newSize; i < oldSize; i++) {
invokeStatement(oldInstance, "add", new Object[]{oldO.get(i)}, out);
}
}
|