GWT Editory

Referencia: gwt-editory

Gwt inherit: com.google.gwt.editor.Editor

GWT editory slúžia na jednoduchú manipuláciu s java objektmi (ako Beany, cez Rpc a podobne). Ich účelom je naplniť používateľské rozhranie s dátami z objektu a uložiť údaje z používateľského rozhrania späť do objektu.

Editor môže byť aj objekt ktorý nie je súčasťou používateľského rozhrania, pretože editory nie sú prepojené na používateľské rozhranie. Preto je možné používateľské rozhranie upraviť podľa potrieb (needitovateľné polia, neviditeľné polia a podobne, dynamické povoľovanie a skrývanie polí).

Editor môže byť akýkoľvek objekt ktorý implementuje rozhranie Editor<O>, kde O je typ editovaného objektu. Takýto editor môže obsahovať ďalšie pod-editory ktoré pracujú s poľami objektu O.


Príklad:

TextValue je objekt ktorý upravujeme:

public class TextValue {

    private String text;
private String value;

//Constructor, getters, setters
}

Pre úpravu tohto objektu vytvoríme editor:

public class TextValueEditor implements Editor<TextValue>{

protected TextBox text = new TextBox();

protected TextBox value = new TextBox();

}

V tomto editore upravujeme polia text a value osobitne. Pre zobrazenie v používateľskom rozhraní môžeme editor odvodiť z objektu Composite.

Editor sám o sebe nie je zviazaný s objektom, ten iba obsahuje polia ktoré sa zhodujú s poľami objektu. Pre zviazanie sa používa Driver. Driver je značkovacie rozhranie, pomocou ktorého GWT vygeneruje implementáciu práce s objektom:

interface TextValueDriver extends SimpleBeanEditorDriver<TextValue, TextValueEditor> {}   

Inštancia:

TextValueDriver driver = GWT.create(TextValueDriver.class);

Pomocou drivera pracujeme nasledovným spôsobom:

  1. Vytvorenie editora a drivera
  2. Inicializácia drivera driver.initialize(editor)
  3. Naplnenie editora údajmi z objektu driver.edit(textValue)
  4. Naplnenie objektu údajmi z editora driver.flush()

Medzitým môžeme akokoľvek meniť údaje v objekte ako aj v editore.


LeafValueEditor

V predošlom príklade sme používali TextBox, ten implementuje rozhranie LeafValueEditor<String> pomocou ktorého sa nastavuje a číta hodnota.  Rozhranie sa používa pre všetky objekty ktoré neobsahujú ďalšie pod-editory. Ide najme o editáciu základných objektov (String, int).

Príklad:

Chceme upravovať TextValue ako celok, pretože text je hodnota ktorú chceme zobrazovať používateľovi a value je interná hodnota ktorú odvodíme zo zobrazeného textu. Tieto hodnoty musia byť vzájomne konzistentné.

public class LeafTextValueEditor implements LeafValueEditor<TextValue> {

    private ChangeHandler changeHandler = new ChangeHandler() {

        @Override
public void onChange(ChangeEvent event) {
value = mapInputToValue(text.getText());
}
};

    private TextBox text = new TextBox();
private String value;

    public LeafTextValueEditor() {
text.addChangeHandler(changeHandler);
}

    @Override
public void setValue(TextValue value) {
if (value == null) {
this.text.setText(“”);
this.value = null;
}
else {
this.text.setText(value.getText());
this.value = value.getValue();
}
}

    @Override
public TextValue getValue() {
String input = text.getText();
value = mapInputToValue(input);
if (value == null) return null;
else return new TextValue(input, value);
}
}

Pre tento editor nevytvárame driver, pretože editor sa používa ako pod-editor iného editora. Logiku text a value hodnôt implementujeme vnútorne v editore tak aby text a value objektu boli konzistentné za akýchkoľvek okolností. Ak nevieme získať správnu hodnotu value, tak bude celý objekt TextValue null.

Advertisements

About Pipík Roman

I am lazy programmer
This entry was posted in GWT and tagged . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s