středa 9. listopadu 2011

Layouty

V projektu, jsem vytvořil několik layoutu, pro přihlašováni a kostru pro filtrovaní.
při vytvářeni layoutu jsem zavrhl klikací prostředí z důvodu nedokonalého zpracování, bohužel ani textový editor netrpí neduhy, občas se stává že se sám od sebe přepisuje obsah řádku, v tomto případě je potřeba soubor uložit, zavřít a opět otevřít, aby se mohlo normálně v práci pokračovat.

Instalace vyvojového prostředí

Při instalaci vývojového prostředí Eclipse + SDK + Plugin, jsem narazil na jeden problém. Při vytvoření projektu se mi čisty projekt vůbec nezkompiloval, docela dlouho jsem tento problém řešil bez zdárného výsledku. Nakonec jsem se rozhodl celé vývojové prostředí přeinstalovat. Po přeinstalaci se mi teprve podařilo zdárně zkompilovat projekt.

úterý 8. listopadu 2011

Notifikace a posílání zpáv

Od dnešního dne již umí carshare-service pracovat se zprávami mezi uživateli a systémem. Toto rozhraní umožňuje posílat zprávy mezi uživateli, případně mezi uživatelem a systémem (v takovém případě jednoduše nebude vyplněné pole "od").

Zároveň již lze jednoduše tyto zprávy filtrovat. Lze filtrovat množství zobrazených zpráv a od jakého uživatele se mají zprávy zobrazovat.

V budoucnu pak budou pravděpodobně tyto zprávy přihlášenému uživateli zobrazovány automaticky pomocí metody PUSH. Ale to je zatím ještě relativně daleko.
Praktická ukázka viz http://car-share.appspot.com/test-service.html.

sobota 5. listopadu 2011

Deserializace přijatých dat ...

Tento post je o tom jak využít anotaci @Deserializable (com.neptuo.service.io.annotation) ke zpracování dat získaných ze vstupního streamu a vytvoření instance požadovaného objektu. Pro tento příklad mějme následující třídu:


@Deserializable(name="app-info")
public class AppInfo {
    ...
    @Deserializable(name="app-name")
    public void setAppName(String appName) {
        ...
    }
    @Deserializable(name="hello")
    public void setHello(String hello) {
        ...
    }
    @Deserializable(name="version")
    public void setVersion(String version) {
        ...
    }
}

Malá poznámka, načítaná třída musí bez parametrický konstruktor. Ze vstupního streamu získáme následující XML soubor:

<carshare generated="1320506363699">
<app-info>
<hello>Hello there, from car-share service!</hello>
<app-name>car-share</app-name>
<version>alfa</version>
</app-info>
</carshare>

Pro vytvoření instance AppInfo nejprve musíme definovat AutoDeserializerItem, což je jednoduchá třída, která doplňuje informace získané příme ze třídy AppInfo

AutoDeserializerItem appInfoItem = new AutoDeserializerItem(
    "app-info", 
    null,    
    AppInfo.class
);

První parametr kořenový element, od kterého se má deserializer snažit načítat daný tip (pro složitější vstupní data je pak možné načítat různé objekty z různých částí vstupu). Druhý parametr je pak třída pro načítání kolencí (v tomto případě se nevyužívá), poslední je pak třída, která se má načítat (AppInfo.class).

AutoDeserializer
    .factory(new XmlDeserializer(), input, appInfoItem)
    .deserialize();

Tento řádek pak zpracuje vstupní stream (parametr input) za pooužití XmlDeserializeru (první parametr). Načtenou instanci pak lze získat pomocí

appInfoItem.getItem();

Která vrací načtený objekt (nutno přetypovat na požadovaný objekt). Pokud by jsme chtěli načátat kolekci objektů, pak nám načtenou kolekci vrátí:

appInfoItem.getCollection();

Tolik ke zpracování vstupu.

pátek 4. listopadu 2011

O sdílených třídách a IO operacích

V projektu carshare-domain, package com.carshare.domain.dto jsou tři třídy

  • User - veškeré informace o uživateli
  • UserLogin - jednoduchá třída pro přihlášení uživatele
  • UserUpdate - rozšiření User o heslo (protože standartně nechceme posílat heslo společně s info o uživateli, nicméně (např. pro registraci uživatele, změnu údajů) heslo zadat potřebujeme
Jsou to třídy se kterými pracuje carshare-service, třídy které očekává a které vrací v odpovědích. Settry a gettry jsou oanotovány anotacemi @Deserializable a @Serializable. Ty slouží serializerům a deserializerům, aby věděli co a jak kam zapisovat a číst při serializaci/deserializaci objektů.

Pro serializaci jedné instance z těchto tříd do XML pak stačí:

XmlSerializer serializer = new XmlSerializer();
AutoSerializer.factory(entity, serializer).serialize();
String output = serializer.getResult();

kde entity, je instance kterou chceme serializovat. Pro serializaci kolekce objektů pak:

XmlSerializer serializer = new XmlSerializer();
AutoSerializer.factory(rootName, recordName, entities, serializer).serialize();
String output = serializer.getResult();

kde rootName je název XML elementu, který bude celou kolekci obalovat, recordName je název XML elementu, který bude obalovat jednu instanci (pokud zůstane nevyplněny-nebo null-pak se použije název elementu definovaný nad třídy pomocí @Serializable) a entities je kolekce entit k serializaci.

Všechny výše zmíněné třídy pro IO práci jsou v knihovně neptuo-service, která je v svn v references/lib. Stačí ji tedy nalinkovat do projektu. Nemá zrovna moc valnou dokumentaci, na to prostě čas nebyl, nicméně tohle by mělo fungovat bez problémů a když ne, tak se ptejte.

Webový klient

Tak mám nastavené prostředí - eclipse (mimochodem instalace pluginu nešla tak snadno, jak jsem čekala). Pak jsem si vyzkoušela ukázkový projekt pro práci s gwt (http://code.google.com/intl/cs-CZ/webtoolkit/doc/latest/tutorial/gettingstarted.html) a je založený zatím prázdný projekt pro CarShare (už je i v svn).

čtvrtek 3. listopadu 2011

carshare-service - První featurky :)

Náš projekt carshare-service se opět o kousek posunul. Nyní již umí registrovat nové uživatele, přihlašovat a odhlašovat je. Záveň si také udržuje historii přihlášení. 

Více informací jsem vložil do videa, které jsem k této přiležitosti nahrál ... bohužel se trochu peru s tím, kam ho nahrát, aby na mě nevyskakovali jakési hlášky, o tom že to nejde! ... Tak ho zatím přiložím alespoň jako přílohu a snad na to časem přijdu.

středa 2. listopadu 2011

úterý 1. listopadu 2011

carshare-service

Na adrese http://car-share.appspot.com/ je k již vystavena alfa verze servisní části aplikace. Tato webová aplikace bude poskytovat data jak webovému klientovi, tak androidímu. Aplikace je hostována na GAE, pro persistentní vrstvu bude použito JDO.

Aplikační vrstvu realizuje framework neptuo-service (ukázka na adrese http://car-share.appspot.com/service/info). Tato služba umí generovat, jak xml, tak json, dle hlaviček předaných z požadavku. Ukázka třídy, který implementuje tuto ukázkovou službičku je zde:


@ServiceClass(url="/info")
public class InfoService {


    @ServiceMethod(transactional=false, httpMethod=HttpMethodType.GET)
    public EntityResult<AppInfo> test() {
        return new EntityResult<AppInfo>(new AppInfo("alfa", "car-share", "Hello there, from car-share service!"));
    }
}


Jak je vidět, implementace je velice jednoduchá. Implementace této části aplikace bude pokračovat transformací   konceptuálního modelu do JDO-kompatibilního doménového modelu.