ChangeSummary summary = changedObject.getDataGraph().getChangeSummary();
Iterator i = getChangedFields(mapping, summary, changedObject).iterator();
while (i.hasNext()) {
Property property = (Property) i.next();
Column c = t.getColumnByPropertyName(property.getName());
if ((c != null) && (c.isCollision() || c.isPrimaryKey())) {
// get rid of comma if OCC or PK is last field
if (!i.hasNext()) {
statement.delete(statement.length() - 2, statement.length());
}
} else {
updatedProperties.add(property);
statement.append(c == null ? property.getName() : c.getColumnName());
statement.append(" = ?");
if (i.hasNext()) {
statement.append(", ");
}
}
}
Column c = t.getManagedColumn();
if (c != null) {
statement.append(", ");
statement.append(c.getColumnName());
statement.append(" = ?");
managedProperties.add(changedObject.getProperty(t.getManagedColumnPropertyName()));
}
statement.append(" where ");
Iterator names = t.getPrimaryKeyNames().iterator();
Iterator pkProperties = t.getPrimaryKeyProperties().iterator();
while (names.hasNext() && pkProperties.hasNext()) {
String name = (String) names.next();
String property = (String) pkProperties.next();
statement.append(name);
statement.append(" = ?");
if (names.hasNext() && pkProperties.hasNext()) {
statement.append(" and ");
}
whereClauseProperties.add(type.getProperty(property));
}
if (t.getCollisionColumn() != null) {
statement.append(" and ");
statement.append(t.getCollisionColumn().getColumnName());
statement.append(" = ?");
whereClauseProperties.add(type.getProperty(t.getCollisionColumnPropertyName()));
}
UpdateCommandImpl updateCommand;
if (t.getCollisionColumn() != null) {
updateCommand = new OptimisticWriteCommandImpl(statement.toString());
} else {
updateCommand = new UpdateCommandImpl(statement.toString());
}
int idx = 1;
Iterator params = updatedProperties.iterator();
while (params.hasNext()) {
Property p = (Property) params.next();
updateCommand.addParameter(createParameter(t, p, idx++));
}
params = managedProperties.iterator();
while (params.hasNext()) {
Property p = (Property) params.next();
updateCommand.addParameter(createManagedParameter(t, p, idx++));
}
params = whereClauseProperties.iterator();
while (params.hasNext()) {
Property p = (Property) params.next();
updateCommand.addParameter(createParameter(t, p, idx++));
}
if (this.logger.isDebugEnabled()) {
this.logger.debug(statement.toString());