O GAS3 é um poderoso gerador de classes AS3 a partir de suas entidades java. Vou começar a explicar o GAS3 antes mesmo da configuração do GraniteDS, isto porque ele não obriga você a utilizar o GraniteDS. O GAS3 cria duas classes AS3 para uma classe JAVA. Vamos a um simples exemplo para a seguinte classe java.
package org.test;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Welcome implements Serializable {
private static final long serialVersionUID = 1L;
@Id @GeneratedValue
private Integer id;
@Basic
private String name;
public Welcome() {
}
public Welcome(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Teremos as seguintes classes AS3
package org.test {
[Bindable]
[RemoteClass(alias="org.test.Welcome")]
public class Welcome extends WelcomeBase {
}
}
e
package org.test {
import flash.utils.IDataInput;
import flash.utils.IDataOutput;
import flash.utils.IExternalizable;
import org.granite.collections.IPersistentCollection;
import org.granite.meta;
use namespace meta;
[Bindable]
public class WelcomeBase implements IExternalizable {
private var __initialized:Boolean = true;
private var __detachedState:String = null;
private var _id:Number;
private var _name:String;
meta function isInitialized(name:String = null):Boolean {
if (!name)
return __initialized;
var property:* = this[name];
return (
(!(property is Welcome) || (property as Welcome).meta::isInitialized()) &&
(!(property is IPersistentCollection) ||
(property as IPersistentCollection).isInitialized()));
}
public function get id():Number {
return _id;
}
public function set name(value:String):void {
_name = value;
}
public function get name():String {
return _name;
}
public function readExternal(input:IDataInput):void {
__initialized = input.readObject() as Boolean;
__detachedState = input.readObject() as String;
if (meta::isInitialized()) {
_id = function(o:*):Number {
return (o is Number ? o as Number : Number.NaN) } (input.readObject());
_name = input.readObject() as String;
}else {
_id = function(o:*):Number {
return (o is Number ? o as Number : Number.NaN) } (input.readObject());
}
}
public function writeExternal(output:IDataOutput):void {
output.writeObject(__initialized);
output.writeObject(__detachedState);
if (meta::isInitialized()) {
output.writeObject(_id);
output.writeObject(_name);
}else {
output.writeObject(_id);
}
}
}
}
O GAS3 gera desta forma para que você possa alterar o arquivo gerado sem se preocupar em perder o que fez em futuras alterações no java e recriação das classes. Sempre que necessário altere a classe principal, o GAS3 só ira gerar ela na primeira vez. Nas próximas gerações ele irá alterar somente a classe XxxBase. O GAS3 também permite que sejam alterados os templates para atender ás suas necessidades. Além das entidades java também podemos usar o GAS3 para gerar as classes de serviço no Flex, o que pode facilitar bastante no desenvolvimento. Nos próximos posts vamos demostrar como utilizar o GAS3 integrado com o Eclipse, Ant e FlexMojos. Também iremos explicar sobre os templates utilizados e sobre as diferentes fábricas que geram as classes AS3.