﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ricardo Serathiuk</title>
	<atom:link href="http://serathiuk.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://serathiuk.com</link>
	<description>Um blog sobre Tecnologia.</description>
	<lastBuildDate>Sun, 06 Mar 2011 13:10:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Fixando o Eclipse na Barra de Tarefas do Windows 7</title>
		<link>http://serathiuk.com/2011/03/fixando-o-eclipse-na-barra-de-tarefas-do-windows-7/</link>
		<comments>http://serathiuk.com/2011/03/fixando-o-eclipse-na-barra-de-tarefas-do-windows-7/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 13:05:07 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[artigos]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[artigo]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://serathiuk.com/?p=218</guid>
		<description><![CDATA[Esta é uma dica para fixar o Eclipse na barra de tarefas do Windows 7. Apenas siga os passos a seguir. 1. Abra o eclipse.ini no diretório do Eclipse. 2. Adicione as seguintes linha no início do arquivo e salve: -vm [Caminho para o diretório bin da Java VM. Ex: C:\Program Files\Java\jdk1.6.0_22\bin] 3. Salve o arquivo [...]]]></description>
			<content:encoded><![CDATA[<p>Esta é uma dica para fixar o Eclipse na barra de tarefas do Windows 7. Apenas siga os passos a seguir.</p>
<p>1. Abra o eclipse.ini no diretório do Eclipse.</p>
<p>2. Adicione as seguintes linha no início do arquivo e salve:</p>
<blockquote><p>-vm</p>
<p>[Caminho para o diretório bin da Java VM. Ex: C:\Program Files\Java\jdk1.6.0_22\bin]</p></blockquote>
<p>3. Salve o arquivo e abra o Eclipse, e depois de aberto, tente fixar.</p>
<p>È simples assim. <img src='http://serathiuk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Fonte: <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314805">https://bugs.eclipse.org/bugs/show_bug.cgi?id=314805</a></p>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2011/03/fixando-o-eclipse-na-barra-de-tarefas-do-windows-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Motorola Milestone para desenvolvimento Android no Eclipse</title>
		<link>http://serathiuk.com/2011/01/motorola-milestone-para-desenvolvimento-android-no-eclipse/</link>
		<comments>http://serathiuk.com/2011/01/motorola-milestone-para-desenvolvimento-android-no-eclipse/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 23:08:03 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[artigos]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[motorola milestone]]></category>

		<guid isPermaLink="false">http://serathiuk.com/?p=210</guid>
		<description><![CDATA[Neste artigo irei explicar como fiz para utilizar o Motorola Milestone para debugar e rodar aplicações em modo de desenvolvimento no Android. Este artigo não tem propósito de ensinar Android, Java ou qualquer coisa do tipo. Somente utilizar o Milestone em ambiente de desenvolvimento. E esse artigo é um passo a passo do que fiz [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Neste artigo irei explicar como fiz para utilizar o Motorola Milestone para debugar e rodar aplicações em modo de desenvolvimento no Android. Este artigo não tem propósito de ensinar Android, Java ou qualquer coisa do tipo. Somente utilizar o Milestone em ambiente de desenvolvimento. E esse artigo é um passo a passo do que fiz para conseguir isso. No meu caso estou utilizando o sistema operacional Windows 7, mas acredito que não seja muito diferente adaptar os passos para Linux e MacOS. E também meu Milestone está com o ShadowMod 0.9.14(Android 2.2.1).</p>
<p>1. Baixe e instale a Android SDK(instalei em c:/android-sdk): <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a><br />
2. Baixe e instale o driver USB da Motorola(link não oficial da Motorola): : <a href="http://code.google.com/p/shadowmodbr/downloads/list">http://code.google.com/p/shadowmodbr/downloads/list</a><br />
3. Adicione os diretórios “tools” e “platform-tools” da SDK no Path do seu Sistema Operacional.<br />
4. Ligue o modo de debug no Milestone. Fica em Configurações, Aplicativos, Desenvolvimento, Depuração USB.<br />
5. Conecte o Milestone via cabo de dados USB em seu computador.<br />
6. No Prompt de Comando(ou bash, qualquer coisa do gênero), dê o comando “adb devices”. Ele deverá mostrar um “código maluco”(que formalmente se chama serial number). Se não mostrar, repita os passos anteriores. Se mostrar, muito bem Fliper, o negócio tá indo.<br />
7. Inicie o Eclipse(é necessário que ele tenha o plugin do Android instalado)..<br />
8. Crie um projeto caso não possua um criado.<br />
9. No arquivo “AndroidManifest.xml”, na tag “application”, adicione o seguinte atributo e valor: android:debuggable=&#8221;true”<br />
10. Agora tente rodar ou debugar sua aplicação. Para mim isso já funcionou. Mas o artigo que segui e fiz uma “tradução livre”, diz que pode ser que apareça uma pop-up para escolher o dispositivo. Se aparecer, escolha seu dispositivo e pronto. <img src='http://serathiuk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Fonte do artigo: <a href="http://androiddevblog.blogspot.com/2010/02/android-programming-and-debugging-on.html">http://androiddevblog.blogspot.com/2010/02/android-programming-and-debugging-on.html</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2011/01/motorola-milestone-para-desenvolvimento-android-no-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agilizando a compilação do GWT/Google Web Toolkit</title>
		<link>http://serathiuk.com/2010/08/agilizando-a-compilacao-do-gwtgoogle-web-toolkit/</link>
		<comments>http://serathiuk.com/2010/08/agilizando-a-compilacao-do-gwtgoogle-web-toolkit/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 13:26:02 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[Sem categoria]]></category>

		<guid isPermaLink="false">http://serathiuk.com/?p=201</guid>
		<description><![CDATA[Existem algumas coisas no mundo que demoram. Podemos citar entre elas a aprovação de qualquer coisa no congresso nacional, a redução de juros no Brasil e a entrega dos produtos enviados pela Deal Extreme. A compilação do GWT entra nesta categoria, mas ao contrário das 3 que citei, tem como melhorar “um pouco” seguindo algumas [...]]]></description>
			<content:encoded><![CDATA[<p>Existem algumas coisas no mundo que demoram. Podemos citar entre elas a aprovação de qualquer coisa no congresso nacional, a redução de juros no Brasil e a entrega dos produtos enviados pela Deal Extreme. A compilação do GWT entra nesta categoria, mas ao contrário das 3 que citei, tem como melhorar “um pouco” seguindo algumas dicas.<br />
O grande “problema” do compilador do GWT, é que ele tem um compromisso “sagrado” de tentar produzir um código Javascript melhor que o de um programador humano. Por isso, ele faz uma série de análises para que código não usado não seja convertido e não esteja presente no código final. Ele não deixa na versão compilada os métodos que você nunca usa e varíaveis nunca usadas. E também ele obfusca seu código. E isso leva tempo. Como diria a pensadora: “Isto não é feitiçaria, é tecnologia”. Por isso não existem milagres e essas dicas irão apenas ajudar a “diminuir a demora”.<br />
Mas falando sobre a demora, existe outra coisa que pode deixar suas pausas para o café um pouco mais longas. É o fato de o GWT ter as “maravilhosas” permutações. Mas o que seriam as permutações Arnaldo? Isso pode? Claro que pode Galvão. As permutações são etapas em que o compilador do GWT compila diferentes versões do código para diferentes navegadores. Em vez de ter 1 código javascript com um monte de condições no meio tratando diferentes situações para diferentes navegadores, o compilador produz 1 código específico para cada navegador. Isso faz com que o código fique otimizado para o navegador do usuário, mas em contrapartida, faz com que a compilação fique mais demorada.<br />
Irei falar sobre algumas opções para diminuir a demora. Você pode utilizar todas elas juntas, ou utilizar separadas. Fica a seu critério.</p>
<h3>1. Evite utilizar Code Splitting</h3>
<p>O Code Splitting é um recurso do GWT que posibilita que você quebre o código a faça com que ele seja carregado aos poucos.  O RunAsync(comando GWT.runAsync) serve para dizer onde se deve quebrar o código. Ele funciona bem, mas ele pode gerar um problema. São feitas uma série de análises adicionais para verificar os pontos de ‘quebra’ e separar os arquivos javascript a serem gerados. Dependendo do tamanho da aplicação e do número de pontos de quebra, a aplicação pode ficar ‘incompilável’ para muitas máquinas(por alto uso de memória e processamento). Então, analise a real necessidade de utilizar Code Splitting e se realmente aqueles KB’s a menos que o usuário irá carregar no início realmente farão diferença.</p>
<h3>2. Go to hell IE6</h3>
<p>Então daí que vem a segunda opção para diminuir a demora. Esta seria definir no GWT que você não quer compilar para alguns navegadores. Exemplo: Seu sistema só funcionará em IE8, Firefox 3 e Chrome. Não precisará funcionar em Opera, IE6, IE7 e versões antigas do Firefox. Então o que você faz é. Definir os navegadores que seu sistema terá suporte, e o resto que se f&#8230; fique sem compatibilidade. <img src='http://serathiuk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<br />
Para configurar os navegadores que você quer suporte, é só utilizar o seguinte comando no final de seu XML de configuração do módulo:</p>
<blockquote><p>&lt;set-property name=&#8221;user.agent&#8221; value=”ie6,ie8,gecko,gecko1_8,safari,opera” / &gt;</p></blockquote>
<p>Sendo as opções:</p>
<ul>
<blockquote>
<li>ie6 = Microsoft Internet Explorer 6 e 7;</li>
<li>ie8 = Microsoft Internet Explorer 8;</li>
<li>gecko = Mozilla Firefox 3.x e superiores;</li>
<li>gecko1_8 = Mozilla Firefox 1.5 e 2;</li>
<li>safari = Navegadores baseados em Webkit(Safari, Chrome, etc&#8230;);</li>
<li>opera = Opera.</li>
</blockquote>
</ul>
<h3>3. LocalWorkers</h3>
<p>Esta é a melhor técnica de todas as apresentadas na minha opinião. Consiste em você fazer com que sejam compiladas mais de 1 permutação por vez. Esta técnica só traz resultados reais para processadores de mais de 1 nucleo. Exemplo: Você tem um processador com 2 núcleos, então configuramos o GWT para compilar uma permutação por núcleo, sendo que ele sempre compilará 2 permutações simultaneamente.<br />
Para configurar isso é fácil. È só passar um paramêtro para o compilador informando o número de localWorkers desejado. Para linha de comando é apenas “-localWorkers [numero]”. Em um script Ant é só utilizar o seguinte:</p>
<blockquote><p>&lt;java classname=&#8221;com.google.gwt.dev.Compiler&#8221; fork=&#8221;true&#8221; failonerror=&#8221;false&#8221;&gt;<br />
&lt;arg value=&#8221;[modulo]&#8221; /&gt;<br />
&lt;arg value=&#8221;-localWorkers&#8221; /&gt;<br />
&lt;arg value=&#8221;[numero]&#8221; /&gt;<br />
&lt;/java&gt;</p></blockquote>
<h3>4. Verifique a configuração de localização.</h3>
<p>Além de criar uma permutação para cada navegador, o GWT cria uma compilação por localização por navegador. Exemplo. Se eu tenho uma aplicação com suporte a todos os navegadores e com 2 opções de localização(ex: pt_BR e en_US), o GWT irá gerar 12 permutações, sendo que originalmente são 6. Se eu colocar mais uma opção de localização, o número de permutações sobe para 18. Então, se você vai utilizar apenas 1 opção, especifique para o GWT isso da seguinte forma, no arquivo XML de configuração do módulo:</p>
<blockquote><p>&lt;extend-property name=&#8221;locale&#8221; values=&#8221;pt_BR&#8221; /&gt;<br />
&lt;set-property name=&#8217;locale&#8217; value=&#8217;pt_BR&#8217;/&gt;&lt;set-property-fallback name=&#8217;locale&#8217; value=&#8217;pt_BR&#8217;/&gt;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2010/08/agilizando-a-compilacao-do-gwtgoogle-web-toolkit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Raiva</title>
		<link>http://serathiuk.com/2010/04/raiva/</link>
		<comments>http://serathiuk.com/2010/04/raiva/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 21:42:59 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[coisas legais]]></category>
		<category><![CDATA[inutilidades]]></category>
		<category><![CDATA[coisas engraçadas]]></category>
		<category><![CDATA[cqc]]></category>
		<category><![CDATA[hbo]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[rafinha bastos]]></category>
		<category><![CDATA[suporte]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[videos]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://serathiuk.com/?p=198</guid>
		<description><![CDATA[Esse vídeo não é tão novo, mas representa uma situação que muitas pessoas já passaram. O suporte telefônico&#8230; O Rafinha Bastos do CQC falando como foi sua jornada com o suporte da NET.]]></description>
			<content:encoded><![CDATA[<p>Esse vídeo não é tão novo, mas representa uma situação que muitas pessoas já passaram. O suporte telefônico&#8230; O Rafinha Bastos do CQC falando como foi sua jornada com o suporte da NET.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/WVzpeoKuYnA&amp;hl=pt_BR&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="385" src="http://www.youtube.com/v/WVzpeoKuYnA&amp;hl=pt_BR&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2010/04/raiva/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WTF? Quake II em GWT?</title>
		<link>http://serathiuk.com/2010/04/wtf-quake-ii-em-gwt/</link>
		<comments>http://serathiuk.com/2010/04/wtf-quake-ii-em-gwt/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 21:53:21 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[coisas legais]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google web toolkit]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[jogos]]></category>
		<category><![CDATA[videos]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[noticias]]></category>
		<category><![CDATA[quake]]></category>
		<category><![CDATA[quake2]]></category>
		<category><![CDATA[webgl]]></category>

		<guid isPermaLink="false">http://serathiuk.com/?p=195</guid>
		<description><![CDATA[Veja isso&#8230; Um desenvolvedor do Google, nos 20% de tempo que são fornecidos para projeto próprio, resolveu portar o Quake II utilizando os novos recursos do HTML5. E para isso também utilizou o GWT. Não é impressionante? Agora acredito que o Flash possa &#8220;morrer&#8221;. Vou baixar o código-fonte do projeto e dar uma fuçada&#8230;]]></description>
			<content:encoded><![CDATA[<p>Veja isso&#8230;</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/fyfu4OwjUEI&amp;hl=pt_BR&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="385" src="http://www.youtube.com/v/fyfu4OwjUEI&amp;hl=pt_BR&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Um desenvolvedor do Google, nos 20% de tempo que são fornecidos para projeto próprio, resolveu portar o Quake II utilizando os novos recursos do HTML5. E para isso também utilizou o GWT. Não é impressionante? Agora acredito que o Flash possa &#8220;morrer&#8221;. Vou baixar o código-fonte do projeto e dar uma fuçada&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2010/04/wtf-quake-ii-em-gwt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Utilizando Javascript no GWT/Google Web Toolkit com JSNI (Parte 1)</title>
		<link>http://serathiuk.com/2010/03/utilizando-javascript-no-gwtgoogle-web-toolkit-com-jsni-parte-1/</link>
		<comments>http://serathiuk.com/2010/03/utilizando-javascript-no-gwtgoogle-web-toolkit-com-jsni-parte-1/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 16:44:52 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[google web toolkit]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[artigo]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jsni]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://serathiuk.com/blog/?p=183</guid>
		<description><![CDATA[Muitas vezes os desenvolvedores precisam de um novo componente para sua aplicação, e esse componente a maioria das vezes é desenvolvido em Javascript. Quem conhece o GWT, sabe que a framework permite desenvolver aplicações RIA sem saber Javascript, mas sim desenvolvendo em Java de uma forma muita parecida como a que se desenvolve em Swing [...]]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes os desenvolvedores precisam de um novo componente para sua aplicação, e esse componente a maioria das vezes é desenvolvido em Javascript. Quem conhece o GWT, sabe que a framework permite desenvolver aplicações RIA sem saber Javascript, mas sim desenvolvendo em Java de uma forma muita parecida como a que se desenvolve em Swing ou SWT. Você não tem contato direto com o Javascript, pois ele é gerado na compilação. Mas como então se faz para utilizar um componente Javascript no GWT?<br />
O GWT tem uma funcionalidade que se chama JSNI(Javascript Native Interface). Ela é baseada no JNI(Java Native Interface), que permite aos desenvolvedores Java utilizarem recursos específicos do sistema operacional. No JNI são métodos na classe Java escritos em C. No JSNI são métodos na classe Java que utilizam Javascript. Mas a forma em que eles são escritos é muito parecida, tanto que é possível utilizar parte da documentação do JNI como referência para o JSNI.<br />
Vamos primeiramente criar o já conhecido &#8220;Hello World!&#8221;, para que começar a se familizar com o JSNI:</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:600px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JSNI <span style="color: #000000; font-weight: bold;">implements</span> EntryPoint <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onModuleLoad<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a> btn <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Clique aqui&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; btn.<span style="color: #006633;">addClickHandler</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ClickHandler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span>ClickEvent event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello World!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; RootPanel.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>btn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//Dê uma atenção especial a este método</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">native</span> <span style="color: #000066; font-weight: bold;">void</span> alert<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> txt<span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">/*-{<br />
&nbsp; &nbsp; &nbsp; &nbsp; $wnd.alert(txt);<br />
&nbsp; &nbsp; }-*/</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Quando esse código for executado, dará para ver um botão, que você clica e mostra um alert com o &#8220;Hello World!&#8221;. Mas este alert é feito utilizando Javascript, como dá para ver. È criado um método nativo(&#8220;public native void alert&#8221;) que recebe uma String. O bloco de código é delimitado por &#8220;/*-{&#8221; e &#8220;}-*/&#8221; em vez de um simples par de chaves. E dentro do bloco de código é executado um &#8220;$wnd.alert(txt);&#8221;, que seria o correspondente a &#8220;window.alert(txt)&#8221; ou a apenas &#8220;alert(txt)&#8221;. O GWT precisa que tudo que seja referente a janela(window) seja chamado com o &#8220;$wnd&#8221; no início, pois internamente ele utiliza alguns iframes e algumas coisas que não vem ao caso, e ele precisa disso para não se perder na compilação. Da mesma forma, quando você precisar utilizar um &#8220;document.<algumacoisa>&#8220;, você utilizará &#8220;$doc.<algumacoisa>&#8220;. Resumindo:</p>
<p>document = $doc<br />
window = $wnd</p>
<p>Vamos fazer um exemplo utilizando o &#8220;$doc&#8221; agora.</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:600px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JSNI <span style="color: #000000; font-weight: bold;">implements</span> EntryPoint <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onModuleLoad<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; TextBox txt <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TextBox<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; txt.<span style="color: #006633;">setName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;campoTexto&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; RootPanel.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>txt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a> btn <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Clique aqui&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; btn.<span style="color: #006633;">addClickHandler</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ClickHandler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span>ClickEvent event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mostraTextoTextBox<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; RootPanel.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>btn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">native</span> <span style="color: #000066; font-weight: bold;">void</span> mostraTextoTextBox<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">/*-{<br />
&nbsp; &nbsp; &nbsp; &nbsp; var txt = $doc.getElementById(&quot;campoTexto&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; $wnd.alert(txt.value);<br />
&nbsp; &nbsp; }-*/</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Neste exemplo, é criado um campo TextBox e um botão. Quando se clica no botão, é mostrado em um alert o texto do TextBox. Mas é utilizado Javascript para isso. È utilizado um &#8220;$doc.getElementById&#8221; para pegar a instância do TextBox(que no fundo no fundo é um &#8220;input text&#8221; HTML), e retornar o valor. Pode ver que é feita a mesma coisa que seria feita com um campo de texto HTML. A diferença é que se utiliza o $doc ao invés do &#8220;document&#8221; no getElementById.<br />
A partir disso dá para ver que dá para fazer muita coisa com o JSNI. Esse é o básico do básico do que a ferramenta pode fazer. No próximo artigo irei explicar como utilizar objetos Java no Javascript e fazer com que métodos Java sejam visíveis para Javascript&#8217;s externos. Qualquer dúvida, tire nos comentários. <img src='http://serathiuk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2010/03/utilizando-javascript-no-gwtgoogle-web-toolkit-com-jsni-parte-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>FeedBurner</title>
		<link>http://serathiuk.com/2010/01/feedburner/</link>
		<comments>http://serathiuk.com/2010/01/feedburner/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 02:57:23 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[sobre mim]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[avisos]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[noticias]]></category>

		<guid isPermaLink="false">http://serathiuk.com/blog/?p=154</guid>
		<description><![CDATA[Disponibilizei o blog no Feedburner para quem tiver interesse. O endereço é http://feeds.feedburner.com/serathiuk.]]></description>
			<content:encoded><![CDATA[<p>Disponibilizei o blog no Feedburner para quem tiver interesse. O endereço é <a href="http://feeds.feedburner.com/serathiuk">http://feeds.feedburner.com/serathiuk</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2010/01/feedburner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Escrevendo uma extensão de Twitter para o Google Chrome utilizando o Google Web Toolkit(GWT)</title>
		<link>http://serathiuk.com/2009/11/escrevendo-uma-extensao-de-twitter-para-o-google-chrome-utilizando-o-google-web-toolkitgwt/</link>
		<comments>http://serathiuk.com/2009/11/escrevendo-uma-extensao-de-twitter-para-o-google-chrome-utilizando-o-google-web-toolkitgwt/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 13:17:52 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[artigos]]></category>
		<category><![CDATA[coisas legais]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google web toolkit]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[softwares]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[artigo]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[extensão]]></category>
		<category><![CDATA[google chrome]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://serathiuk.com/blog/?p=142</guid>
		<description><![CDATA[Estava olhando os exemplos de como criar extensões para o Chrome, e vi que assim como o no Firefox, as extensões não são nada mais que Javascript(mas no caso do Firefox tem os XUL envolvidos e etc&#8230;). Então pensei eu: “GWT gera Javascript, então ele deve funcionar para criar extensões”. Fiz uns testes básico e [...]]]></description>
			<content:encoded><![CDATA[<p>Estava olhando os exemplos de como criar extensões para o Chrome, e vi que assim como o no Firefox, as extensões não são nada mais que Javascript(mas no caso do Firefox tem os XUL envolvidos e etc&#8230;). Então pensei eu: “GWT gera Javascript, então ele deve funcionar para criar extensões”. Fiz uns testes básico e conclui. Funcionou. E aqui escrevo um tutorial dizendo como fiz para fazer isso funcionar. O objetivo desse tutorial não é ensinar GWT, é somente mostrar como configurar um projeto do GWT para rodar como uma extensão do Chrome.<br />
Antes de tudo, vou dar um aviso que vai lhe poupar de alguns problemas: Salve todos os arquivos do exemplo com codificação UTF-8.<br />
Como exemplo, criei uma aplicação para twitter bem simples, que só lê as últimas mensagens de um usuário qualquer.<br />
Primeiramente criei uma aplicação no Eclipse chamada “ExtensaoChrome” com o pacote base chamado “com.serathiuk.chrome.extension.teste.client”.</p>
<p>Depois disso, alterei o arquivo &#8216;ExtensaoChrome.html&#8217; da pasta war, deixando apenas com o seguinte HTML:</p>
<blockquote><p>&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221;&gt;</p>
<p>&lt;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;ExtensaoChrome.css&#8221;&gt;</p>
<p>&lt;div id=&#8221;intro_panel&#8221;&gt;&lt;/div&gt;</p>
<p>&lt;script type=&#8221;text/javascript&#8221; language=&#8221;javascript&#8221; src=”extensaochrome/extensaochrome.nocache.js&#8221;&gt;&lt;/script&gt;</p></blockquote>
<p>Na pasta war, coloquei o arquivo icon.png(o mesmo do exemplo oficial, link no final) e o arquivo manifest.json, que tem o seguinte conteúdo:</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:600px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#123;</span><br />
<span style="color: #3366CC;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Leitor de Twitter&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;version&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;1.0&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;description&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Exemplo de extensão para Chrome utilizando GWT do site serathiuk.com.&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;browser_action&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #3366CC;">&quot;default_title&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Leitor de Twitter&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;default_icon&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;icon.png&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;popup&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;ExtensaoChrome.html&quot;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;permissions&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><br />
<span style="color: #3366CC;">&quot;http://www.twitter.com/&quot;</span><br />
<span style="color: #009900;">&#93;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Depois disso, apaguei aqueles arquivos que são criados pelo exemplo, deixando apenas o “ExtensaoChrome.java”, que é o Entry Point da aplicação. E no EntryPoint, apaguei todas aquelas informações do exemplo, e colocando o código para fazer a aplicação funcionar:</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:600px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ExtensaoChrome <span style="color: #000000; font-weight: bold;">implements</span> EntryPoint <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">private</span> TextBox txtLogin<span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">private</span> FlexTable tableTwitter<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onModuleLoad<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
HorizontalPanel h <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HorizontalPanel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
txtLogin <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TextBox<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
h.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>txtLogin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a> btn <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Carregar&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
btn.<span style="color: #006633;">addClickHandler</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ClickHandler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span>ClickEvent event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
carregarTwitts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
h.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>btn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
ScrollPanel align <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ScrollPanel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
align.<span style="color: #006633;">setWidth</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;100%&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
align.<span style="color: #006633;">setHeight</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;320&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
tableTwitter <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FlexTable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
tableTwitter.<span style="color: #006633;">setCellPadding</span><span style="color: #009900;">&#40;</span>1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
tableTwitter.<span style="color: #006633;">setCellSpacing</span><span style="color: #009900;">&#40;</span>1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
tableTwitter.<span style="color: #006633;">setBorderWidth</span><span style="color: #009900;">&#40;</span>1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
align.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>tableTwitter<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
VerticalPanel v <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> VerticalPanel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
v.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>h<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
v.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>align<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
RootPanel.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;intro_panel&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>v<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> carregarTwitts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> url <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://twitter.com/statuses/user_timeline/&quot;</span><span style="color: #339933;">+</span>txtLogin.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;.json&quot;</span><span style="color: #339933;">;</span><br />
RequestBuilder req <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> RequestBuilder<span style="color: #009900;">&#40;</span>RequestBuilder.<span style="color: #006633;">GET</span>, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aurl+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">URL</span></a>.<span style="color: #006633;">encode</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
req.<span style="color: #006633;">sendRequest</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span>,<br />
<span style="color: #000000; font-weight: bold;">new</span> RequestCallback<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onResponseReceived<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arequest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Request</span></a> request, Response response<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
preencheValores<span style="color: #009900;">&#40;</span>response.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onError<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arequest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Request</span></a> request, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Athrowable+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Throwable</span></a> exception<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
showError<span style="color: #009900;">&#40;</span>exception<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>RequestException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
showError<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> preencheValores<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> jsonText<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
tableTwitter.<span style="color: #006633;">removeAllRows</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
JSONArray json <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>JSONArray<span style="color: #009900;">&#41;</span> JSONParser.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>jsonText<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> json.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
JSONObject obj <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>JSONObject<span style="color: #009900;">&#41;</span> json.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>obj <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
JSONString str <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>JSONString<span style="color: #009900;">&#41;</span> obj.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;text&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
tableTwitter.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">+</span>1, 0, str.<span style="color: #006633;">stringValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> showError<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Athrowable+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Throwable</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Awindow+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Window</span></a>.<span style="color: #006633;">alert</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Agora é só compilar o projeto e adicionar a extensão ao Chrome. Para fazer isso, digite o endereço “chrome://extensions/”, clicar em “Load Unpacked Extension” e selecionar o diretório war da aplicação(ou o diretório onde está o manifest.json). Com isso a extensão estará rodando, é só clicar no ícone dela ao lado da barra de endereços.</p>
<p>Exemplo Oficial: <a href="http://code.google.com/chrome/extensions/getstarted.html">http://code.google.com/chrome/extensions/getstarted.html</a></p>
<p>Código-Fonte deste exemplo: <a href="http://gwtchrome.googlecode.com/files/ExtensaoChrome.7z">http://gwtchrome.googlecode.com/files/ExtensaoChrome.7z</a></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Estava olhando os exemplos de como criar extensões para o Chrome, e vi que assim como o no Firefox, as extensões não são nada mais que Javascript(mas no caso do Firefox tem os XUL envolvidos e etc&#8230;). Então pensei eu: “GWT gera Javascript, então ele deve funcionar para criar extensões”. Fiz uns testes básico e conclui. Funcionou. E aqui escrevo um tutorial dizendo como fiz para fazer isso funcionar. O objetivo desse tutorial não é ensinar GWT, é somente mostrar como configurar um projeto do GWT para rodar como uma extensão do Chrome.<br />
Antes de tudo, vou dar um aviso que vai lhe poupar de alguns problemas: Salve todos os arquivos do exemplo com codificação UTF-8.<br />
Como exemplo, criei uma aplicação para twitter bem simples, que só lê as últimas mensagens de um usuário qualquer.<br />
Primeiramente criei uma aplicação no Eclipse chamada “ExtensaoChrome” com o pacote base chamado “com.serathiuk.chrome.extension.teste.client”.</p>
<p>Depois disso, alterei o arquivo &#8216;ExtensaoChrome.html&#8217; da pasta war, deixando apenas com o seguinte HTML:<br />
&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221;&gt;<br />
&lt;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;ExtensaoChrome.css&#8221;&gt;<br />
&lt;div id=&#8221;intro_panel&#8221;&gt;&lt;/div&gt;<br />
&lt;script type=&#8221;text/javascript&#8221; language=&#8221;javascript&#8221; src=&#8221;extensaochrome/extensaochrome.nocache.js&#8221;&gt;&lt;/script&gt;</p>
<p>Na pasta war, coloquei o arquivo icon.png(o mesmo do exemplo oficial, link no final) e o arquivo manifest.json, que tem o seguinte conteúdo:</p>
<p>{<br />
&#8220;name&#8221;: &#8220;Leitor de Twitter&#8221;,<br />
&#8220;version&#8221;: &#8220;1.0&#8243;,<br />
&#8220;description&#8221;: &#8220;Exemplo de extensão para Chrome utilizando GWT do site serathiuk.com.&#8221;,<br />
&#8220;browser_action&#8221;: {<br />
&#8220;default_title&#8221;: &#8220;Leitor de Twitter&#8221;,<br />
&#8220;default_icon&#8221;: &#8220;icon.png&#8221;,<br />
&#8220;popup&#8221;: &#8220;ExtensaoChrome.html&#8221;<br />
},<br />
&#8220;permissions&#8221;: [<br />
"http://www.twitter.com/"<br />
]<br />
}</p>
<p>Depois disso, apaguei aqueles arquivos que são criados pelo exemplo, deixando apenas o “ExtensaoChrome.java”, que é o Entry Point da aplicação. E no EntryPoint, apaguei todas aquelas informações do exemplo, e colocando o código para fazer a aplicação funcionar:<br />
public class ExtensaoChrome implements EntryPoint {</p>
<p>private TextBox txtLogin;<br />
private FlexTable tableTwitter;</p>
<p>public void onModuleLoad() {<br />
HorizontalPanel h = new HorizontalPanel();<br />
txtLogin = new TextBox();<br />
h.add(txtLogin);<br />
Button btn = new Button(&#8220;Carregar&#8221;);<br />
btn.addClickHandler(new ClickHandler() {<br />
public void onClick(ClickEvent event) {<br />
carregarTwitts();<br />
}<br />
});<br />
h.add(btn);</p>
<p>ScrollPanel align = new ScrollPanel();<br />
align.setWidth(&#8220;100%&#8221;);<br />
align.setHeight(&#8220;320&#8243;);</p>
<p>tableTwitter = new FlexTable();<br />
tableTwitter.setCellPadding(1);<br />
tableTwitter.setCellSpacing(1);<br />
tableTwitter.setBorderWidth(1);<br />
align.add(tableTwitter);</p>
<p>VerticalPanel v = new VerticalPanel();<br />
v.add(h);<br />
v.add(align);<br />
RootPanel.get(&#8220;intro_panel&#8221;).add(v);<br />
}</p>
<p>protected void carregarTwitts() {<br />
String url = &#8220;http://twitter.com/statuses/user_timeline/&#8221;+txtLogin.getValue()+&#8221;.json&#8221;;<br />
RequestBuilder req = new RequestBuilder(RequestBuilder.GET, URL.encode(url));<br />
try {<br />
req.sendRequest(null,<br />
new RequestCallback() {<br />
public void onResponseReceived(Request request, Response response) {<br />
preencheValores(response.getText());<br />
}</p>
<p>public void onError(Request request, Throwable exception) {<br />
showError(exception);<br />
}<br />
}<br />
);<br />
} catch(RequestException e) {<br />
showError(e);<br />
}<br />
}</p>
<p>protected void preencheValores(String jsonText) {<br />
tableTwitter.removeAllRows();</p>
<p>JSONArray json = (JSONArray) JSONParser.parse(jsonText);<br />
for(int i = 0; i &lt; json.size(); i++) {<br />
JSONObject obj = (JSONObject) json.get(i);<br />
if(obj != null) {<br />
JSONString str = (JSONString) obj.get(&#8220;text&#8221;);<br />
tableTwitter.setText(i+1, 0, str.stringValue());<br />
}<br />
}<br />
}</p>
<p>protected void showError(Throwable e) {<br />
Window.alert(e.getMessage());<br />
}<br />
}</p>
<p>Agora é só compilar o projeto e adicionar a extensão ao Chrome. Para fazer isso, digite o endereço “chrome://extensions/”, clicar em “Load Unpacked Extension” e selecionar o diretório war da aplicação(ou o diretório onde está o manifest.json). Com isso a extensão estará rodando, é só clicar no ícone dela ao lado da barra de endereços.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2009/11/escrevendo-uma-extensao-de-twitter-para-o-google-chrome-utilizando-o-google-web-toolkitgwt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Configurando o SmartGWT em um projeto do Eclipse</title>
		<link>http://serathiuk.com/2009/11/configurando-o-smartgwt-em-um-projeto-do-eclipse/</link>
		<comments>http://serathiuk.com/2009/11/configurando-o-smartgwt-em-um-projeto-do-eclipse/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 14:56:07 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[artigos]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google web toolkit]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[smargwt]]></category>
		<category><![CDATA[smartclient]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[artigo]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[smartgwt]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://serathiuk.com/blog/?p=134</guid>
		<description><![CDATA[A muito tempo tinha falado em escrever um artigo sobre SmartGWT, mas acabei &#8216;se enrolando&#8217; e isso nunca aconteceu. Mas nos últimos dias, tenho acompanhado as estatistícas do blog com mais atenção, pois configurei o Google Analytics. Por lá, que boa parte dos visitantes daqui do blog, chegam nele pelo Google, e atrás de artigos [...]]]></description>
			<content:encoded><![CDATA[<p>A muito tempo tinha falado em escrever um artigo sobre SmartGWT, mas acabei &#8216;se enrolando&#8217; e isso nunca aconteceu. Mas nos últimos dias, tenho acompanhado as estatistícas do blog com mais atenção, pois configurei o Google Analytics. Por lá, que boa parte dos visitantes daqui do blog, chegam nele pelo Google, e atrás de artigos sobre SmartGWT. Eu sempre postei notícias sobre os lançamentos aqui, mas nunca tinha feito um artigo sobre. Esse é o primeiro, e acredito que será o início de uma série deles.</p>
<p>Irei mostrar como configurar um projeto já criado para funcionar com SmartGWT. Já escrevi um artigo a algum tempo mostrando <a href="http://serathiuk.com/blog/?p=61">como configurar o Eclipse com o plugin do Google</a> e criar um projeto do Eclipse com ele. Esse artigo explica como utilizar o Google Plugin com o GWT 1.6, mas ele funciona muito bem com o 1.7.*, e também funciona com o GWT 2.0 MS2. E o artigo foi testado e escrito se baseando no SmartGWT 1.3.</p>
<p>Para configurar o SmartGWT em um projeto já criado, siga os seguintes passos:</p>
<ol>
<li>Baixe o SmartGWT do seguinte local: <a href="http://code.google.com/p/smartgwt/" target="_blank">http://code.google.com/p/smartgwt/</a></li>
<li>Descompacte o arquivo .zip e copie o arquivo smartgwt.jar para o diretório “war/WEB-INF/lib” do seu projeto.</li>
<li>Dê um refresh em seu projeto (clique em cima do nome dele no Package Explorer e pressione F5).</li>
<li>Vá em “Configure Build Path” (botão direito em cima do projeto no Package Explorer, Build Path, Configure Build Path).</li>
<li>Vá em Libraries, clique em “Add Jar” e adicione o smartgwt.jar a lista de bibliotecas.</li>
<li>Vá no arquivo de configuração do módulo (um que termina com a extensão *.gwt.xml) e adicione a seguinte linha: “&lt;inherits name=&#8217;com.smartgwt.SmartGwt&#8217;/&gt;”</li>
<li>Vá no arquivo html(o que a aplicação carrega por padrão quando ela inicia) e adicione a seguinte linha dentro do HEAD: “&lt;script&gt; var isomorphicDir = &#8220;[NOME_DO_MODULO]/sc/&#8221;; &lt;/script&gt;<script type="text/javascript"></script>”. O “[NOME_DO_MODULO]” deve ser substituído pelo mesmo nome que está no arquivo “.gwt.xml”. Lá ele está no atributo rename-to da tag module.</li>
</ol>
<p>Com isso o projeto já deve funcionar com o SmartGWT. Se quiser um exemplo pronto para teste, cole o seguinte conteúdo em seu EntryPoint, adicionando as linhas dentro do seu onModule.</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:600px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">final</span> TextItem txt <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TextItem<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nome&quot;</span>, <span style="color: #0000ff;">&quot;Nome&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a> btn <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Clique&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
btn.<span style="color: #006633;">addClickHandler</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ClickHandler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span>ClickEvent event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Awindow+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Window</span></a>.<span style="color: #006633;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#41;</span> txt.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
DynamicForm form <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DynamicForm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
form.<span style="color: #006633;">setFields</span><span style="color: #009900;">&#40;</span>txt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
VLayout v <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> VLayout<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
v.<span style="color: #006633;">addMember</span><span style="color: #009900;">&#40;</span>form<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
v.<span style="color: #006633;">addMember</span><span style="color: #009900;">&#40;</span>btn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
v.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Salve e tente rodar o exemplo. Caso funcionar corretamente, irá aparecer uma caixa de texto com um botão. Quando clicar no botão, irá aparecer em um alert o que foi digitado no campo de texto.</p>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2009/11/configurando-o-smartgwt-em-um-projeto-do-eclipse/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Introdução ao UIBinder do GWT 2.0</title>
		<link>http://serathiuk.com/2009/10/introducao-ao-uibinder-do-gwt-2-0/</link>
		<comments>http://serathiuk.com/2009/10/introducao-ao-uibinder-do-gwt-2-0/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 14:31:51 +0000</pubDate>
		<dc:creator>Ricardo Serathiuk</dc:creator>
				<category><![CDATA[artigos]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google web toolkit]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[softwares]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[artigo]]></category>

		<guid isPermaLink="false">http://serathiuk.com/blog/?p=130</guid>
		<description><![CDATA[Uma das grandes novidades do GWT 2.0 é o UIBinder. UIBinder é uma funcionalidade que permite que você separe o layout da aplicação da parte de “negócio”(validações, interações com o servidor, etc.). Permite que você deixe toda a parte de layout separadas em arquivos XML, deixando para os arquivos Java (que irão ser compilados e [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das grandes novidades do GWT 2.0 é o UIBinder. UIBinder é uma funcionalidade que permite que você separe o layout da aplicação da parte de “negócio”(validações, interações com o servidor, etc.). Permite que você deixe toda a parte de layout separadas em arquivos XML, deixando para os arquivos Java (que irão ser compilados e transformados em Javascript) somente o que importa do código. Essa funcionalidade facilita bastante as coisas, pois melhora o entendimento e a ajuda na hora de dar manutenção no código fonte das telas.  Aposto que quem já utilizou JSF (principalmente o 2.0) e o Adobe Flex, irá se sentir em casa.</p>
<p>Vou dar um exemplo simples, que não é um Hello World como você conhece. È só um formulário com dois campos, que adiciona tudo o que é preenchido em uma tabela. Não envolve comunicação com o servidor e nem nada. È só para dar pano de fundo para mostrar como funciona todos os elementos que fazem o UIBinder funcionar. Bom, vamos parar de blá blá blá e vamos para o que interessa.</p>
<p>Primeiramente, vamos configurar o módulo do UIBinder no GWT 2.0. Acredito que você já tenha um projeto GWT 2.0 criado e funcionando neste momento. Se não tiver, leia antes o tutorial que escrevi sobre. Para configurar e habilitar o UIBinder no GWT 2.0, apenas adicione a seguinte linha no seu arquivo de configuração do GWT(*.gwt.xml) :</p>
<blockquote><p>&lt;inherits name=&#8217;com.google.gwt.uibinder.UiBinder&#8217;/&gt;</p></blockquote>
<p>Depois disso vamos criar o arquivo de tela. O nome que estou dando para o mesmo é HelloWorld(tá, é um Hello World) que está no pacote ‘com.serathiuk.gwt2teste.client’ no meu caso. Sinta-se livre para mudar. O nome do arquivo será HelloWorld.ui.xml. Detalhe para o ‘ui.xml’, pois esse é o padrão da framework.</p>
<blockquote><p>&lt;!&#8211; Arquivo HelloWorld.ui.xml &#8211;&gt;</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;ui:<span style="text-decoration: underline;">U</span>iBinder xmlns:ui=&#8217;urn:ui:com.google.gwt.uibinder&#8217;</p>
<p>xmlns:g=&#8217;urn:import:com.google.gwt.user.client.ui&#8217;&gt;</p>
<p>&lt;g:HTMLPanel&gt;</p>
<p>Nome: &lt;g:TextBox ui:field=&#8221;txtNome&#8221; /&gt;&lt;br/&gt;</p>
<p>E-mail: &lt;g:TextBox ui:field=&#8221;txtEmail&#8221; /&gt;&lt;br/&gt;</p>
<p>&lt;g:Button ui:field=&#8221;btnTeste&#8221; text=&#8221;Teste&#8221; /&gt;</p>
<p>&lt;br/&gt;</p>
<p>&lt;g:FlexTable ui:field=&#8221;flexTable&#8221;/&gt;</p>
<p>&lt;/g:HTMLPanel&gt;</p>
<p>&lt;/ui:UiBinder&gt;</p></blockquote>
<p>Agora iremos criar o arquivo HelloWorld.java, que se encontra no mesmo pacote que o arquivo de tela(HelloWorld.ui.xml).</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:600px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//Arquivo HelloWorld.java</span><br />
<br />
<span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.serathiuk.gwt2teste.client</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.core.client.GWT</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.event.dom.client.ChangeEvent</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.event.dom.client.ClickEvent</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.uibinder.client.UiBinder</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.uibinder.client.UiField</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.uibinder.client.UiHandler</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.user.client.Window</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.user.client.ui.Button</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.user.client.ui.Composite</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.user.client.ui.FlexTable</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.user.client.ui.TextBox</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.user.client.ui.Widget</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloWorld <span style="color: #000000; font-weight: bold;">extends</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Acomposite+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Composite</span></a> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">interface</span> Binder <span style="color: #000000; font-weight: bold;">extends</span> UiBinder <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> Binder binder <span style="color: #339933;">=</span> GWT.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span>Binder.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
@UiField <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a> btnTeste<span style="color: #339933;">;</span><br />
<br />
@UiField TextBox txtNome<span style="color: #339933;">;</span><br />
<br />
@UiField TextBox txtEmail<span style="color: #339933;">;</span><br />
<br />
@UiField FlexTable flexTable<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> HelloWorld<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
initWidget<span style="color: #009900;">&#40;</span>binder.<span style="color: #006633;">createAndBindUi</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
@UiHandler<span style="color: #009900;">&#40;</span>“btnTeste”<span style="color: #009900;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClickBtnTeste<span style="color: #009900;">&#40;</span>ClickEvent event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000066; font-weight: bold;">int</span> num <span style="color: #339933;">=</span> flexTable.<span style="color: #006633;">getRowCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
flexTable.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>num, 0, txtNome.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
flexTable.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>num, 1, txtEmail.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
@UiHandler<span style="color: #009900;">&#40;</span>“txtNome”<span style="color: #009900;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onChangeTxtNome<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Achangeevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ChangeEvent</span></a> event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Awindow+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Window</span></a>.<span style="color: #006633;">alert</span><span style="color: #009900;">&#40;</span>txtNome.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></div>
<p>E como ficou meu onModuleLoad do meu EntryPoint:</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:600px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onModuleLoad<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
RootPanel.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> HelloWorld<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>O UIBinder funciona da seguinte maneira. No arquivo XML da tela, temos os componentes TextBox txtNome e txtEmail e existe um Button chamado btnTeste. Também tem uma FlexTable com o nome flexTable. Você já deve ter percebido que todos esses componentes tem o atributo “ui:field”.  Esse atributo é responsável por dizer qual será o atributo da classe Java que aquele componente representa. Na classe Java, temos os atributos txtNome, txtEmail, btnTeste e flexTable também, e eles estão anotados com a annotation “UIField”.  Essa anotação é responsável por dizer que aquele atributo representa um componente na tela. O atributo deve ter o mesmo nome que o correspondente na tela, e não pode ser private. Você não precisa se preocupar em instanciar esse atributo, pois via Injeção de Dependência, o próprio GWT se encarrega disso. Você pode trabalhar normalmente com o componente, mudando tamanho, configurações, etc&#8230; pelo Java. Mas recomendo deixar essas coisas para o arquivo de tela.</p>
<p>Para adicionar um evento a um componente é simples. É criado um método, com qualquer nome que desejar, e utiliza a annotation ‘UiHandler’ neste método. Essa annotation irá receber um valor, que é o componente da tela que ele representa. Em nosso exemplo existem 2. O ‘onClickBtnTeste’ e o ‘onChangeTxtNome’, que poderiam ser trocados facilmente por ‘aoClicarNoBtnTeste’ e ‘aoAlterarTxtNome’. Vai do gosto do freguês.  E eles sempre iriam ser chamados quando o botão fosse clicado no primeiro caso, ou quando o nome fosse alterado, no segundo caso.</p>
<p>Mas você deve estar se perguntando: “O nome do método pode ter o nome que eu desejar, e o campo Nome pode ter mais de um tipo de evento, mas não é especificado na annotation qual evento que eu quero. Como ele sabe é aquele método deve ser chamado no onChange?”. È pelo parâmetro que é passado no método. No caso do onClickBtnTeste, ele recebe como parâmetro um objeto da classe ClickEvent, enquanto o onChangeTxtNome recebe como parâmetro um objeto da classe ChangeEvent. Se um dia resolver mudar o tipo de evento que aquele método representa, basta apenas alterar o parâmetro para o correspondente da ação que você deseja.</p>
<p>Lembrando que no objeto do parâmetro vem muitas informações úteis, como o componente que invocou esse evento, funcionalidade de parar o evento e algumas coisas a mais.</p>
<p>Acho que deu para entender como começar a utilizar o UIBinder. Acredito que ele se tornará o novo padrão para desenvolvimento com GWT, e acredito que nas próximas versões do Google Plugin, teremos mais facilidades para utiliza-lo. Não demorará muito para aparecer RAD’s utilizando a tecnologia.</p>
<p>Qualquer crítica, sugestão e essas coisas entrem em contato. <img src='http://serathiuk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://serathiuk.com/2009/10/introducao-ao-uibinder-do-gwt-2-0/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
		
