Cocomonio


Blog


GAS3 O Gerador do GraniteDS

By ffrizzo November 1st, 2011 Uncategorized No Comments

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 EclipseAnt e  FlexMojos. Também iremos explicar sobre os templates utilizados e sobre as diferentes fábricas que geram as classes AS3.



Post Comment


Your email address will not be published. Required fields are marked *