}
@Override
protected TagsComponent doBindControl() {
final ValueModel tagsModel = getFormModel().getValueModel( formPropertyPath + ".tags", List.class );
final TagSet copy = new TagSet( "copy" );
final PropertyChangeListener changeListener = new PropertyChangeListener() {
@Override
public void propertyChange( PropertyChangeEvent evt ) {
if ( PROPERTY_VALUE.equals( evt.getPropertyName() ) ) {
copy.setTags( ( List<? extends Tag> ) tagsModel.getValue() );
}
}
};
tagsModel.addValueChangeListener( changeListener );
copy.addTagChangeListener( new TagChangeListener() {
@Override
public void tagChanged( @NotNull TagChangeEvent event ) {
tagsModel.setValueSilently( copy.getTags(), changeListener );
}
} );
TagsComponentModel model = new AbstractTagsComponentModel( tagProvider ) {
@Override
public void selectTag( @NotNull Tag tag ) {
copy.addTag( tag );
}
@Override
public void unselectTag( @NotNull Tag tag ) {
copy.removeTag( tag );
}
@NotNull
@Override
public TagObservable getSelectedTags() {