After taking a look to this problem I suggest the following solution:
Since the second add method signature is public the red line should be moved from the first method to the second one.
Thank you very much!!!
Code:
public ValueModel add(String formProperty, ValueModel valueModel) {
// XXX: this assert should be active but it breaks the
// code in SwingBindingFactory#createBoundListModel
// Assert.isTrue(!hasValueModel(formProperty), "A property called '" +
// formProperty + "' already exists.");
if (valueModel instanceof BufferedValueModel) {
((BufferedValueModel) valueModel).setCommitTrigger(commitTrigger);
}
PropertyMetadataAccessStrategy metadataAccessStrategy = getFormObjectPropertyAccessStrategy()
.getMetadataAccessStrategy();
FormModelMediatingValueModel mediatingValueModel = new FormModelMediatingValueModel(valueModel,
metadataAccessStrategy.isWriteable(formProperty));
mediatingValueModels.put(formProperty, mediatingValueModel);
FieldMetadata metadata = new DefaultFieldMetadata(this, mediatingValueModel, metadataAccessStrategy
.getPropertyType(formProperty), !metadataAccessStrategy.isWriteable(formProperty),
metadataAccessStrategy.getAllUserMetadata(formProperty));
metadata.addPropertyChangeListener(FieldMetadata.DIRTY_PROPERTY,childStateChangeHandler);
return add(formProperty, mediatingValueModel, metadata);
}
/**
* {@inheritDoc}
*/
public ValueModel add(String propertyName, ValueModel valueModel, FieldMetadata metadata) {
// Here
fieldMetadata.put(propertyName, metadata);
valueModel = preProcessNewValueModel(propertyName, valueModel);
propertyValueModels.put(propertyName, valueModel);
if (logger.isDebugEnabled()) {
logger.debug("Registering '" + propertyName + "' form property, property value model=" + valueModel);
}
postProcessNewValueModel(propertyName, valueModel);
return valueModel;
}