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
- dokumentaci Ujorm-Core
- dokumentaci Ujorm-ORM
- home page
- popis změn
Žádné komentáře:
Okomentovat