logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Ago 9

Adobe AIR – FileSearch

Escrito por Erko Bridee em .NET, 1, 4, 6, AR, ActionScript 3, Actionscript, Actionscript3, Adobe, Adobe Air, Air, BI, Blazeds, Download, Flash Player, Flex, Flex 4, Google, IE, Java, MXML, O, RIA, Ria’s Geral, SVN, Swiz Framework, TAT, UI, XML, action, api, aplicacao, app, blog, class, código, exemplo, flash, flash builder, framework, html, ide, if, image, layout, map, mg, on, player, pt, quick, redeRIA, string @ 08 9th, 2010 | via http://blog.erkobridee.com | Sem comentários
Erko Bridee
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »



Segue um exemplo básico de aplicação de como localizar um determinado tipo de arquivo no computador. Este respectivo código pode ser evoluído e reaproveitado em algum aplicativo que precise ler conteúdo de um determinado diretório do computador.

Obs.: Essa aplicação foi baseada e adaptada do disponibilizado nesse link.


Ver código:

- FileSearch.mxml

- FileSearchCode.as

Download: FileSearch

SVN: http://erkobridee.googlecode.com/svn/trunk/adobe_air/FileSearch/



Veja também:

  • [Adobe AIR 2 : NativeProcess + Java] SimpleAirJava
  • [Flex & AIR] Swiz Framework + Presentation Model : Exemplo de Projeto
  • Adobe Flash Builder + Flex 4 + BlazeDS 4
  • ActionScript 3 + Flash Player 10+ : LocalFileHelper
  • ActionScript3 : QueryString



Jul 22

[Adobe AIR 2 : NativeProcess] projeto de exemplo : Windows Console

Escrito por Erko Bridee em .NET, 1, 2.0, 4, 6, AIR 2.0, AMF, AR, ActionScript 3, Actionscript, Adobe, Adobe Air, Air, Android, Arquitetura, BI, Blazeds, Curso, Download, Flash Player, Flex, Flex 4, Google, IE, Java, O, Partilha, RIA, Ria’s Geral, SVN, Swiz Framework, TAT, Tema, Teste, UI, action, api, blog, bug, class, err, exemplo, flash, flash builder, framework, ide, if, image, int, interface, internet, map, mg, on, player, problema, pt, redeRIA, window, windows @ 07 22nd, 2010 | via http://blog.erkobridee.com | Sem comentários
Erko Bridee
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »



Segue um outro post fruto dos meus estudos do recurso NativeProcess disponível a partir do Adobe AIR 2, neste caso irei compartilhar um client em AIR do conhecido cmd.exe

Download: WindowsConsole.zip

Projeto desenvolvido no Adobe Flash Builder


Sobre:

Este projeto de exemplo, trata-se nada mais, nada mesmo que um simples exemplo de uso do recurso NativeProcess do Adobe AIR 2.0 parar criar uma interface em AIR do cmd.exe do windows, executando os mesmos comandos que você poderia executar no cmd.exe.


Visão da arquitetura do aplicativo:

Comandos executados diretamente pelo aplicativo:

clear – limpa o textarea

exit – fecha o aplicativo


Bug conhecido:

encoding – não achei uma maneira de tratar o encoding retornado do aplicativo cmd.exe, com isto as acentuações ficam com problema


NOTA SOBRE O INSTALADOR DA APLICAÇÂO:

Utilizando o recurso NativeProcess do Adobe AIR 2.0, para que seu aplicativo use/consiga acessar a aplicação nativa, você DEVE criar um instalador nativo da sua aplicação, para então esta funcione. IMHO isto quebra totalmente a portabilidade da aplicação, tudo bem para rodar no Android, ou outro smatphone é até aceitável, mas para os Sistemas Operacionais não… ou então por que não me disponibiliza uma distribuição .jar da aplicação com suporte ao NativeProcess ?!

A imagem a seguir é a triste verdade atual para usar o NativeProcess do Adobe AIR 2.0:

Atualização 20100724 0228:

- Disponibilizei um teste [ Test_WindowsConsole.zip ] onde verifiquei que o que difere e possibilita uma aplicação Adobe AIR no Windows poder ou não utilizar o NativeProcess é o arquivo .exe de inicialização, como pode ser visto:

Basta descompactar o arquivo e executar a aplicação através dos .exe

- Inclui este projeto no SVN do Google Code [projeto]

efetuar check ou do projeto a partir da URL [acesso apenas para leitura]:

http://erkobridee.googlecode.com/svn/trunk/adobe_air/nativeprocess/WindowsConsole

Localmente utilizo o TortoiseSVN.



Veja também:

  • [Adobe AIR 2 : NativeProcess + Java] SimpleAirJava
  • [Flex & AIR] Swiz Framework + Presentation Model : Exemplo de Projeto
  • Adobe Flash Builder + Flex 4 + BlazeDS 4
  • ActionScript 3 + Flash Player 10+ : LocalFileHelper
  • [ Flerry ] Adobe AIR 2 conversando com Java local em AMF via NativeProcess



Jul 18

[Flex & AIR] Swiz Framework + Presentation Model : Exemplo de Projeto

Escrito por Erko Bridee em .NET, 1, 2009, 4, 6, AR, Adobe, Adobe Air, Air, Arquitetura, Blazeds, Desktop, Flex, Flex 3, Flex 4, Geral, IE, Java, O, Projetos, RIA, Ria’s Geral, Swiz Framework, TAT, Teste, Twitter, UI, UX, XP, action, api, aplicacao, app, blog, class, classe, classes, configuração, control, código, event, exemplo, facebook, flash, flash builder, framework, futuro, ide, if, image, map, mg, on, padrão, redeRIA, window, windows @ 07 18th, 2010 | via http://blog.erkobridee.com | Sem comentários
Erko Bridee
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »



Continuando meus estudos com Swiz Framework, depois de uma batalha de algumas horas para entender o fluxo e funcionamento eis que consegui montar um projeto na estrutura que pretendo utilizar como base inicia para futuros projetos em Flex 3, 4 e AIR

Agradecimento ao @BetoFiote que me ajudou nos testes e a debater a idéia e respectiva estrutura apresentada neste post.

Antes de mais nada, eis a Arquitetura da Aplicação utilizando o padrão Presentation Model:

 

Como a estrutura da aplicação é simples não houve uma necessidade justificável de ter uma camada de delegates, commands e afins. O objetivo é ter uma estrutura organizada com a menor quantidade possível de código/arquivos para facilitar a manutenção e expansão da aplicação.

A seguir a estrutura de pastas/pacotes utilizada:

Segue o detalhamento da estrutura acima:

config

Pacote onde ficam os arquivos de configuração do Swiz Framework

controller

event

model

entities

Pacote onde ficam os VO, classes de entidades em geral da aplicação

presentation

Pacote onde ficam as classes do Presentation Model

view


A seguir, a aplicação de exemplo usando esta estrutura…


Veja também:

  • [Flex & AIR] Swiz Framework – meus primeiros passos
  • [Adobe AIR 2 : NativeProcess] projeto de exemplo : Windows Console
  • Adobe Flash Builder + Flex 4 + BlazeDS 4
  • Facebook : Aplicação desktop
  • [Adobe AIR 2 : NativeProcess + Java] SimpleAirJava



Jul 14

[Flex & AIR] Swiz Framework – meus primeiros passos

Escrito por Erko Bridee em .NET, 1, 2009, 4, 6, AR, Access, Actionscript, Adobe, Adobe Air, Adobe Flex, Air, Artigo, BI, Blazeds, Desenvolvedor, Desenvolvimento, Desktop, Documentação, Download, Evento, Eventos, Flex, Flex 4, Flex4, Flexmania, Frameworks, FullScreen, IE, Java, Java Magazine, Links, Mac, Mate, O, Oracle, Palestra, Partilha, RIA, Ria’s Geral, Sun, Swiz Framework, TAT, Tema, Tree, Twitter, UI, UX, Ved, Vídeo, XP, action, api, aplicacao, app, as3, blog, class, classe, consultoria, control, código, código fonte, demo, desenvolvedores, empresas, event, exemplo, explicação, facebook, flash, fonte, for, framework, git, ide, if, int, jandersonfc, jandersonfc.com, loop, lógica, map, mg, mobile, on, oop, padrão, pt, redeRIA, screen, server, site, swf, tag, tv, wave, web @ 07 14th, 2010 | via http://blog.erkobridee.com | Sem comentários
Erko Bridee
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »



Há certo tempo estava pensando em deixar de utilizar o Mate Framework devido a uma falta de suporte mais robusta ao desenvolvimento de aplicações em Adobe AIR, então durante o FlexMania 2010, um uma palestra que abordava o tema Flex 4 – Desenvolvendo com Portabilidade(Web, Desktop e Mobile), pude ver um uso prático e fácil do Swiz Framework que me motivou a iniciar meus estudos e uso deste framework para as futuras aplicações que serão desenvolvidas. Neste post irei compartilhar o que até aqui ajuntei de informações…


Swiz Framework: Site | @SwizFramework | Wiki


Segundo a definição do Wiki temos:

O Swiz é um framework para Adobe Flex, Flash e AIR para fornecer um completo suporte ao desenvolvimento de soluções RIA. O Swiz te proporciona:

  • Inversão de Controle
  • Injeção de Dependência
  • Tratamento de eventos e mediação
  • Um cliclo de vida simples para métodos remotos assíncronos
  • Um framework desaclopado do código da sua aplicação


Indo na contramão da maioria dos frameworks para Flex, o Swiz:

  • Não impõem o uso de nenhum padrão JEE no código da sua aplicação
  • Não repete estrutura de pastas
  • Não te força utilizar nenhuma estrutura de código predefinida
  • Não te obriga a estender nenhuma classe específica do framework

O Swiz representa o melhor das práticas aprendidas dos melhores desenvolvedores de RIA de algumas das melhoras empresas de consultoria da indústria, possibilitando assim que o Swiz seja, simples, leve e extremamente produtivo.

De início um ponto que me chamou a atenção e me agradou muito no Swiz, a documentação de como utilizar o Swiz disponível na Wiki é simples, fácil e clara, a qual recomendo a leitura. Após uma leitura, veja este exemplo de uso do Swiz [CafeTownsend-Flex4].


Links antigos que auxiliam na compreensão do Swiz Framework:

Adobe TV – Introducing Swiz [19/08/2008]

Possui uma explicação ampla sobre o framework.

Christophe Coenraets – uma aplicação simples usando o Swiz Framework e BlazeDS

Exemplo bem interessante, onde um ponto a ser observado foi como foi definido o acesso ao RemoteObject através do Swiz.

Using Swiz Part 1: Initial Setup

Conjunto de post sobre o uso do Swiz, atentar aos links relacionados do post.

Swiz in 20 minutes

Neste vídeo podemos te uma visão clara do poder e facilidade de uso do Swiz Framework e observar um detalhe que para mim é extremamente importante, nenhum código extra além da lógica da nossa aplicação, com isto o Swiz consegue ser fiel ao que se propõem…


Links recentes sobre Swiz Framework:

Jandersonfc

#flexmania 2010 – Flex 4 – Desenvolvendo com Portabilidade(Web, Desktop e Mobile)

Esta foi a palestra a qual me referi no início do post.

#flexmania 2010 – disponibilizando código fonte

Material da Palestra.

Swiz Framework

Publicações no blog abordando o assunto.

Flex & RIA  - Swiz Prototype

Swiz in Actionscript Projects (including Flash IDE projects)

Para quem tiver interesse em utilizar o Swiz Framework sem ser em um projeto Flex ou AIR é interessante a leitura desse post.



Veja também:

  • [Flex & AIR] Swiz Framework + Presentation Model : Exemplo de Projeto
  • Java Magazine 68 : Artigo sobre Adobe Flex e AIR
  • FlexMania 2010 – Adobe Flex + Oracle WebLogic 10.x
  • O que é o Adobe Flex?
  • Facebook : Aplicação desktop



Jul 9

FlexMania 2010 – Adobe Flex + Oracle WebLogic 10.x

Escrito por Erko Bridee em .NET, 1, 2009, 4, 6, AR, Adobe, Adobe Flex, Air, Artigo, BI, Eclipse, Estilo, Flex, Flex Builder, Flex Mania, Flexmania, IE, Java, Java Magazine, O, Oracle, Palestra, RIA, Ria’s Geral, Sun, Swiz Framework, Twitter, UI, Wordpress, Workshop, action, api, blog, class, código, código fonte, fonte, for, framework, ide, if, image, int, map, mg, on, redeRIA, site, uint, web @ 07 9th, 2010 | via http://blog.erkobridee.com | Sem comentários
Erko Bridee
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »



FlexMania 2010


Slides e demais informações complementares referente a minha palestra no FlexMania 2010.

Depois de um dia muito corrido de trabalho, na noite de quinta-feira (08/07/2010), as 19:30 as 20:30, foi realizada a minha palestra sobre o assunto: Adobe Flex + Oracle WebLogic 10.x no mais tradicional do meu estilo de vida: frenaticamente hehe


E neste post irei disponibilizar as respectivas informações da palestra apresentada.


Post interessante que recomendo a leitura: Resumo: Flex Mania 2010 – Dia 1 (Erich Kist Blog)


Aqui também deixo meus agradecimento a todos os presentes na minha palestra o/ e ao @IgorCosta (Site) pelo convite.


Tem mais na próxima página…


Veja também:

  • [Flex & AIR] Swiz Framework – meus primeiros passos
  • Flex Builder código fonte derivado do Eclipse : disponível
  • Flex Builder parou de compilar (bin-release), o que fazer?
  • O que é o Adobe Flex?
  • Java Magazine 68 : Artigo sobre Adobe Flex e AIR



Mar 8

TUTORIAL JAVA + FLEX + IREPORT NA PRÁTICA (10)

Escrito por Janderson Cardoso em Código Fonte java, Flex, Java, Ria’s Geral, Swiz Framework, TUTORIAL FLEX, TUTORIAL JAVA, código fonte Flex, pratica java flex, pronunciamento @ 03 8th, 2010 | via http://www.jandersonfc.com/ | Sem comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »


 TUTORIAL JAVA + FLEX + IREPORT NA PRÁTICA (10)

Olá galera, aqui estou eu mais uma vez para passar um conteúdo para vocês que acredito ser de grande ajuda para quem tem que fazer relatórios com java + flex…

Desde de agosto de 2009 tenho trabalhado intensamente com relatórios, na verdade criei um gerador de relatório em flex que assim como  ireport gera um xml válido para o JasperReport, então acredito ter muito a ensinar para vocês e espero que hoje seja só o começo desse assunto por aqui ;)

Tenho recebido muitos emails pedindo “como trabalhar com relatórios java+flex” e ultimamente depois que comentei que iria falar sobre o assunto a cobrança aumentou, e como estou em fase de mudança e sem tempo para escrever um post grande cheio de explicações resolvi criar o meu primeiro screencast para mostrar o que fiz, assim acho que é mais rápido e compreensível, então aí vai o screencast, espero que gostem e me perdoem por falta de experiência com screencast, no mais bons estudos ;)

espero o feedback de vcs ;)

Caso queira o projeto java é só baixar aqui.(com as libs incusive as do ireport).

Caso queira o projeto flex é só baixar aqui.

as libs necessárias do ireport ficam localizadas:

local instalado o ireport ( ex: C:Arquivos de programasJaspersoftiReport-3.7.1 ) + ireportmodulesext

dentro dessa pastas os arquivos .jar

commons-digester-1.7.jar, groovy-all-1.5.5.jar, iText-2.1.0.jar, jasperreports-3.7.1.jar, jasperreports-chart-themes-3.6.2.jar, jasperreports-extensions-3.5.3.jar, jasperreports-fonts-3.6.1.jar.

Cumps.

  • Share this on del.icio.us
  • Digg this!
  • Share this on Reddit
  • Share this on Technorati
  • Share this on Facebook
  • Tweet This!
  • Subscribe to the comments for this post?
  • Share this on FriendFeed
  • Send this page to Print Friendly

Similar Posts:

  • TUTORIAL JAVA + FLEX NA PRÁTICA (9) – Atualizando o Swiz
  • TUTORIAL JAVA + FLEX NA PRÁTICA (8) – Datas
  • criar um Gerador de Relatório
  • TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
  • Bem Vindo a SaberProgramar.com

 TUTORIAL JAVA + FLEX + IREPORT NA PRÁTICA (10)

Fev 22

Lumine + ZendAmf + Flex 3/5

Escrito por Fábio Batista da Silva em 1, 4, 6, AMF, AR, Adobe, Adobe Flex, Debug, Flex, Flex 2, Flex 3, Flex 4, IE, MXML, Messaging, O, PHP, Pessoal, Projetos, RIA, Remoting, Ria’s Geral, Swiz Framework, Tutorial, UI, XML, app, as3, auto, back, backend, bug, class, control, demo, event, events, for, framework, frontend, if, image, int, map, mg, on, pt, uint, zend, zendAMF, zendFramework @ 02 22nd, 2010 | via http://www.flexria.com.br/home | Sem comentários
Fábio Batista da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Lumine + ZendAmf + Flex 3/5

Olá pessoal !!!

Vamos dar continuidade aos posts anteriores que trataram do Backend da nossa aplicação.
Nesse post vamos codificar o frontend da nossa aplicação, para isso vamos utilizar a dubla que se tornou titular em meus projetos : Flex + Swiz framework.

Flex Project

A estrutura do nosso Flex Project fica da seguinte forma :

Estrutura do projeto flex

Estrutura do projeto flex

Flex Compiler

Como estamos usando Swiz e as configurações de remote através do services.xml precisamos adicionar alguns argumento ao Flex Compiler, nesse caso ficou assim : -locale en_US -services=..services.xml -keep-as3-metadata+=Autowire.

RemotingService

Agora podemos configurar nosso RemotingService com o arquivo services.xml
Lembrando que o endpoint uri deve ser alterado para apontar para o seu projeto php
services.xml

<?xml version="1.0" encoding="UTF-8"?>
<services-config>
    <services>
        <service id="zend-service"
            class="flex.messaging.services.RemotingService"
            messageTypes="flex.messaging.messages.RemotingMessage">
            <destination id="zend">
                <channels>
                    <channel ref="zend-endpoint"/>
                </channels>
                <properties>
                    <source>*</source>
                </properties>
            </destination>
        </service>
    </services>
    <channels>
        <channel-definition id="zend-endpoint"
            class="mx.messaging.channels.AMFChannel">
            <endpoint uri="http://localhost/lumine-zend-flex/php/gateway.php"
                class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>
    </channels>
</services-config>

Swiz

Então podemos configurar o Swiz para isso temos 2 arquivos :
ApplicationSwizConfig.mxml : Responsável pelas configurações básicas do Swiz
ApplicationBeans.mxml : Responsável pelo mapeamento dos nossos beans

ApplicationSwizConfig.mxml

<?xml version="1.0" encoding="utf-8"?>
<swizframework:SwizConfig
	xmlns:mx="http://www.adobe.com/2006/mxml" 
	xmlns:swizframework="org.swizframework.*"
	eventPackages="{['br.com.flexria.events']}"
	viewPackages="{['br.com.flexria.view']}"
	logEventLevel="{LogEventLevel.DEBUG}"
	beanLoaders="{[ApplicationBeans]}"
	injectionEvent="preinitialize"
	mediateBubbledEvents="true"
	strict="true">
 
	<mx:Script>
		<![CDATA[
			import mx.logging.LogEventLevel;
		]]>
	</mx:Script>
 
	<mx:TraceTarget id="logTarget"
		includeCategory="true"
	    includeLevel="true" 
	    includeDate="true" 
	    includeTime="true"/>
 
</swizframework:SwizConfig>

ApplicationBeans.mxml

<?xml version="1.0" encoding="utf-8"?>
<BeanLoader xmlns="org.swizframework.util.*"
		xmlns:mx="http://www.adobe.com/2006/mxml"
		xmlns:factory="org.swizframework.factory.*"
		xmlns:delegates="br.com.flexria.delegates.*"
		xmlns:controllers="br.com.flexria.controllers.*">
 
   <!--DELEGATES-->
   <delegates:ContactDelegate 	id="contactDelegate"/>
   <delegates:PhoneDelegate 	id="phoneDelegate"/>
 
   <!--CONTROLLERS-->
   <controllers:ContactController   id="contactController"/>
   <controllers:PhoneController   id="phoneController"/>
 
   <!--REMOTES-->
   <mx:RemoteObject destination="zend"   id="contactRemote" source="ContactService" />
   <mx:RemoteObject destination="zend"   id="phoneRemote"   source="PhoneService" />
 
</BeanLoader>

Agora que temos nosso projeto flex configurado e podemos começar a codificar p valer : Tutorial : Lumine + ZendAmf + Flex 4/5

Até já !!!

Tutorial : Lumine + ZendAmf + Flex 1/5
Tutorial : Lumine + ZendAmf + Flex 2/5
Tutorial : Lumine + ZendAmf + Flex 3/5
Tutorial : Lumine + ZendAmf + Flex 4/5
Tutorial : Lumine + ZendAmf + Flex 5/5

Fev 4

Maratona de treinamento On-Line sobre Adobe Flex

Escrito por Igor Musardo em .NET, 1, 2.0, 4, 6, AIR 2.0, AR, Actionscript, Adobe, Adobe Air, Adobe Flex, Air, Asp.Net, BI, Blazeds, CRUD, Cairngorm, Catalyst, Curso, Cursos, Desenvolvedor, Desenvolvimento, Design, Desktop, Dica, Download, Evento, Ferramenta, Flash 10, Flash Catalyst, Flex, Flex 4, Flex Builder, Frameworks, IE, Introdução, Java, Javascript, LiveCycle, Mate, Mercado, Novidades, O, Palestra, Palestras, Projetos, RIA, Red5, Ria’s Geral, Rich Internet Application, Swiz Framework, Tecnologia, Touch, UI, Ved, Visual Studio, WebORB, XP, api, app, apple, arte, auto, back, blog, busca, case, control, dados, demo, desenvolvedores, designer, err, event, flash, flash builder, flexforkids, for, framework, html, ide, if, int, interface, internet, labs, live, mvc, novidade, on, on-line, pomodo, pt, runtime, site, user experience, web, zend @ 02 4th, 2010 | via http://www.igormusardo.com.br | Sem comentários
Igor Musardo
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olha só, 10 palestras sobre Adobe Flex com conteúdo excepcional e extremamente prático:

Corra, pois a maratona é agora dia 06/fev/2010.

Fazendo sua inscrição você, além de ajudar o Cotolengo, pois essa maratona é beneficiente, você concorrerá ao final do evento à um Magic Mouse da Apple (oferencimento do Fábio Vedovelli) e à um Adobe Flex Builder Pro (oferecimento do meu chará Igor Costa).

A inscrição tem um valor simbólico de R$ 30,00.

Além disso, todas as palestras serão gravadas e estarão disponíveis 15 dias após o evento para todas as pessoas que fizerem sua doação. Por isso, mesmo que você não possa estar on-line agora dia 06/fev/2010, não deixe de fazer sua doação, pois você fará o download de TODAS as palestras e poderá assistí-las quantas vezes quiser.

+ de 320 pessoas já se inscreveram nesta maratona, faça parte você também.

Confira abaixo quais os conteúdos que serão abordados na maratona.

Desenvolvimento Multi-touch com AIR 2.0

Nesta palestra o participante irá conhecer a API Multi-touch introduzida na versão 2.0 do Adobe Integrated Runtime, que traz grande facilidade para o desenvolvimento de aplicações explorando este recurso.

Público Alvo: Desenvolvedores, gerentes de projeto e entusiastas no desenvolvimento de soluções utilizando o AIR 2.0

Duração: 30 minutos.

Construa painéis administrativos em Flex integrados com ASP.NET MVC.

Você verá na prática como integrar o Flex com a nova abordagem MVC do ASP.NET, indo além do CRUD.

Público Alvo: Desenvolvedores Flex que utilizem ou querem utilizar o ASP.NET MVC como Back-End.

Duração: 50 minutos.

Swiz Framework: MVC Simples e Poderoso para projetos Flex/AIR

Essa palestra visa mostrar a brutal diferença entre seus “concorrentes” e entender melhor a “conceptual constraint” que levou os autores do Swiz Framework a desenvolverem uma solução simples e flexível para projetos Flex/AIR, em relação aos demais frameworks conhecidos. (Cainrgorm, PureMVC, Mate, etc). Pré requisito: Conhecer “Dependency Injection” (DI)  e “Inverse of Control” (IoC).

Público Alvo: Desenvolvedores Flex.

Duração: 50 minutos.

Flex e VOIP: Adicione essa tecnologia em suas aplicações

Essa palestra tem por objetivo demonstrar a desenvolvedores Flex como implementar em suas aplicações funcionalidades de um discador VOIP, usando soluções open source.

Público Alvo: Desenvolvedores Flex.

Duração: 50 minutos.

Desktop com HTML, Javascript e  Adobe AIR

Conheça um novo mundo de possibilidades e tecnologias com Javascript e HTML para desktop e descubra como Adobe Air se integra a este ambiente, utilizando como case o PomoDo.

Público Alvo: Desenvolvedores de qualquer linguagem.

Duração: 50 minutos.

Estudo de caso: User Experience em um RIA

Será debatido um estudo de caso onde implementamos um mecanismo de busca semântica através do design (!) A interface apenas pode ser viabilizada pela alta capacidade de componentização do Flex e porque entendemos o que o usuário precisava fazer com a interface.

Público Alvo: Desenvolvedores Flex e designers de todos os credos e cores.

Duração: 30 minutos.

Desmistificando o Cairngorm

O Cairngorm é considerado por muitos como um framework com uma curva de aprendizado elevada. A finalidade desta palestra é desvendar o Cairngorm utilizando uma abordagem diferenciada, com o objetivo  de facilitar o aprendizado do mesmo.

Público Alvo: Desenvolvedores Flex.

Duração: 50 minutos.

Introdução ao Mate: a importância de um framework MVC para Flex

Muitos ainda não se convenceram da necessidade da utilização de um dos frameworks MVC (Model – View – Controller) presentes no mercado e esta palestra tem como objetivo mostrar a sua importância e indicar o framework escolhido pela RIA Labs.

Público Alvo: Desenvolvedores Flex.

Duração: 50 minutos.

Coloque uma interface Flex em seus projetos JEE

Entenda como funciona a integração Adobe Flex com todos os serializadores disponíveis no mercado (BlazeDs, LivecycleDs,WebOrb for java,Pimento,Red5) para integração com seu back-end Java e crie novas ferramentas com recursos ímpar para seu negócio.

Público Alvo: Desenvolvedores Java.

Duração: 50 minutos.

O Quarteto Fantástico: Flash 10.1, Flex 4, Flash Catalyst e Flash Builder

Como as principais novidades da Plataforma Flash poderão impactar o desenvolvimento de Rich Internet Applications.

Público Alvo: Pessoas interessadas no desenvolvimento de Rich Internet Applications.

Duração: 50 minutos.

Jan 26

TUTORIAL JAVA + FLEX NA PRÁTICA (9) – Atualizando o Swiz

Escrito por Janderson Cardoso em #JAVA + FLEX NA PRÀTICA, Action Script 3.0, Adobe Flex, Código Fonte java, Dicas, Ria’s Geral, Swiz Framework, TUTORIAL FLEX, TUTORIAL JAVA, código fonte Flex, mvc, pratica java flex @ 01 26th, 2010 | via http://www.jandersonfc.com/ | Sem comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

 TUTORIAL JAVA + FLEX NA PRÁTICA (9)   Atualizando o Swiz

Outra dúvida muito solicitada por email pela galera é a respeito da atualização do swiz, quando atualiza o framework logo de kara dá erro,confesso que esse tempo todo não trabalhei com projetos usando o swiz, só quando fiz esse Tutorial, e também por falta de tempo, não atualizei o framework, mas esse final de semana para minha surpresa tentei migrar e foi super tranquilo, então vou passar a dica para vocês agora.

Esse artigo é continuação do

TUTORIAL JAVA + FLEX NA PRÁTICA 1/6

TUTORIAL JAVA + FLEX NA PRÁTICA 2/6

TUTORIAL JAVA + FLEX NA PRÁTICA 3/6

TUTORIAL JAVA + FLEX NA PRÁTICA 4/6

TUTORIAL JAVA + FLEX NA PRÁTICA 5/6

TUTORIAL JAVA + FLEX NA PRÁTICA 6/6

TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

TUTORIAL JAVA + FLEX NA PRÁTICA 8 – Datas

Caso queira o projeto java é só baixar aqui (sem as libs).

Caso queira o projeto java é só baixar aqui.(com as libs).

Caso queira o projeto flex é só baixar aqui.

ATUALIZANDO O SWIZ FRAMEWORK

Primeira coisa que vamos fazer é baixar a última versão stable e atualmente (25/01/2009) é a swiz-0.6.4-flex3.swz. Digo isso porque vi no site da swiz que existe a versão alpha 1.0 do framework, esse sim pelo que vi terá algumas novidades notável, como metadata personalizado, estou migrando para essa versão 0.6.4 e quando lançar a 1.0 atualizo vocês por aqui no blog ;) . vamos ao que interessa .

  1. se ainda não baixou baixe o swiz-0.6.4-flex3.swz.
  2. na pasta libs do nosso projeto flex (CrudFlex) retiramos a antiga lib (swiz-0.0.5-010609.swc) e adicionamos a nova 0.6.4.

depois de ter feito isso vai dar erro na nossa models.delegates, isso porque a classe AbstractDelegate foi retirada do framework do swiz, basta retirar o extends AbstractDelegate que nossa classe voltará a funcionar, se vc tentar rodar agora já vai funcionar, blz.. espero que tenha ajudado muita gente.

Tô brincando galera… já que é para atualizar vamos atualizar direito..hehe assim funciona mais não está de acordo com a documentação do Swiz.

Próximo passo nosso será criar o nosso SwizConfig, no nosso projeto na index.mxml temos um preinitialize que invocava a funcção que iniciava o Swiz, agora temos o Swiz config que substitui essa antiga configuração, então nosso index.mxml era assim:

PLAIN TEXT
XML:

  1. <?xml version=“1.0″ encoding=“utf-8″?>
  2. <mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute”
  3.     preinitialize=“{iniciar(event)}”>
  4.    
  5.     <mx:Script>
  6.         <![CDATA[
  7.             import com.saberprogramar.views.CidadeView;
  8.             import com.saberprogramar.views.EstadoView;
  9.             import mx.managers.PopUpManager;
  10.             import org.swizframework.Swiz;     
  11.             import mx.events.FlexEvent;   
  12.            
  13.             private function iniciar(event:FlexEvent):void{    
  14.                 Swiz.setStrict(false).loadBeans( [Beans] );           
  15.             }
  16.            
  17.             private function chamarCidadeView():void{
  18.                 PopUpManager.createPopUp(this,CidadeView,false);
  19.             }
  20.            
  21.             private function chamarEstadoView():void{
  22.                 PopUpManager.createPopUp(this,EstadoView,false);
  23.             }
  24.            
  25.         ]]>
  26.     </mx:Script>
  27.     <mx:Button x=“10″ y=“22″ label=“Estado” height=“52″ width=“88″ click=“{chamarEstadoView()}”/>
  28.     <mx:Button x=“10″ y=“93″ label=“Cidade” width=“88″ height=“54″ click=“{chamarCidadeView()}”/>
  29.    
  30.    
  31. </mx:Application>

ficou agora assim:

PLAIN TEXT
XML:

  1. <?xml version=“1.0″ encoding=“utf-8″?>
  2. <mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute”
  3.     xmlns:swiz=“http://swiz.swizframework.org”>
  4.    
  5.     <mx:Script>
  6.         <![CDATA[
  7.             import mx.logging.LogEventLevel;
  8.             import com.saberprogramar.views.CidadeView;
  9.             import com.saberprogramar.views.EstadoView;
  10.             import mx.managers.PopUpManager;
  11.             import org.swizframework.Swiz;     
  12.             import mx.events.FlexEvent;   
  13.                                    
  14.             private function chamarCidadeView():void{
  15.                 PopUpManager.createPopUp(this,CidadeView,false);
  16.             }
  17.            
  18.             private function chamarEstadoView():void{
  19.                 PopUpManager.createPopUp(this,EstadoView,false);
  20.             }
  21.            
  22.         ]]>
  23.     </mx:Script>
  24.    
  25.     <swiz:SwizConfig
  26.         strict=“true”
  27.         eventPackages=“com.saberprogramar.events”
  28.         mediateBubbledEvents=“true”
  29.         viewPackages=“com.saberprogramar.views”
  30.         beanLoaders=“{[Beans]}”  
  31.         logEventLevel=“{LogEventLevel.WARN}”
  32.     />
  33.    
  34.     <mx:Button x=“10″ y=“22″ label=“Estado” height=“52″ width=“88″ click=“{chamarEstadoView()}”/>
  35.     <mx:Button x=“10″ y=“93″ label=“Cidade” width=“88″ height=“54″ click=“{chamarCidadeView()}”/>
  36.        
  37. </mx:Application>

tá, mas se funcionava antes porque vou fazer isso? explico, está vendo esse viewPackages e eventPackeges, isso é muito importante para usar uma nova Metadata do Swiz, o mediate, tinha na versão anterior mas não era interessante como agora , já que agora conseguimos passar para o nosso Mediate nosso Evento customizado, tudo isso graças a esse atributo eventPackeges. Além disso na 1.0 esse arquivo vai ser mantido pelo que vi, então você estará mais próximo para atualizar quando o mesmo for lançado.

USANDO O MEDIATE

Mas afinal o que é esse Mediate? o Mediate é uma Metadata, assim como usamos o Autowire, que serve para não precisar ficar adicionando escuta de eventos, vamos explicar na prática… vá em “views.action.CidadeAction” na função init temos duas escuta de evento

PLAIN TEXT
ACTIONSCRIPT:

  1. Swiz.addEventListener(CidadeEvent.SAVE,onSaveComplete);
  2.     Swiz.addEventListener(CidadeEvent.REMOVE,onRemoveComplete);

não precisamos fazer mais isso, pode apagar.. agora vá na função onSaveComplete e coloque o Mediate

PLAIN TEXT
ACTIONSCRIPT:

  1. [Mediate(event=“CidadeEvent.SAVE”)]
  2. public function onSaveComplete(event:CidadeEvent):void{ 
  3.     stack.selectedChild = canvasDefault;
  4.     findAll();
  5. }

o mesmo no onRemoveComplete

PLAIN TEXT
ACTIONSCRIPT:

  1. [Mediate(event=“CidadeEvent.REMOVE”)]
  2. public function onRemoveComplete(event:CidadeEvent):void{
  3.     stack.selectedChild = canvasDefault;
  4.     findAll();
  5. }

e como as duas funções fazem a mesma coisa podemos também utilizar de uma apenas assim:

PLAIN TEXT
ACTIONSCRIPT:

  1. [Mediate(event=“CidadeEvent.SAVE”)]
  2. [Mediate(event=“CidadeEvent.REMOVE”)]
  3. public function onSaveComplete(event:CidadeEvent):void{ 
  4.     stack.selectedChild = canvasDefault;
  5.     findAll();
  6. }

só observe que foi necessário modificar o “modificador de acesso” para public, caso contrário não funciona.

Agora sim é isso galera, o swiz está por enquanto atualizado, vi alguns exemplos na internet usando coisas que nunca vi no swiz(Documentação) por isso me retive e mostrei baseado na documentação… seguindo os passos do mesmo..(Os delegates não são mais necessários mas já que está aí resolvi manter). Espero que te ajude e estimule a manter o framework atualizado, porque esse merece seu carinho e atenção :)

Cumps.

  • Share this on del.icio.us
  • Digg this!
  • Share this on Reddit
  • Share this on Technorati
  • Share this on Facebook
  • Tweet This!
  • Subscribe to the comments for this post?
  • Share this on FriendFeed
  • Send this page to Print Friendly

Similar Posts:

  • TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 4/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

 TUTORIAL JAVA + FLEX NA PRÁTICA (9)   Atualizando o Swiz

Jul 20

TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

Escrito por Janderson Cardoso em Action Script 3.0, Adobe Flex, Blazeds, Código Fonte java, DomainDriveDesign, Hibernate, Indico a Leitura, Java, SPRING ANNOTATIONS, Spring, Swiz Framework, TUTORIAL FLEX, TUTORIAL JAVA, Tutorial, código fonte Flex, hibernate Annotations, mvc, pratica java flex @ 07 20th, 2009 | via http://www.jandersonfc.com/ | Sem comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Esse artigo é continuação do
TUTORIAL JAVA + FLEX NA PRÁTICA 1/6
TUTORIAL JAVA + FLEX NA PRÁTICA 2/6
TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
TUTORIAL JAVA + FLEX NA PRÁTICA 4/6
TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
TUTORIAL JAVA + FLEX NA PRÁTICA 6/6

Não definitivamente você não está delirando e nem eu esqueci conceitos simples da matemática, realmente criei mais um tutorial, a 7/6, o que estou considerando Bônus, para fazer algumas modificações e implementar algumas funcionalidades.

Antes gostaria de agradecer pela participação do pessoal, muitos entenderam o objetivo do tutorial e com certeza fizeram bom proveito, fiquei sabendo este mês de julho que alguns mudaram a forma de trabalhar com Java + flex através deste tutorial :P . Através do mesmo recebi ótimos contatos e oportunidades profissionais, porém, como sempre há alguém que quer mais e gostaria de mais um empurram, então vamos direto ao assunto que tempo é dinheiro.

Essa parte vamos tratar mais de relacionamentos entre tabelas, como tratar esses relacionamentos no Flex e como mostrar mais de um objeto no datagrid… vamos a prática.

Implementação no Java

Assim como fizemos na nossa classe Estado vamos criar nossa Classe Cidade, classe essa que fará o relacionamento mais comum e a dúvida mais comum depois que você começa a programar, vamos ao código:

Cidade.java

PLAIN TEXT
JAVA:

  1. @Entity
  2. @Table(name=“cidade”)
  3. public class Cidade {
  4.  
  5. @Id @GeneratedValue(strategy = GenerationType.AUTO)
  6. private long idCidade;
  7.  
  8. @ManyToOne(fetch = FetchType.EAGER)
  9. @JoinColumn(name=“codEstado”,insertable=true,updatable=true)
  10. @Fetch(FetchMode.JOIN)
  11. @Cascade(CascadeType.SAVE_UPDATE)
  12. private Estado estado;
  13.  
  14. private String nome;
  15.  
  16. private String sigla;
  17.  
  18. public String getSigla() {
  19. return sigla;
  20. }
  21.  
  22. public void setSigla(String sigla) {
  23. this.sigla = sigla;
  24. }
  25.  
  26. public long getIdCidade() {
  27. return idCidade;
  28. }
  29.  
  30. public void setIdCidade(long idCidade) {
  31. this.idCidade = idCidade;
  32. }
  33.  
  34. public Estado getEstado() {
  35. return estado;
  36. }
  37.  
  38. public void setEstado(Estado estado) {
  39. this.estado = estado;
  40. }
  41.  
  42. public String getNome() {
  43. return nome;
  44. }
  45.  
  46. public void setNome(String nome) {
  47. this.nome = nome;
  48. }
  49.  
  50. }

Vale comentar algumas anotações que usei aqui:

@ManyToOne(fetch = FetchType.EAGER) -> como o relacionamento é de “N para 1”, uma Cidade pertence a um Estado e o Estado pode ter várias Cidade, usamos a anotação @ManyToOne e também usamos o FethType:

EAGER -> Sempre que o Objeto pai for trazido o atributo mapeado também será trazido) cuidado ao usar pois se for relacionamentos mais complexo, ou melhor, que contém muitos objetos dentro do outro pode ficar muito lento, no nosso exemplo não temos que ser preocupar com isso.

LAZY -> Sempre que o objeto pai for trazido o atributo mapeado só será trazido quando acessado pela primeira vez(muito usado quando é List, Collection para evitar o que citei logo acima).

@JoinColumn(name=”codEstado”,insertable=true,updatable=true) -> informamos qual é o campo é a chave estrangeira, no caso da Cidade a chave estrangeira é o codEstado. O insertable e o updatable quando indicados como true significa que esse objeto tem que ser inserido ou atualizado quando o objeto pai é inserido ou atualizado, resumindo, Toda vez que for inserir e atualizar um Cidade também será inserido ou atualizado um Estado.

@Fetch(FetchMode.JOIN) -> informamos que estamos juntando as duas tabelas, melhor dizendo, como se estivesse usando o Inner Join na injeção de SQL.

@Cascade(CascadeType.SAVE_UPDATE)-> por ultimo a permissão que esse atributo pode interferir na Classe ao qual está fazendo o relaciomento. Explico, ao colocar SAVE_UPDATE se caso você esteja inserindo uma cidade e o estado ainda não foi inserido, ele automaticamente vai adicionar esse Estado, pegar o id do mesmo e gravar na tabela cidade no campo codEstado, Hibernate é Kara ;) .

Depois de explicado as anotações as outras classes que ficam no Java já foram explicadas e só serão adicionadas logo abaixo:

CidadeRepository.java

PLAIN TEXT
JAVA:

  1. public interface CidadeRepository {
  2.    
  3.     public void save(Cidade cidade);
  4.     public void remove(Cidade cidade);
  5.    
  6.     public List<Cidade> findAll();
  7.     public List<Cidade> findByName(String nome);
  8.    
  9. }

CidadeService.java

PLAIN TEXT
JAVA:

  1. @Service(value=“CidadeService”)
  2. public class CidadeService {
  3.    
  4.     CidadeRepository cidadeRepository;
  5.    
  6.     @Autowired
  7.     public void setCidadeRepository(CidadeRepository cidadeRepository) {
  8.         this.cidadeRepository = cidadeRepository;
  9.     }
  10.    
  11.     public void save(Cidade cidade){
  12.         cidadeRepository.save(cidade);
  13.     }
  14.    
  15.     public void remove(Cidade cidade){
  16.         cidadeRepository.remove(cidade);
  17.     }
  18.    
  19.     public List<Cidade> findAll(){
  20.         return cidadeRepository.findAll();
  21.     }
  22.    
  23.     public List<Cidade> findByName(String nome){
  24.         return cidadeRepository.findByName(nome);
  25.     }
  26.    
  27. }

CidadeDao.java

PLAIN TEXT
JAVA:

  1. @Repository(value=“CidadeRepository”)
  2. public class CidadeDao extends HibernateDaoSupport
  3.     implements CidadeRepository {
  4.    
  5.     @Autowired
  6.     public CidadeDao(@Qualifier(“sessionFactory”) SessionFactory sessionFactory) {
  7.         // TODO Auto-generated constructor stub
  8.         super.setSessionFactory(sessionFactory);
  9.     }
  10.  
  11.     @Override
  12.     public void remove(Cidade cidade) {
  13.         // TODO Auto-generated method stub
  14.         getHibernateTemplate().delete(cidade);
  15.     }
  16.  
  17.     @SuppressWarnings(“unchecked”)
  18.     @Override
  19.     public List<Cidade> findAll() {
  20.         // TODO Auto-generated method stub
  21.         return getHibernateTemplate().loadAll(Cidade.class);
  22.     }
  23.    
  24.     @SuppressWarnings(“unchecked”)
  25.     @Override
  26.     public List<Cidade> findByName(String nome) {
  27.         // TODO Auto-generated method stub
  28.         return getHibernateTemplate().find(“from Cidade” +
  29.                 ” where nome like ‘%” + nome + “%’”);
  30.     }
  31.  
  32.     @Override
  33.     public void save(Cidade cidade) {
  34.         // TODO Auto-generated method stub
  35.         getHibernateTemplate().saveOrUpdate(cidade);
  36.     }
  37.    
  38.  
  39. }

Agora é só adicionar o serviço no blazeds e ir para a parte flex.

remoting-config.xml

PLAIN TEXT
XML:

  1. <destination id=“CidadeService”>
  2.         <properties>
  3.             <factory>spring</factory>
  4.             <source>CidadeService</source>
  5.         </properties>
  6.     </destination>

OBS. Aqui já começa uma pequena discussão, se você perceber os Repository, Service e Dao de Cidade e Estado são praticamente idênticos, e muitos vão optar por trabalhar com classes Genéricas, tipo RepositoryGeneric, DaoGeneric. Nada contra, só que eu prefiro deixar separado,  se você usar genérico tome muito cuidado, uma vez tomei o genérico de novalgina e fiquei uma semana mal, acabou o genérico comprei novalgina e a dor de cabeça passou em 30 minutos, hehe.

Outra coisa aí sim eu recomendo é o seguinte, de vez de ter um Service para a cidade e outra para estado criar um tipo addresService, cuja esse serviço manipularia o estado, a cidade o bairro… enfim, tudo que tem haver com endereço, isso é normal, o service na verdade é isso, mais como nos exemplos fica tudo separado as pessoas colocam separado, então, mesmo não fazendo assim neste exemplo recomendo a todos depois fazer isso neste exemplo, considere dever de casa  :) .

Implementação no Flex

No flex a implementação é mais simples ainda, a base de ctrl+c ctrl+v, vamos ao código:

Cidade.as

PLAIN TEXT
ACTIONSCRIPT:

  1. [RemoteClass(alias=“com.saberprogramar.business.entitys.Cidade”)]
  2.     [Bindable]
  3.     public class Cidade
  4.     {
  5.        
  6.         public var idCidade:Number;
  7.        
  8.         public var estado:Estado;
  9.        
  10.         public var nome:String;
  11.        
  12.         public var sigla:String;
  13.        
  14.        
  15.  
  16.     }

A única coisa que Vale lembrar aqui é que como no Java você usa o relacionamento com a classe Estado, no Action script tem que acontecer a mesma coisa, se não você não relaciona objetos, tipo, ao invés de colocar “estado:Estado” colocar “idEstado:Number” vc não está programando orientado a objeto, você na verdade está criando classes que sejam clone das suas tabelas do banco de dados, fazendo isso você está perdendo o melhor que o mundo OO pode te oferecer. É aqui que vejo uma constante dúvida que tenho recebido por contato aqui no Blog, então aí vai:

  • Não! de maneira nenhuma deixe de fazer os relacionamentos dos seus objetos, uma cidade faz parte de um Estado e não de um código do estado, então… tanto no Java, como no Action Script, quanto no php e outra qualquer linguagem não considere seus objetos uma cópia de suas tabelas do banco de dados.
  • Se no Java você tem um atributo “Estado estado” no actionScript você vai ter um ”estado:Estado”. Quando usamos RemoteObject o action script tem que ser igual ao Java ou ao php, é um clone, não pode ter um “Estado estado” no Java e um “idEstado:Number” no Action Script, não vai funcionar e você vai ter aquela sensação, é alguma bobeira que eu não estou vendo.


CidadeDelegate.as

PLAIN TEXT
ACTIONSCRIPT:

  1. public class CidadeDelegate extends AbstractDelegate
  2.     {
  3.        
  4.         [Autowire(bean=“cidadeService”)]
  5.         public var cidadeService:RemoteObject;   
  6.        
  7.         public function CidadeDelegate()
  8.         {
  9.             super();
  10.         }      
  11.        
  12.            
  13.         //AS OPERAÇÕES CRUD
  14.         public function findAll():AsyncToken{         
  15.             return cidadeService.findAll();  
  16.         }      
  17.        
  18.         public function findByName(nome:String):AsyncToken{   
  19.             return cidadeService.findByName(nome);     
  20.         }      
  21.        
  22.         public function save(cidade:Cidade):AsyncToken{
  23.             return cidadeService.save(cidade);   
  24.         }
  25.        
  26.         public function remove(cidade:Cidade):AsyncToken{
  27.             return cidadeService.remove(cidade);           
  28.         }   
  29.        
  30.        
  31.     }

CidadeEvent.as

PLAIN TEXT
ACTIONSCRIPT:

  1. public class CidadeEvent extends Event
  2.     {      
  3.        
  4.         public static const SAVE:String = “saveCidade”;
  5.         public static const REMOVE:String = “removeCidade”;
  6.        
  7.        
  8.         public function CidadeEvent(type:String)
  9.         {
  10.             super(type);
  11.         }
  12.        
  13.        
  14.     }

ICidadeController.as

PLAIN TEXT
ACTIONSCRIPT:

  1. public interface ICidadeController
  2.     {
  3.        
  4.         function get cidadeList():ArrayCollection;
  5.        
  6.         function findAll():void;
  7.        
  8.         function findByName(nome:String):void;
  9.        
  10.         function save(cidade:Cidade):void;
  11.        
  12.         function remove(cidade:Cidade):void;        
  13.        
  14.     }

CidadeController.as

PLAIN TEXT
ACTIONSCRIPT:

  1. public class CidadeController extends AbstractController
  2.         implements ICidadeController{
  3.        
  4.         [Bindable]
  5.         public var cidadeList:ArrayCollection;
  6.        
  7.         [Autowire(bean=“cidadeDelegate”)]
  8.         public var cidadeDelegate:CidadeDelegate;
  9.        
  10.         public function CidadeController()
  11.         {
  12.             super();
  13.         }
  14.        
  15.         public function findAll():void{   
  16.             executeServiceCall(cidadeDelegate.findAll(),onFindAll,onError);   
  17.         }
  18.        
  19.         public function findByName(nome:String):void{
  20.             executeServiceCall(cidadeDelegate.findByName(nome),onFindByName,onError);
  21.         }   
  22.        
  23.         public function save(cidade:Cidade):void{
  24.             executeServiceCall(cidadeDelegate.save(cidade),onSave,onError);
  25.         }
  26.        
  27.         public function remove(cidade:Cidade):void{
  28.             executeServiceCall(cidadeDelegate.remove(cidade),onRemove,onError);
  29.         }
  30.        
  31.         //*************** Handle Results ************************//  
  32.        
  33.         public function onFindAll(event:ResultEvent):void{     
  34.             cidadeList = ArrayCollection(event.result);
  35.         }
  36.        
  37.         public function onFindByName(event:ResultEvent):void{
  38.             cidadeList = event.result as ArrayCollection;
  39.         }
  40.        
  41.         public function onSave(event:ResultEvent):void{
  42.             Swiz.dispatchEvent(new CidadeEvent(CidadeEvent.SAVE));     
  43.         }
  44.        
  45.         public function onRemove(event:ResultEvent):void{
  46.             Swiz.dispatchEvent(new CidadeEvent(CidadeEvent.REMOVE));
  47.         }      
  48.        
  49.         private function onError(event:FaultEvent):void{                               
  50.             Alert.show(event.fault.message,“ERROR”);
  51.         }
  52.        
  53.        
  54.        
  55.        
  56.     }

Adicionados estas classes é só adicionar o mapeamento dos mesmos e o RemoteObjetct no nosso Beans.mxml.

PLAIN TEXT
XML:

  1. <!– cidade service –>
  2.     <mx:RemoteObject id=“cidadeService”
  3.                      destination=“CidadeService”
  4.                      channelSet=“{myAmfChannel}”/>
  5.                     
  6.     <!– delegate for the cidade controller –>
  7.     <delegates:CidadeDelegate id=“cidadeDelegate”/>
  8.    
  9.     <!– cidade controller –>
  10.     <controllers:CidadeController id=“cidadeController”/>

Agora vamos a interface(view) com algumas explicações:

CidadeView.mxml

PLAIN TEXT
XML:

  1. <?xml version=“1.0″ encoding=“utf-8″?>
  2.  
  3. <mx:TitleWindow xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute” width=“518″ height=“422″
  4.      title=“Cadastro de Cidades” fontSize=“10″ xmlns=“flexmdi.containers.*”
  5.      xmlns:controls=“com.flexpernambuco.controls.*”
  6.      creationComplete=“{init()}” showCloseButton=“true” close=“{exit()}”>
  7.    
  8.     <mx:ViewStack x=“10″ y=“10″ id=“stack” width=“486″ height=“362″>
  9.        
  10.         <mx:Canvas label=“View 1″ width=“100%” height=“100%” id=“canvasDefault”>
  11.             <mx:Button x=“138″ y=“330″ label=“Incluir” id=“btnIncluir” click=“{save()}”/>
  12.             <mx:Button x=“209″ y=“330″ label=“Alterar” id=“btnAlterar” click=“{update()}”/>
  13.             <mx:Button x=“284″ y=“330″ label=“Excluir” id=“btnExcluir” click=“{remove()}”/>
  14.             <mx :D ataGrid x=“10″ y=“40″ width=“466″ height=“282″ dataProvider=“{controller.cidadeList}” id=“dgCidade”>
  15.                 <mx:columns>
  16.                     <mx :D ataGridColumn headerText=“ID” dataField=“idCidade” width=“70″/>
  17.                     <mx :D ataGridColumn headerText=“Nome da Cidade” dataField=“nome”/>
  18.                     <mx :D ataGridColumn headerText=“Sigla” dataField=“sigla” width=“70″/>
  19.                     <mx :D ataGridColumn headerText=“UF” labelFunction=“colEstado” width=“70″/>
  20.                 </mx:columns>
  21.             </mx :D ataGrid>
  22.             <mx:TextInput x=“273″ y=“10″ id=“txtFind”/>
  23.             <mx:Button x=“441″ y=“10″ width=“35″ icon=“@Embed(source=’com/saberprogramar/assets/images/find-16×16.png’)” id=“btnFind” click=“{find()}”/>
  24.         </mx:Canvas>
  25.        
  26.         <mx:Canvas label=“” width=“100%” height=“100%” id=“canvasForm”>
  27.             <mx:Form x=“10″ y=“67″ width=“466″ height=“146″>
  28.                 <mx:FormItem label=“ID:”>
  29.                     <mx:TextInput width=“72″ id=“txtIdCidade” editable=“false” tabIndex=“0″
  30.                         toolTip=“Código Gerado Automático” text=“{cidade.idCidade.toString()}”/>
  31.                 </mx:FormItem>
  32.                 <mx:FormItem label=“Estado” required=“true”>
  33.                     <mx:ComboBox id=“cmbEstado” dataProvider=“{controllerEstado.estadoList}”
  34.                         labelField=“nome” prompt=“Selecione um Estado” tabIndex=“1″>
  35.                     </mx:ComboBox>
  36.                 </mx:FormItem>
  37.                 <mx:FormItem label=“Nome:” required=“true”>
  38.                     <mx:TextInput width=“339″ id=“txtNome” text=“{cidade.nome}” tabIndex=“2″/>
  39.     &