Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Gwt frameworky GXT + UJORM
1. GWT Frameworky
Ujorm 1.20 v prostředí Ext GWT
(Sencha)
Google User Groups, Praha 9.6.2011, Autor: Pavel Ponec
2. Úvod
Ujorm je "lehko-tonážní" framework se silnou typovou
kontrolou postavenou na Java <generikách>, který nabízí
(prostřednictvím svých modulů) služby:
● perzitence objektů do relačích databází (ORM služby)
● integrace s Ext GWT projektu Sencha (dále jen GXT)
● API + serializace objektů do/z textových formátů
Ujorm pracuje s objekty implementující 2 interface:
Ujo + Property
3. Motivace
Proč použít Ujorm ?
● výčet Properties (podoba s Enum + PropertyDescriptor)
○ překlepy odhalí kompilátor
○ dostupná meta-data
○ vhodné pro data binding
● nadstandardní typová kontrola
● bezpečný refactoring zdrojového kódu
● snadná tvorba generických komponent
● používání UjoProperty je zábavné :)
Úspora zdrojů:
● úspora času
● úspora finančních nákladů
● vyšší produktivita
4. Ujorm pro GXT
Dva moduly:
● Ujo-gxt-core
○ nabzí klientskou verzi UJO objektů (Cujo)
○ cache Property vlastností (mandatory, length)
○ podpora pro mapování klientských UJO objektů na serverové
○ nástroj pro automatizovanou konverzi klientských objektů
○ na serverové (doménové objekty, db dotazy)
5. Ujorm pro GXT
Dva moduly:
● Ujo-gxt-core
○ nabzí klientskou verzi UJO objektů (Cujo)
○ cache Property vlastností (mandatory, length)
○ podpora pro mapování klientských UJO objektů na serverové
○ nástroj pro automatizovanou konverzi klientských objektů
○ na serverové (doménové objekty, db dotazy)
● Ujo-gxt-crud
○ grafické komponenty podporující DB operace:
■ Create
■ Read
■ Update
■ Delete
6. Class model Ujo + Property
Instance Ujo
● obsahuje data
● nabízí seznam Properties
● může splňovat specifikaci
JavaBeans (ale nemusí)
7. Class model Ujo + Property
Instance Ujo
...
Instance UjoProperty
● poskytuje meta-data
○ název a
○ typ property
○ defaultní hodnotu
○ defaultní směr řazení
● nabízí řetězení s jinou UjoProperty
● a různé užitečné metody
● včetně metod pro čtení a zápis
● statická neměnná instance
(immutable object)
8. GXT: ModelData
ModelData je datový model grafických GXT komponent
- jedna instance reprezentuje například: jeden řádek tabulky
9. GXT: ModelData
ModelData je datový model grafických GXT komponent
- příkladem použití je jeden řádek tabulky
Ujorm: Cujo
Cujo je klientská verze rozhraní Ujo pro GXT
Cujo je potomkem ModelData !
10. Příklad implementace Cujo/Ujo
Ukázka implementace Cujo pomocí abstraktní třídy:
public class Employee extends AbstractCujo implements Serializable {
/** Property List */
private static final CujoPropertyList pList = list(Employee.class);
@Override public CujoPropertyList readProperties() {
return pList;
}
11. Příklad implementace Cujo/Ujo
Ukázka implementace Cujo pomocí abstraktní třídy:
public class Employee extends AbstractCujo implements Serializable {
/** Property List */
private static final CujoPropertyList pList = list(Employee.class);
/** Unique key */
public static final CujoProperty<Employee, Long> ID = pList.newProperty("id", Long.class);
/** User name */
public static final CujoProperty<Employee, String> NAME
= pList.newProperty("name", String.class);
/** Hourly wage */
public static final CujoProperty<Employee, Double> WAGE = pList.newPropertyDef("wage", 0.0);
/** A reference to Company */
public static final CujoProperty<Employee, Company> COMPANY
= pList.newProperty("company", Company.class);
@Override public CujoPropertyList readProperties() {
return pList;
}
12. Ukázka práce s daty
Jak zapsat hodnoty ?
GXT: ModelData
ModelData person = new ModelData();
// Write:
person.set("ID", 7L);
person.set("NAME", "Pavel");
person.set("WAGE", 20.00);
person.set("COMPANY", new Company());
13. Ukázka práce s daty
Jak zapsat hodnoty ?
GXT: ModelData Ujorm: Cujo
import static Employee.*
import static Company.CITY;
ModelData person = new ModelData(); Employee person = new Employee();
// Write: // Write:
person.set("ID", 7L); person.set(ID, 7L);
person.set("NAME", "Pavel"); person.set(NAME, "Pavel");
person.set("WAGE", 20.00); person.set(WAGE, 20.00);
person.set("COMPANY", new Company()); person.set(COMPANY, new Company());
14. Ukázka práce s daty
Jak načíst data ?
GXT: ModelData Ujorm: Cujo
import static Employee.*
import static Company.CITY;
ModelData person = new ModelData(); Employee person = new Employee();
// Write: // Write:
person.set("ID", 7L); person.set(ID, 7L);
person.set("NAME", "Pavel"); person.set(NAME, "Pavel");
person.set("WAGE", 20.00); person.set(WAGE, 20.00);
person.set("COMPANY", new Company()); person.set(COMPANY, new Company());
// Read:
Ujorm:
Long id = person.get("ID");
String name = person.get("NAME");
double wage = person.get("WAGE");
Company address = person.get("COMPANY");
15. Ukázka práce s daty
Jak načíst data ?
GXT: ModelData Ujorm: Cujo
import static Employee.*
import static Company.CITY;
ModelData person = new ModelData(); Employee person = new Employee();
// Write: // Write:
person.set("ID", 7L); person.set(ID, 7L);
person.set("NAME", "Pavel"); person.set(NAME, "Pavel");
person.set("WAGE", 20.00); person.set(WAGE, 20.00);
person.set("COMPANY", new Company()); person.set(COMPANY, new Company());
// Read: // Read:
Long id = person.get("ID"); Long id = person.get(ID);
String name = person.get("NAME"); String name = person.get(NAME);
double wage = person.get("WAGE"); double wage = person.get(WAGE);
Company address = person.get("COMPANY"); Company address = person.get(COMPANY);
16. Ukázka práce s daty
Jak na atributy relačních objektů ?
GXT: ModelData Ujorm: Cujo
import static Employee.*
import static Company.CITY;
ModelData person = new ModelData(); Employee person = new Employee();
// Write: // Write:
person.set("ID", 7L); person.set(ID, 7L);
person.set("NAME", "Pavel"); person.set(NAME, "Pavel");
person.set("WAGE", 20.00); person.set(WAGE, 20.00);
person.set("COMPANY", new Company()); person.set(COMPANY, new Company());
person.set("COMPANY.CITY", "Prague"); // No
// Read: // Read:
Long id = person.get("ID"); Long id = person.get(ID);
String name = person.get("NAME"); String name = person.get(NAME);
double wage = person.get("WAGE"); double wage = person.get(WAGE);
Company address = person.get("COMPANY"); Company address = person.get(COMPANY);
String cn = person.get("COMPANY.CITY"); // No
17. Ukázka práce s daty
Jak na atributy relačních objektů ?
GXT: ModelData Ujorm: Cujo
import static Employee.*
import static Company.CITY;
ModelData person = new ModelData(); Employee person = new Employee();
// Write: // Write:
person.set("ID", 7L); person.set(ID, 7L);
person.set("NAME", "Pavel"); person.set(NAME, "Pavel");
person.set("WAGE", 20.00); person.set(WAGE, 20.00);
person.set("COMPANY", new Company()); person.set(COMPANY, new Company());
person.set("COMPANY.CITY", "Prague"); // No person.set(COMPANY.add(CITY), "Prague";
// Read: // Read:
Long id = person.get("ID"); Long id = person.get(ID);
String name = person.get("NAME"); String name = person.get(NAME);
double wage = person.get("WAGE"); double wage = person.get(WAGE);
Company address = person.get("COMPANY"); Company address = person.get(COMPANY);
String cn = person.get("COMPANY.CITY"); // No String cn = person.get(COMPANY.add(CITY);
18. Kopie hodnot
Jak přepsat hodnoty
z jednoho objektu do druhého
?
19. Kopie hodnot
Jak přepsat hodnoty do druhého objektu ?
ModelData (GXT):
ModelData emplA = findEmployee();
ModelData emplB = new ModelData();
for (String p : emplA.getPropertyNames())
{
Object o = emplA.get(p);
emplB.set(p, o);
}
GWT.log("Employee B: " + emplB);
20. Kopie hodnot
Jak přepsat hodnoty do druhého objektu ?
ModelData (GXT): Cujo (Ujorm):
ModelData emplA = findEmployee(); Cujo emplA = findEmployee();
ModelData emplB = new ModelData(); Cujo emplB = employee1.createInstance();
for (String p : emplA.getPropertyNames()) for (CujoProperty p : emplA.readProperties())
{ {
Object o = emplA.get(p); p.copy(emplA, emplB);
emplB.set(p, o); }
}
GWT.log("Employee B: " + emplB); GWT.log("Employee B: " + emplB);
27. Criterion v databázovém dotazu
Jak sestavit DB dotaz pro GRID na straně klienta ?
import static CEmployee.*;
CujoProperty[] gridColumns = new CujoProperty[]
{ NAME
, WAGE
, COMPANY.add(CCompany.NAME)
, COMPANY.add(CCompany.CITY)
};
CQuery<CEmployee> query = CQuery.newInstance(CEmployee.class, gridColumns);
query.setCriterion(CCriterion.where(COMPANY.add(CCompany.CITY), "Prague"));
grid = new Grid<CUJO>(createStore(query) query.getColumnModel();