Tenho um componente que permite o usuario escolher o seu valor digitando em um textfield ou escolhendo em um dialog com uma lista de valores.
Esse componente possui duas bounded properties, type e status. Onde type é o valor escolhido pelo usuario e status é o resultado da validação disso.
Pode parecer estranho a validação estar no mesmo componente, mas como tenho dois métodos de entrada gostaria de deixar isso transparente aos usuarios do componente.
Tenho +/- o seguinte:
private void setPackageInternal(IPackageFragment packageFragment) {
IPackageFragment old = this.packageFragment;
this.packageFragment = packageFragment;
support.firePropertyChange(PACKAGE_FRAGMENT, old, packageFragment);
}
protected void inputTextChanged(String newValue) {
IStatus status = validatePackageName(newValue);
setStatus(status);
if (!status.matches(IStatus.ERROR))
setPackageFragment(findPackage(newValue));
else
setPackageInternal(null);
}
public void setPackageFragment(IPackageFragment packageFragment) {
setPackageInternal(packageFragment);
String txt = packageFragment == null ? "" : packageFragment
.getElementName();
if (!txt.equals(getText()))
setText(txt);
}
O problema aqui é quando o usuario digita algo errado, se eu simplesmente chamar setPackageFragment(null) vai apagar o texto já digitado; e se no setPackageFragment eu não atualizar o texto quando o componente for manipulado programáticamente, a UI vai ficar inconsistente.
Notem que o papel de setPackageInternal é atualizar o valor e gerar eventos.
Alguem tem um idéia melhor para resolver esse empasse? Por que a minha solução cheira um pouco a peixe podre.