SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
GWT Frameworky 


 Ujorm 1.20 v prostředí Ext GWT
           (Sencha)




 Google User Groups, Praha 9.6.2011, Autor: Pavel Ponec
Ú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
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
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)
 
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
Class model Ujo + Property
Instance Ujo
  ● obsahuje data
  ● nabízí seznam Properties
  ● může splňovat specifikaci 
JavaBeans (ale nemusí)
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)
GXT: ModelData
ModelData je datový model grafických GXT komponent  
 - jedna instance reprezentuje například: jeden řádek tabulky
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 !
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;
      }
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;
      }
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());


 
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());


 
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");

 
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);

 
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 
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);
Kopie hodnot


           Jak přepsat hodnoty 
      z jednoho objektu do druhého 




 
                 ?
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);
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);
Obnova defaultních hodnot


        Jak obnovit defaultní hodnoty 
                 v objektu 
                       




     
                    ?
Obnova defaultních hodnot
Jak 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);
Obnova defaultních hodnot
Jak 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);
Obnova defaultních hodnot
Jak 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);
Criterion
Test 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);
 
 
 
Mapování klientských objektů

Serverová strana: Ujo   Klientská strana: Cujo
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();
Referenční aplikace Ujorm:
  ● eCall
  ● ÚZEI 
  ● Inspectime (funkční demo: http://inspectime.com)
Dotazy 
    

  ?
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

Más contenido relacionado

Destacado

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Destacado (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
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);
  • 21. Obnova defaultních hodnot Jak obnovit defaultní hodnoty  v objektu      ?
  • 22. Obnova defaultních hodnot Jak 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. Obnova defaultních hodnot Jak 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. Obnova defaultních hodnot Jak 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. Criterion Test 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. Mapování klientských objektů Serverová strana: Ujo Klientská strana: Cujo
  • 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();
  • 28. Referenční aplikace Ujorm: ● eCall ● ÚZEI  ● Inspectime (funkční demo: http://inspectime.com)
  • 29. Dotazy    ?
  • 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