Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Gwt frameworky GXT + UJORM

806 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Gwt frameworky GXT + UJORM

  1. 1. GWT Frameworky  Ujorm 1.20 v prostředí Ext GWT (Sencha) Google User Groups, Praha 9.6.2011, Autor: Pavel Ponec
  2. 2. ÚvodUjorm je "lehko-tonážní" framework se silnou typovoukontrolou 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. 3. MotivaceProč 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. 4. Ujorm pro GXTDva 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. 5. Ujorm pro GXTDva 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. 6. Class model Ujo + PropertyInstance Ujo ● obsahuje data ● nabízí seznam Properties ● může splňovat specifikaci JavaBeans (ale nemusí)
  7. 7. Class model Ujo + PropertyInstance 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. 8. GXT: ModelDataModelData je datový model grafických GXT komponent   - jedna instance reprezentuje například: jeden řádek tabulky
  9. 9. GXT: ModelDataModelData je datový model grafických GXT komponent   - příkladem použití je jeden řádek tabulkyUjorm: CujoCujo je klientská verze rozhraní Ujo pro GXTCujo je potomkem ModelData !
  10. 10. Příklad implementace Cujo/UjoUká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. 11. Příklad implementace Cujo/UjoUká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. 12. Ukázka práce s datyJak 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. 13. Ukázka práce s datyJak 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. 14. Ukázka práce s datyJak 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. 15. Ukázka práce s datyJak 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. 16. Ukázka práce s datyJak 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. 17. Ukázka práce s datyJak 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. 18. Kopie hodnot Jak přepsat hodnoty  z jednoho objektu do druhého   ?
  19. 19. Kopie hodnotJak 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. 20. Kopie hodnotJak 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);
  21. 21. Obnova defaultních hodnot Jak obnovit defaultní hodnoty  v objektu      ?
  22. 22. Obnova defaultních hodnotJak obnovit defaultní hodnoty objektu ? ModelData (GXT):   ModelData employee = findEmployee();for (String p : employee1.getPropertyNames()) {     Object o = employee1.get(p);     p.set(p, null); // ??}GWT.log("Employee: " + employee);
  23. 23. Obnova defaultních hodnotJak obnovit defaultní hodnoty objektu ? ModelData (GXT):   ModelData employee = findEmployee();for (String p : employee1.getPropertyNames()) {     Object o = employee1.get(p);     p.set(p, null); // ??     p.set(p, getDefaultForProperty(p));}GWT.log("Employee: " + employee);
  24. 24. Obnova defaultních hodnotJak obnovit defaultní hodnoty objektu ? ModelData (GXT): Cujo (Ujorm):            ModelData employee = findEmployee(); Cujo employee = findEmployee();for (String p : employee1.getPropertyNames())  for (CujoProperty p : employee.readProperties()) { {     Object o = employee1.get(p);         p.set(p, p.getDefault());      p.set(p, null); // ??     p.set(p, getDefaultForProperty(p)); }}  GWT.log("Employee: " + employee); GWT.log("Employee: " + employee);
  25. 25. CriterionTest platnosti (validace) objektu v run-time ModelData (GXT): Cujo (Ujorm): import static org.ujorm.gxt.client.cquery.COperator.*; CCriterion<Employee> validWage, validStreet,validator; validWage = CCriterion.where(WAGE, GT, 10.0); validStreet = CCriterion.where(COMPANY.add(CITY), "Prague"); ? validator = validWage.or(validStreet); Employee employee = findEmployee(); boolean isValid = validator.evaluate(employee); GXT.log("Is valid: " + isValid + " for " + employee);   
  26. 26. Mapování klientských objektůServerová strana: Ujo Klientská strana: Cujo
  27. 27. Criterion v databázovém dotazuJak 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();
  28. 28. Referenční aplikace Ujorm: ● eCall ● ÚZEI  ● Inspectime (funkční demo: http://inspectime.com)
  29. 29. Dotazy    ?
  30. 30. GWT Frameworky: Ujorm Děkuji za pozornost Odkazy: ● Ujorm: http://ujorm.org ● Ext GWT: http://www.sencha.com/products/extgwt/ ● Referenční demo aplikace: http://inspectime.com ● Tato prezentace: http://ujorm.org/gxt ● Download: http://sourceforge.net/projects/ujoframework/ ● Maven repository: groupId=org.ujoframework,artifactId:ujo-* Google User Groups, Praha 9.6.2011, Autor: Pavel Ponec

×