2012-10-23

Ujorm verze 1.30


Po delší přestávce byla uvolněna verze Ujorm 1.30, která obsahuje několik důležitých změn v API, kde na prvním místě je třeba zmínit přejmenováni původního interface UjoProperty za nový název Key. Ten původní interface zůstal zachovaný jako @Deprecated, názvy implementačních tříd zůstávají. Důvody byly následující:
  • původní název UjoProperty byl trochu zavádějící a pro jeho neměnnou vlastnost a tak občas bylo obtížnější vysvětlit jeho význam. Nový název vychází z běžného pojmenování parametrů interface java.util.Map .
  • původní název byl dlouhý a tím hůře čitelný ve zdrojovém kódu
  • v poslední době vzniklo několik nových tříd, které se od názvu klíče (Property) odvíjí a bylo užitečné toto rozhodnutí urychlit, jedná se konkrétně o třídy KeyRing a KeyFactory.

Nový KeyRing slouží jako serializovatelná kolekce klíčů - protože klíče samy o sobě serializovatelné být nemohou - přišly by totiž o vlastnost unikátní instance v rámci class-loaderlu. Potřeba serializovat klíče může být v některých případech nezbytná, konkrétní příklad využití je ve Wicket frameworku.

Další nová třída třída se jmenuje KeyFactory a je určena k výrobě objektů typu Key. Výhodou továrny je, že ji lze použít i pro statické konstanty nějakého Interface. Užitečnou vlastností může být automatický tvorba názvu klíčů podle názvu jeho fieldu s volitelnou možností konverze jména na camel-case. Nově také není potřeba při tvorbě klíče posílat jeho datový typ parametrem, framework umí tento atributy získat z meta-modelu fieldů v době uzamčení továrny (případně při prvním načtení klíčů). Každý takový klíč obsahuje teď nový atribut své doménové třídy. Ukázka použití:

public class Person extends AbstractUjo {
  private static final KeyFactory f = newFactory(Person.class);
   
  public static final Key<Person,String > NAME = f.newKey();
  public static final Key<Person,Boolean> MALE = f.newKey();
  public static final Key<Person,Double > CASH = f.newKey();
   
  @Override public KeyList<?> readKeys() {
    return f.getKeys();
  }
}


Framework nabízí nový, zjednodušený klíč zvaný WeakKey, který neobsahuje doménový generický parametr. Jeho využití se nabízí jako náhrada konstant pro práci s objekty typu Map, List, případně pro čtení parametrů z objektu HttpRequest, kde provádí konverzi na požadovaný typ. Instance se pak vytváří pomocí WeakKeyFactory.

Framework je možné připojit do Maven projektu pomocí závislosti:

<dependency>
    <groupId>org.ujorm</groupId>
    <artifactId>ujo-core</artifactId>
    <version>1.30</version>
</dependency>


a pro případ využití ORM:

<dependency>
    <groupId>org.ujorm</groupId>
    <artifactId>ujo-orm</artifactId>
    <version>1.30</version>
</dependency>



Pro použití UJO objektů ve frameworku Wicket bude potřebná implementace třídy KeyModel, která je analogií ke standardní implementaci Wicket třídy PropertyModel. Třídu je možné získat pomocí závislosti:

<dependency>
    <groupId>org.ujorm</groupId>
    <artifactId>ujo-wicket/artifactId>
    <version>1.30</version>
</dependency>


Tento modul neobsahuje rozsáhlé služby, přesto přikládám pro inspiraci vytvoření jednoduché tabulky:

 List<ICellPopulator> columns = KeyPopulator.list
    ( Employee.ID
    , Employee.FIRSTNAME
    , Employee.LASTNAME
    , Employee.ADDRESS.add(Address.CITY)
    );

 final WebMarkupContainer table = new WebMarkupContainer("table");
 final DataGridView grid = new DataGridView("gridPanel", columns,

       new  InnerPeopleProvicer());
 table.setOutputMarkupId(true);
 grid.setItemsPerPage(20);
 add(table);
 table.add(grid);
 add(new AjaxPagingNavigator("tableNavigator", grid));


Za významnější změny API se všem uživatelům frameworku omlouvám, změny však byly nezbytné pro další rozvoj této knihovny.

V případě zájmu lze najít více informací najít v

Žádné komentáře: