<?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>Os Lunáticos</title>
	<atom:link href="http://oslunaticos.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://oslunaticos.com.br</link>
	<description>TI é aqui!</description>
	<lastBuildDate>Tue, 15 May 2012 20:00:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Android &#8211; INSERT no SQLite com velocidade.</title>
		<link>http://oslunaticos.com.br/2012/05/android-insert-no-sqlite-com-velocidade/</link>
		<comments>http://oslunaticos.com.br/2012/05/android-insert-no-sqlite-com-velocidade/#comments</comments>
		<pubDate>Tue, 15 May 2012 20:00:50 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/?p=1837</guid>
		<description><![CDATA[Problema Desenvolvendo uma aplicação para força de vendas na plataforma Android, foi verificado que a carga inicial do banco de dados estava muito demorada. O procedimento, não muito complexo, implica em: 1) Conexão com o FTP. 2) Download de um arquivo compactado. 3) Descompactação do arquivo. 4) Carga das informações no banco de dados. As [...]]]></description>
			<content:encoded><![CDATA[<p><strong><img class="alignleft" style="margin: 5px;" title="Android" src="http://lerebooks.files.wordpress.com/2011/10/android.png" alt="" width="222" height="213" />Problema</strong></p>
<p>Desenvolvendo uma aplicação para força de vendas na plataforma Android, foi verificado que a carga inicial do banco de dados estava muito demorada.</p>
<p>O procedimento, não muito complexo, implica em:</p>
<p>1) Conexão com o FTP.</p>
<p>2) Download de um arquivo compactado.</p>
<p>3) Descompactação do arquivo.</p>
<p>4) Carga das informações no banco de dados.</p>
<p>As três primeiras etapas foram desenvolvidas conforme o desejado, mas a carga das informações no banco de dados se tornou um grande problema.<span id="more-1837"></span></p>
<p>O arquivo <a title="CSV" href="http://pt.wikipedia.org/wiki/Comma-separated_values" target="_blank">CSV</a> do cadastro de produto possui aproximadamente 900Kb e 10.000 registros. Realizando a carga deste arquivo, foi verificado que o <a title="SQLite" href="http://sqlite.org/" target="_blank">SQLite</a> estava fazendo 16 instruções de INSERT por segundo em um <a title="Motorola Defy+" href="http://www.gsmarena.com/motorola_defy+-4098.php" target="_blank">Morotola Defy+</a>.</p>
<p>Desta forma a carga da tabela de produtos demora aproximadamente 10 minutos para ser realizada, tornando totalmente incompatível com as expectativas do software.</p>
<p>Buscando uma solução, voltamos para a prancheta e com a ajuda de <a title="Walter Mello" href="http://oloboeaovelha.blogspot.com.br/" target="_blank">Walter Mello</a> e <a title="Clemar Folly" href="http://oslunaticos.com.br/author/clemarjr/" target="_blank">Clemar Folly</a>, foi encontrado o caminho desejado.</p>
<p>&nbsp;</p>
<p><strong>Estudo</strong></p>
<p>Com certeza a solução que será apresentada foi encontrada antes desta explicação, mas não vamos inverter a ordem.</p>
<p>Na página de FAQs do SQLite encontramos o seguinte texto:</p>
<blockquote><p>Atualmente, o SQLite pode fazer facilmente 50.000 ou mais instruções de INSERT por segundo em um computador mediano.</p></blockquote>
<p>&nbsp;</p>
<blockquote><p>A velocidade da transação é limitada pela velocidade da unidade de disco porque, por padrão, o SQLite aguarda até que os dados realmente estejam armazenados com segurança no disco, antes que a transação esteja completa. Dessa forma, se por acaso houver falha na energia ou algum problema no sistema operacional, seus dados ainda estão seguros. Para maiores detalhes leia sobre <a title="Atomic Commit" href="http://www.sqlite.org/atomiccommit.html" target="_blank">Atomic Commit</a>.</p></blockquote>
<blockquote><p>Por padrão, cada instrução INSERT tem a sua própria transação, mas se forem agrupadas várias instruções INSERT dentro de um bloco BEGIN &#8211; COMMIT, então todas as inserções são agrupadas em uma única transação. O tempo necessário para confirmar a transação é amortizado em todas as instruções de inserção, assim o tempo da instrução de inserção é bastante reduzido.</p></blockquote>
<p>O texto original pode ser encontrado em:</p>
<p><a href="http://www.sqlite.org/faq.html#q19">http://www.sqlite.org/faq.html#q19</a></p>
<p>&nbsp;</p>
<p><strong>Solução</strong></p>
<p>Uma solução simples vale mais que mil palavras, assim como verificado no estudo foram adicionadas as linhas de BEGIN e COMMIT para o aumento da velocidade.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> addListaProdutos<span style="color: #009900;">&#40;</span><span style="color: #003399;">List</span> lista<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	SQLiteDatabase db <span style="color: #339933;">=</span> dh.<span style="color: #006633;">getWritableDatabase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	db.<span style="color: #006633;">beginTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Produto produto <span style="color: #339933;">:</span> lista<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		ContentValues values <span style="color: #339933;">=</span> getProdutoValues<span style="color: #009900;">&#40;</span>produto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		db.<span style="color: #006633;">insert</span><span style="color: #009900;">&#40;</span>getNomeTabela<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #000066; font-weight: bold;">null</span>, values<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	db.<span style="color: #006633;">setTransactionSuccessful</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	db.<span style="color: #006633;">endTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	db.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p><strong>Conclusão</strong></p>
<p>Com o código apresentado acima, o tempo de carga da tabela de produtos passou de 10 minutos para perfeitos 6 segundos.</p>
<p>Espero ter ajudado. Obrigado.</p>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2012/05/android-insert-no-sqlite-com-velocidade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lyrics no OS X</title>
		<link>http://oslunaticos.com.br/2012/03/lyrics-no-os-x/</link>
		<comments>http://oslunaticos.com.br/2012/03/lyrics-no-os-x/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 03:16:30 +0000</pubDate>
		<dc:creator>Felippe Montez</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[evillyrics]]></category>
		<category><![CDATA[lyrics]]></category>
		<category><![CDATA[música]]></category>
		<category><![CDATA[musiXmatch]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/?p=1831</guid>
		<description><![CDATA[O excelente software para Windows, Evillyrics, que faz a busca da letra da música que está tocando no momento no seu player favorito, infelizmente não tem uma versão para OS X. Após procurar um pouco e testar diversos widgets para a Dashboard, encontrei na própria App Store da Apple um aplicativo pequeno e prático que [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><img class="alignleft" src="http://oslunaticos.com.br/wp-content/uploads/2012/03/wpid-mzi.sfmzocoa.175x175-75-2012-03-2-00-16.png" alt="wpid-mzi.sfmzocoa.175x175-75-2012-03-2-00-16.png" width="167" height="162" /> O excelente software para Windows, <a href="http://www.evillabs.sk/evillyrics/">Evillyrics</a>, que faz a busca da letra da música que está tocando no momento no seu player favorito, infelizmente não tem uma versão para OS X.</p>
<p style="text-align: left;">Após procurar um pouco e testar diversos widgets para a Dashboard, encontrei na própria App Store da Apple um aplicativo pequeno e prático que dá conta do recado, o <a href="http://itunes.apple.com/br/app/musixmatch-lyrics/id454723812?mt=12">musiXmatch</a>.</p>
<p style="text-align: left;">Ele está disponível para download gratuitamente, e aconselho a todos o download!</p>
<p><img class="alignleft" src="http://oslunaticos.com.br/wp-content/uploads/2012/03/wpid-ScreenShot2012-03-02at12.22.49AM-2012-03-2-00-16.png" alt="wpid-ScreenShot2012-03-02at12.22.49AM-2012-03-2-00-16.png" width="157" height="253" /></p>
<p style="text-align: left;"> As opções de interface são as normais: escolha da fonte, tamanho, cor, etc.</p>
<p style="text-align: left;"> E integrado com as redes sociais, ainda dá pra dar um “Curtir” ou “Twittar” a letra da música.</p>
<p style="text-align: left;"> Não sei quanto a disponibilidade de letras de músicas nacionais. Quem tiver como testar, posta ai nos comentários!</p>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2012/03/lyrics-no-os-x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Criando TableModel para ResultSet</title>
		<link>http://oslunaticos.com.br/2012/03/criando-tablemodel-para-resultset/</link>
		<comments>http://oslunaticos.com.br/2012/03/criando-tablemodel-para-resultset/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 22:26:21 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Intermediário]]></category>
		<category><![CDATA[ResultSet]]></category>
		<category><![CDATA[TableModel]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/?p=1817</guid>
		<description><![CDATA[Antes de começar a utilizar o Hibernate, acredito que grande parte dos desenvolvedores tiverem que desvendar os &#8220;mistérios&#8221; da classe JTable e tudo que gira ao redor dela. Em algumas situações que necessitamos de consultas específicas para o aumento de performance, pode ser prudente fugir do Hibernate e partir direto para o jTDS. Dessa forma [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://creativecommons.org/licenses/by-sa/3.0/" rel="license"><img class="aligncenter" style="border-width: 0px;" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png" alt="Licença Creative Commons" width="80" height="15" /></a></p>
<p><img class="alignleft" src="http://t1.gstatic.com/images?q=tbn:ANd9GcSFHesO_73MkBjFXISAld8BVZJQPzK0udi7ckOgSQF42HRZaWjUcMLt5CP2Gg" alt="Java" width="117" height="155" />Antes de começar a utilizar o <a href="http://www.hibernate.org/" target="_blank">Hibernate</a>, acredito que grande parte dos desenvolvedores tiverem que desvendar os &#8220;mistérios&#8221; da classe <a href="http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html" target="_blank">JTable</a> e tudo que gira ao redor dela.</p>
<p>Em algumas situações que necessitamos de consultas específicas para o aumento de performance, pode ser prudente fugir do Hibernate e partir direto para o <a href="http://jtds.sourceforge.net/" target="_blank">jTDS</a>.</p>
<p>Dessa forma o <a href="http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html" target="_blank">ResultSet</a> deve ser transferido para dentro de um <a href="http://docs.oracle.com/javase/7/docs/api/javax/swing/table/TableModel.html" target="_blank">TableModel</a>.</p>
<p><span id="more-1817"></span></p>
<h3>Let&#8217;s code!</h3>
<p>Aqui é apresentada a classe GenericResultSerModel que é responsável pelo serviço.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">br.com.oslunaticos.util</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.ResultSet</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.ResultSetMetaData</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.SQLException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.ArrayList</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.List</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.table.AbstractTableModel</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 *
 * @author Eduardo Folly
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> GenericResultSetModel <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">AbstractTableModel</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">List</span> lista <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> colunas<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> GenericResultSetModel<span style="color: #009900;">&#40;</span><span style="color: #003399;">ResultSet</span> rs<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">SQLException</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">ResultSetMetaData</span> rsmd <span style="color: #339933;">=</span> rs.<span style="color: #006633;">getMetaData</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span> cols <span style="color: #339933;">=</span> rsmd.<span style="color: #006633;">getColumnCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> tipos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span>cols<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        colunas <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span>cols<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> c <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> c <span style="color: #339933;">&lt;=</span> cols<span style="color: #339933;">;</span> c<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            tipos<span style="color: #009900;">&#91;</span>c <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rsmd.<span style="color: #006633;">getColumnType</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            colunas<span style="color: #009900;">&#91;</span>c <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rsmd.<span style="color: #006633;">getColumnName</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>rs.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> objs <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span>cols<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> c <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> c <span style="color: #339933;">&lt;=</span> cols<span style="color: #339933;">;</span> c<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">int</span> tipo <span style="color: #339933;">=</span> tipos<span style="color: #009900;">&#91;</span>c <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tipo <span style="color: #339933;">==</span> java.<span style="color: #006633;">sql</span>.<span style="color: #003399;">Types</span>.<span style="color: #006633;">VARCHAR</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    objs<span style="color: #009900;">&#91;</span>c <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rs.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tipo <span style="color: #339933;">==</span> java.<span style="color: #006633;">sql</span>.<span style="color: #003399;">Types</span>.<span style="color: #006633;">FLOAT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    objs<span style="color: #009900;">&#91;</span>c <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rs.<span style="color: #006633;">getFloat</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                    objs<span style="color: #009900;">&#91;</span>c <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rs.<span style="color: #006633;">getObject</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>objs<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getRowCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> lista.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getColumnCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> colunas.<span style="color: #006633;">length</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> getValueAt<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> rowIndex, <span style="color: #000066; font-weight: bold;">int</span> columnIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> row <span style="color: #339933;">=</span> lista.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>rowIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> row<span style="color: #009900;">&#91;</span>columnIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getColumnName<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> column<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> colunas<span style="color: #009900;">&#91;</span>column<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A classe foi herdada de AbstractTableModel para que possa ter mais flexibilidade e usufruir das funcionalidades do <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" target="_blank">MVC</a> implementado.</p>
<p>&nbsp;</p>
<h3>Melhorias</h3>
<p>Esperando um mundo melhor:</p>
<ul>
<li><span style="line-height: 18px;">Implementação de uma coleção para o controle de colunas e tipos.</span></li>
<li><span style="line-height: 18px;">Desenvolvimento para os demais tipos de <a href="http://docs.oracle.com/javase/7/docs/api/java/sql/Types.html" target="_blank">java.sql.Types</a>, mas isso pode variar de acordo com as necessidades.</span></li>
<li><span style="line-height: 18px;">Melhorias distintas e análises de performance são sempre bem vindas.</span></li>
</ul>
<div><span style="line-height: 18px;"><br />
</span></div>
<h3>Conclusão</h3>
<p>Apesar de ser uma classe bem simples, é uma grande ajuda quando precisamos exibir o ResultSet em uma tabela de uma forma rápida. Um procedimento muito comum no cotidiano do desenvolvedor.</p>
<p>Obrigado.</p>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2012/03/criando-tablemodel-para-resultset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Client UPnP e DLNA para dispositivos iOS</title>
		<link>http://oslunaticos.com.br/2012/02/client-upnp-e-dlna-para-dispositivos-ios/</link>
		<comments>http://oslunaticos.com.br/2012/02/client-upnp-e-dlna-para-dispositivos-ios/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 01:13:55 +0000</pubDate>
		<dc:creator>Felippe Montez</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[dlna]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[música]]></category>
		<category><![CDATA[upnp]]></category>
		<category><![CDATA[vídeo]]></category>
		<category><![CDATA[windows media player]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/?p=1809</guid>
		<description><![CDATA[Estava procurando um client DLNA para o OS X, para poder acessar o conteúdo disponibilizado no meu desktop com Windows 7, quando me deparei com a possibilidade de um client para iOS. Pensei: por que não?! Depois de testar alguns softwares, achei o media:connect, um excelente client para iOS. Através da rede wi-fi, consigo agora, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Estava procurando um client DLNA para o OS X, para poder acessar o conteúdo disponibilizado no meu desktop com Windows 7, quando me deparei com a possibilidade de um client para iOS.</p>
<p style="text-align: left;">Pensei: por que não?!</p>
<p style="text-align: left;">Depois de testar alguns softwares, achei o <a href="http://itunes.apple.com/br/app/media-connect-for-dlna-upnp/id335036887?mt=8" target="_blank">media:connect</a>, um excelente client para iOS.</p>
<p style="text-align: left;">Através da rede wi-fi, consigo agora, utilizando tanto o iPhone quanto o iPad, fazer o streaming das minhas músicas e vídeos diretamente para os devices. Excelente para churrascos e festas, onde fica fácil levar apenas o celular e conectá-lo a speakers externos. <img src='http://oslunaticos.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">Após abrir instalar e abrir o software, ele irá listar os media servers disponíveis na rede:</p>
<p style="text-align: left;"><img src="http://oslunaticos.com.br/wp-content/uploads/2012/02/wpid-mediaconnect1-2012-02-24-23-13.jpg" alt="wpid-mediaconnect1-2012-02-24-23-13.jpg" width="200" height="300" /></p>
<p style="text-align: left;">Após escolher o server desejado, a interface fica simples, como do aplicativo Music (antigo iPod):</p>
<p style="text-align: left;"><img src="http://oslunaticos.com.br/wp-content/uploads/2012/02/wpid-mediaconnect2-2012-02-24-23-13.jpg" alt="wpid-mediaconnect2-2012-02-24-23-13.jpg" width="201" height="301" /></p>
<p style="text-align: left;">Depois disso, só escolher a música desejada e aproveitar o som! =)</p>
<p style="text-align: left;"><em>* As imagens utilizadas foram copiadas do página do app na iTunes store.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2012/02/client-upnp-e-dlna-para-dispositivos-ios/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Corretor ortográfico em Java</title>
		<link>http://oslunaticos.com.br/2012/02/corretor-ortografico-em-java/</link>
		<comments>http://oslunaticos.com.br/2012/02/corretor-ortografico-em-java/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 00:09:46 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Dicionário]]></category>
		<category><![CDATA[Hunspell]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/?p=1772</guid>
		<description><![CDATA[Buscando uma solução de um corretor ortográfico para adicioná-lo em uma aplicação desenvolvida em Java. Comecei a pesquisa no Google e os primeiros quatro links foram de desenvolvedores tentando realizar a mesma implementação e não tendo muito sucesso. Os demais links não estavam muito relacionados ao assunto. Vendo este cenário, resolvi aprofundar a pesquisa baseando [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://creativecommons.org/licenses/by-sa/3.0/" rel="license"><img class="aligncenter" style="border-width: 0px;" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png" alt="Licença Creative Commons" width="80" height="15" /></a></p>
<p>Buscando uma solução de um corretor ortográfico para adicioná-lo em uma aplicação desenvolvida em Java. Comecei a pesquisa no Google e os primeiros quatro links foram de desenvolvedores tentando realizar a mesma implementação e não tendo muito sucesso. Os demais links não estavam muito relacionados ao assunto.</p>
<p>Vendo este cenário, resolvi aprofundar a pesquisa baseando no open-source e em softwares de sucesso, desta forma encontrei o <a title="Hunspell" href="http://hunspell.sourceforge.net/" target="_blank">Hunspell</a>, vindo do corretor ortográfico pai de todos, <a title="Aspell" href="http://aspell.net/" target="_blank">GNU Aspell</a>.</p>
<p>O Hunspell é o dicionário implementado no Open Office, Libre Office (um <a title="fork" href="http://pt.wikipedia.org/wiki/Fork" target="_blank">fork</a>), Firefox, Thunderbird, Chrome, etc. Então acho que está de bom tamanho para começar.</p>
<p>A melhor coisa é verificar o resultado final. A implementação foi feita para <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/text/JTextComponent.html" target="_blank">JTextComponent</a>, assim, podendo ser utilizada em <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/JTextArea.html" target="_blank">JTextArea</a>, <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/JTextPane.html" target="_blank">JTextPane</a>, <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/JEditorPane.html" target="_blank">JEditorPane</a>, <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/JTextField.html" target="_blank">JTextField</a>, <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/JFormattedTextField.html" target="_blank">JFormattedTextField</a> e <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/JPasswordField.html" target="_blank">JPasswordField</a> (não sei para que usar no campo de senha, mas pode ser usado).</p>
<p>Clique na <a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela1.jpg" target="_blank">imagem abaixo</a> e veja como ficou.</p>
<p>&nbsp;</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela1.jpg"><img class="aligncenter size-medium wp-image-1775" title="tela1" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela1-300x235.jpg" alt="" width="300" height="235" /></a></p>
<p><span id="more-1772"></span></p>
<p>Então como tento passar da fase de reinventar a roda e propor soluções com mais maturidade, fui clicando nos links e descobrindo todo o artefato já existente.</p>
<p>Dentro da página inicial do Hunspell (<a href="http://hunspell.sourceforge.net/">http://hunspell.sourceforge.net/</a>) existe uma série de <a href="http://en.wikipedia.org/wiki/Interface_(computing)" target="_blank">interfaces</a> e <a href="http://en.wikipedia.org/wiki/Porting" target="_blank">ports</a>.</p>
<p>Para o Java existem duas interfaces, uma utilizando <a href="http://en.wikipedia.org/wiki/Java_Native_Interface" target="_blank">JNI</a> (<a href="http://tkltrans.sourceforge.net/magyar/huncheck.tar.gz" target="_blank">link direto</a>) e a minha escolha, apresentada a seguir.</p>
<p>Desenvolvida através de <a href="https://github.com/twall/jna" target="_blank">JNA</a> por <a href="http://dren.dk/cv.html" target="_blank">Flemming Frandsen</a>, a <em><a href="http://dren.dk/hunspell.html" target="_blank">Java API for Hunspell</a></em>, possui uma boa documentação e port para Windows (x86 32bit), Linux (x86 32bit e 64bit) e OS X (PPC 32bit, x86 32bit e 64bit).</p>
<p>Perfeito, vamos fazer um checklist para verificar a situação:</p>
<ul>
<li><span style="line-height: 18px;"><strong>Idéia</strong> &#8211; Corretor ortográfico &#8211; Confere.</span></li>
<li><span style="line-height: 18px;"><strong>Linguagem</strong> &#8211; Java &#8211; Confere.</span></li>
<li><span style="line-height: 18px;"><strong>Implementação de dicionário de sucesso</strong> &#8211; Hunspell &#8211; Confere.</span></li>
<li><span style="line-height: 18px;"><strong>Interface para linguagem escolhida</strong> &#8211; Java API for Hunspell &#8211; Confere.</span></li>
<li><span style="line-height: 18px;"><strong>Dicionário</strong> &#8211; <span style="color: #ff0000;">Falta!</span></span></li>
<li><span style="line-height: 18px;"><strong>Código</strong> &#8211; <span style="color: #ff0000;">Falta!</span></span></li>
<li><span style="line-height: 18px;"><strong><a href="http://en.wikipedia.org/wiki/GUI" target="_blank">GUI</a></strong> &#8211; <span style="color: #ff0000;">Falta!</span></span></li>
</ul>
<p>&nbsp;</p>
<p>Agora com  as necessidades fica mais fácil de correr atrás para alcançar o objetivo.</p>
<p>&nbsp;</p>
<p><strong>O Dicionário</strong></p>
<p>Já que o Hunspell é utilizado pelo Open Office, bastou ir na <a href="http://wiki.services.openoffice.org/wiki/Dictionaries">página de dicionários</a> e assim ficou fácil para achar o Verificador Ortográfico <a href="http://www.broffice.org/verortografico">Vero</a>. que implementa o acordo ortográfico de 2009, já que o período para transição termina em 31 de dezembro de 2012.</p>
<p>Então: <strong>Dicionário</strong> &#8211; Confere.</p>
<p>&nbsp;</p>
<p><strong>Let&#8217;s code!</strong></p>
<p>Primeiramente faltam algumas especificações sobre o corretor ortográfico que está sendo desenvolvido.</p>
<p>Entre várias, ele precisa sublinhar as palavras incorretas e ter um menu popup que exiba sugestões para o usuário.</p>
<p>Para sublinhar as palavras existe a interface <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/text/Highlighter.html">Highlighter</a>, implementada por <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/text/DefaultHighlighter.html">DefaultHighlighter</a>, que pode ser instalada em qualquer <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/text/JTextComponent.html">JTextComponent</a>, criando uma camada sobre o componente que pode ser desenhada.</p>
<p>Inicialmente será criada a classe principal que concentrará o componente de texto, o dicionário e a camada de sublinhados. Também será implementado um <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/event/DocumentListener.html">DocumentListener</a> para monitorar a digitação e um <a href="http://docs.oracle.com/javase/6/docs/api/java/awt/event/MouseAdapter.html">MouseAdapter</a> para exibir um menu com as sugestões.</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">br.com.oslunaticos</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.stibocatalog.hunspell.Hunspell.Dictionary</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.Color</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.text.JTextComponent</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 *
 * @author Eduardo Folly
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Spellcheck <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> UnderlineHighlighter high<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Dictionary</span> dictionary<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">JTextComponent</span> textComponent<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Spellcheck<span style="color: #009900;">&#40;</span><span style="color: #003399;">JTextComponent</span> textComponent, <span style="color: #003399;">Dictionary</span> dictionary<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">textComponent</span> <span style="color: #339933;">=</span> textComponent<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Dicionário</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">dictionary</span> <span style="color: #339933;">=</span> dictionary<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Marcador</span>
        high <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> UnderlineHighlighter<span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">red</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        textComponent.<span style="color: #006633;">setHighlighter</span><span style="color: #009900;">&#40;</span>high<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Document Listener</span>
        SpellcheckDocumentListener sdl <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SpellcheckDocumentListener<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        textComponent.<span style="color: #006633;">getDocument</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">addDocumentListener</span><span style="color: #009900;">&#40;</span>sdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Mouse Adapter</span>
        SpellcheckMouseAdapter sma <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SpellcheckMouseAdapter<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        textComponent.<span style="color: #006633;">addMouseListener</span><span style="color: #009900;">&#40;</span>sma<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Dictionary</span> getDictionary<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> dictionary<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getText<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> textComponent.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> UnderlineHighlighter getHighlighter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> high<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">JTextComponent</span> getTextComponent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> textComponent<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p>Classe da camada de sublinhado específica para o corretor.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">br.com.oslunaticos</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.text.*</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 *
 * @author Eduardo Folly
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> UnderlineHighlighter <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">DefaultHighlighter</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Highlighter.<span style="color: #006633;">HighlightPainter</span></span> painter<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> UnderlineHighlighter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">red</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> UnderlineHighlighter<span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span> color<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        painter <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> UnderlineHighlightPainter<span style="color: #009900;">&#40;</span>color<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> addHighlight<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> p0, <span style="color: #000066; font-weight: bold;">int</span> p1<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">BadLocationException</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">addHighlight</span><span style="color: #009900;">&#40;</span>p0, p1, painter<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setDrawsLayeredHighlights<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">boolean</span> newValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>newValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">IllegalArgumentException</span><span style="color: #009900;">&#40;</span>
                    <span style="color: #0000ff;">&quot;Só é possível desenhar em camadas de destaque.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">setDrawsLayeredHighlights</span><span style="color: #009900;">&#40;</span>newValue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">class</span> UnderlineHighlightPainter <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">LayeredHighlighter.<span style="color: #006633;">LayerPainter</span></span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #003399;">Color</span> color<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/*
         *
         */</span>
        <span style="color: #000000; font-weight: bold;">public</span> UnderlineHighlightPainter<span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span> color<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">color</span> <span style="color: #339933;">=</span> color<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/*
         *
         */</span>
        @Override
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Shape</span> paintLayer<span style="color: #009900;">&#40;</span><span style="color: #003399;">Graphics</span> g, <span style="color: #000066; font-weight: bold;">int</span> p0, <span style="color: #000066; font-weight: bold;">int</span> p1, <span style="color: #003399;">Shape</span> viewBounds, <span style="color: #003399;">JTextComponent</span> editor, <span style="color: #003399;">View</span> view<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            g.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span>color<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #003399;">Rectangle</span> alloc<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>p0 <span style="color: #339933;">==</span> view.<span style="color: #006633;">getStartOffset</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> p1 <span style="color: #339933;">==</span> view.<span style="color: #006633;">getEndOffset</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>viewBounds <span style="color: #000000; font-weight: bold;">instanceof</span> <span style="color: #003399;">Rectangle</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    alloc <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Rectangle</span><span style="color: #009900;">&#41;</span> viewBounds<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                    alloc <span style="color: #339933;">=</span> viewBounds.<span style="color: #006633;">getBounds</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #003399;">Shape</span> shape <span style="color: #339933;">=</span> view.<span style="color: #006633;">modelToView</span><span style="color: #009900;">&#40;</span>p0, <span style="color: #003399;">Position.<span style="color: #006633;">Bias</span></span>.<span style="color: #006633;">Forward</span>, p1, <span style="color: #003399;">Position.<span style="color: #006633;">Bias</span></span>.<span style="color: #006633;">Backward</span>, viewBounds<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>shape <span style="color: #000000; font-weight: bold;">instanceof</span> <span style="color: #003399;">Rectangle</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        alloc <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Rectangle</span><span style="color: #009900;">&#41;</span> shape<span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                        alloc <span style="color: #339933;">=</span> shape.<span style="color: #006633;">getBounds</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">BadLocationException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #003399;">FontMetrics</span> fm <span style="color: #339933;">=</span> editor.<span style="color: #006633;">getFontMetrics</span><span style="color: #009900;">&#40;</span>editor.<span style="color: #006633;">getFont</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000066; font-weight: bold;">int</span> baseline <span style="color: #339933;">=</span> alloc.<span style="color: #006633;">y</span> <span style="color: #339933;">+</span> alloc.<span style="color: #006633;">height</span> <span style="color: #339933;">-</span> fm.<span style="color: #006633;">getDescent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
            <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> alloc.<span style="color: #006633;">x</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> alloc.<span style="color: #006633;">x</span> <span style="color: #339933;">+</span> alloc.<span style="color: #006633;">width</span><span style="color: #339933;">;</span> i <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">%</span> <span style="color: #cc66cc;">4</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    g.<span style="color: #006633;">drawLine</span><span style="color: #009900;">&#40;</span>i, baseline, i <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, baseline<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                    g.<span style="color: #006633;">drawLine</span><span style="color: #009900;">&#40;</span>i, baseline <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, i <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, baseline <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000000; font-weight: bold;">return</span> alloc<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/*
         *
         */</span>
        @Override
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> paint<span style="color: #009900;">&#40;</span><span style="color: #003399;">Graphics</span> g, <span style="color: #000066; font-weight: bold;">int</span> p0, <span style="color: #000066; font-weight: bold;">int</span> p1, <span style="color: #003399;">Shape</span> bounds, <span style="color: #003399;">JTextComponent</span> c<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">//throw new UnsupportedOperationException(&quot;Not supported yet.&quot;);</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p>O DocumentListener faz a verificação do texto a cada 2 segundos de inatividade de digitação.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">br.com.oslunaticos</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.stibocatalog.hunspell.Hunspell</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.event.DocumentEvent</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.event.DocumentListener</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.text.BadLocationException</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 *
 * @author Eduardo Folly
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SpellcheckDocumentListener <span style="color: #000000; font-weight: bold;">implements</span> <span style="color: #003399;">DocumentListener</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> ativa <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> cont <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Thread</span> t<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> Spellcheck spellcheck<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> SpellcheckDocumentListener<span style="color: #009900;">&#40;</span>Spellcheck spellcheck<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">spellcheck</span> <span style="color: #339933;">=</span> spellcheck<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> insertUpdate<span style="color: #009900;">&#40;</span><span style="color: #003399;">DocumentEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ativa<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> removeUpdate<span style="color: #009900;">&#40;</span><span style="color: #003399;">DocumentEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ativa<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> changedUpdate<span style="color: #009900;">&#40;</span><span style="color: #003399;">DocumentEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ativa<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> ativa<span style="color: #009900;">&#40;</span><span style="color: #003399;">DocumentEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        cont <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>t <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>
            t <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Thread</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Ativador<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            t.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>t.<span style="color: #006633;">getState</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Thread</span>.<span style="color: #006633;">State</span>.<span style="color: #006633;">TERMINATED</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                t <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Thread</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Ativador<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                t.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">class</span> Ativador <span style="color: #000000; font-weight: bold;">implements</span> <span style="color: #003399;">Runnable</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/*
         *
         */</span>
        @Override
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>cont <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> ativa<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #003399;">Thread</span>.<span style="color: #006633;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">InterruptedException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #009900;">&#125;</span>
                cont<span style="color: #339933;">++;</span>
            <span style="color: #009900;">&#125;</span>
            UnderlineHighlighter high <span style="color: #339933;">=</span> spellcheck.<span style="color: #006633;">getHighlighter</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            high.<span style="color: #006633;">removeAllHighlights</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #003399;">String</span> texto <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                texto <span style="color: #339933;">=</span> spellcheck.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>texto.<span style="color: #006633;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">isEmpty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            Hunspell.<span style="color: #003399;">Dictionary</span> d <span style="color: #339933;">=</span> spellcheck.<span style="color: #006633;">getDictionary</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            texto <span style="color: #339933;">=</span> Palavra.<span style="color: #006633;">clearWord</span><span style="color: #009900;">&#40;</span>texto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            SpellcheckSplit ss <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SpellcheckSplit<span style="color: #009900;">&#40;</span>texto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>ss.<span style="color: #006633;">hasMoreTokens</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                Palavra p <span style="color: #339933;">=</span> ss.<span style="color: #006633;">nextToken</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #003399;">String</span> word <span style="color: #339933;">=</span> p.<span style="color: #006633;">getPalavra</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>d.<span style="color: #006633;">misspelled</span><span style="color: #009900;">&#40;</span>word<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                        high.<span style="color: #006633;">addHighlight</span><span style="color: #009900;">&#40;</span>p.<span style="color: #006633;">getIni</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, p.<span style="color: #006633;">getFim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">BadLocationException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p>O MouseAdapter para implementação do menu popup com exibição das sugestões.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">br.com.oslunaticos</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.Point</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.ActionEvent</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.ActionListener</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.MouseAdapter</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.MouseEvent</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Iterator</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JMenuItem</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JPopupMenu</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.text.JTextComponent</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 *
 * @author Eduardo Folly
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SpellcheckMouseAdapter <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">MouseAdapter</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> Spellcheck spellcheck<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> SpellcheckMouseAdapter<span style="color: #009900;">&#40;</span>Spellcheck spellcheck<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">spellcheck</span> <span style="color: #339933;">=</span> spellcheck<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> mousePressed<span style="color: #009900;">&#40;</span><span style="color: #003399;">MouseEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        positionCaret<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> mouseReleased<span style="color: #009900;">&#40;</span><span style="color: #003399;">MouseEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        positionCaret<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> positionCaret<span style="color: #009900;">&#40;</span><span style="color: #003399;">MouseEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">isPopupTrigger</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
            <span style="color: #003399;">JPopupMenu</span> popup <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JPopupMenu</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">JTextComponent</span> text <span style="color: #339933;">=</span> spellcheck.<span style="color: #006633;">getTextComponent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #003399;">Point</span> p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Point</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, e.<span style="color: #006633;">getY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> text.<span style="color: #006633;">getUI</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">viewToModel</span><span style="color: #009900;">&#40;</span>text, p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            text.<span style="color: #006633;">getCaret</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setDot</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> i <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
                <span style="color: #003399;">String</span> c<span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #009900;">&#123;</span>
                        count<span style="color: #339933;">--;</span>
                        c <span style="color: #339933;">=</span> text.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span>count, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>c.<span style="color: #006633;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">isEmpty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    count <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> ini <span style="color: #339933;">=</span> count <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
                count <span style="color: #339933;">=</span> i<span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #009900;">&#123;</span>
                        count<span style="color: #339933;">++;</span>
                        c <span style="color: #339933;">=</span> text.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span>count, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>c.<span style="color: #006633;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">isEmpty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #000066; font-weight: bold;">int</span> fim <span style="color: #339933;">=</span> count<span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> wordIni <span style="color: #339933;">=</span> text.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span>ini, fim <span style="color: #339933;">-</span> ini<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> word <span style="color: #339933;">=</span> Palavra.<span style="color: #006633;">clearWord</span><span style="color: #009900;">&#40;</span>wordIni<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>spellcheck.<span style="color: #006633;">getDictionary</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">misspelled</span><span style="color: #009900;">&#40;</span>word<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    popup.<span style="color: #006633;">removeAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                    <span style="color: #003399;">JMenuItem</span> menuItem <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Sugestões:&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    menuItem.<span style="color: #006633;">setEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    popup.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>menuItem<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                    <span style="color: #003399;">Iterator</span> itr <span style="color: #339933;">=</span>
                            spellcheck.<span style="color: #006633;">getDictionary</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">suggest</span><span style="color: #009900;">&#40;</span>word<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">iterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                    <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>itr.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #003399;">String</span> sugest <span style="color: #339933;">=</span> itr.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        menuItem <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenuItem</span><span style="color: #009900;">&#40;</span>sugest<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        menuItem.<span style="color: #006633;">addActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
                            @Override
                            <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> actionPerformed<span style="color: #009900;">&#40;</span><span style="color: #003399;">ActionEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
                                <span style="color: #000066; font-weight: bold;">char</span> pri <span style="color: #339933;">=</span> word.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
                                <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>pri <span style="color: #339933;">!=</span> wordIni.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                    count<span style="color: #339933;">++;</span>
                                <span style="color: #009900;">&#125;</span>
&nbsp;
                                <span style="color: #003399;">JMenuItem</span> menuItem <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">JMenuItem</span><span style="color: #009900;">&#41;</span> e.<span style="color: #006633;">getSource</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                                substitui<span style="color: #009900;">&#40;</span>text, ini <span style="color: #339933;">+</span> count, word, menuItem.<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>
                            <span style="color: #009900;">&#125;</span>
                        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        popup.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>menuItem<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
&nbsp;
                    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>popup.<span style="color: #006633;">getComponentCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        popup.<span style="color: #006633;">removeAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        menuItem <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Sem sugestões.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        menuItem.<span style="color: #006633;">setEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        popup.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>menuItem<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
&nbsp;
                    popup.<span style="color: #006633;">show</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getComponent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, e.<span style="color: #006633;">getX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, e.<span style="color: #006633;">getY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> substitui<span style="color: #009900;">&#40;</span><span style="color: #003399;">JTextComponent</span> text, <span style="color: #000066; font-weight: bold;">int</span> ini, <span style="color: #003399;">String</span> de, <span style="color: #003399;">String</span> para<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            text.<span style="color: #006633;">getDocument</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">remove</span><span style="color: #009900;">&#40;</span>ini, de.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            text.<span style="color: #006633;">getDocument</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">insertString</span><span style="color: #009900;">&#40;</span>ini, para, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p>Agora são apresentadas as classes auxiliares.</p>
<p>&nbsp;</p>
<p>Para a divisão do texto em palavras (baseada em <a href="http://docs.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html">StringTokenizer</a>):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">br.com.oslunaticos</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Enumeration</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.NoSuchElementException</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
*
* @author Eduardo Folly
*
* Fork de StringTokenizer
*/</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SpellcheckSplit <span style="color: #000000; font-weight: bold;">implements</span> Enumeration<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>Object<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> currentPosition<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> newPosition<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> maxPosition<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> str<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> delimiters<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">boolean</span> retDelims<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">boolean</span> delimsChanged<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> maxDelimCodePoint<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">boolean</span> hasSurrogates <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> delimiterCodePoints<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> SpellcheckSplit<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> str<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        currentPosition <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        newPosition <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        delimsChanged <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">str</span> <span style="color: #339933;">=</span> str<span style="color: #339933;">;</span>
        maxPosition <span style="color: #339933;">=</span> str.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        delimiters <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot; <span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\f</span>&quot;</span><span style="color: #339933;">;</span>
        retDelims <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        setMaxDelimCodePoint<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> setMaxDelimCodePoint<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>delimiters <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>
            maxDelimCodePoint <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span> m <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> c<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <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> delimiters.<span style="color: #006633;">length</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: #003399;">Character</span>.<span style="color: #006633;">charCount</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            c <span style="color: #339933;">=</span> delimiters.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>c <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> <span style="color: #003399;">Character</span>.<span style="color: #006633;">MIN_HIGH_SURROGATE</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> c <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span> <span style="color: #003399;">Character</span>.<span style="color: #006633;">MAX_LOW_SURROGATE</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                c <span style="color: #339933;">=</span> delimiters.<span style="color: #006633;">codePointAt</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                hasSurrogates <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>m <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> c<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                m <span style="color: #339933;">=</span> c<span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            count<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
        maxDelimCodePoint <span style="color: #339933;">=</span> m<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>hasSurrogates<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            delimiterCodePoints <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span>count<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <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>, j <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> count<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span>, j <span style="color: #339933;">+=</span> <span style="color: #003399;">Character</span>.<span style="color: #006633;">charCount</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                c <span style="color: #339933;">=</span> delimiters.<span style="color: #006633;">codePointAt</span><span style="color: #009900;">&#40;</span>j<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                delimiterCodePoints<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> c<span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> skipDelimiters<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> startPos<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>delimiters <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>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">NullPointerException</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span> position <span style="color: #339933;">=</span> startPos<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>retDelims <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> position <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> maxPosition<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>hasSurrogates<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">char</span> c <span style="color: #339933;">=</span> str.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>c <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> maxDelimCodePoint<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>delimiters.<span style="color: #006633;">indexOf</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                position<span style="color: #339933;">++;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">int</span> c <span style="color: #339933;">=</span> str.<span style="color: #006633;">codePointAt</span><span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>c <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> maxDelimCodePoint<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>isDelimiter<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                position <span style="color: #339933;">+=</span> <span style="color: #003399;">Character</span>.<span style="color: #006633;">charCount</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> position<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> scanToken<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> startPos<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">int</span> position <span style="color: #339933;">=</span> startPos<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>position <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> maxPosition<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>hasSurrogates<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">char</span> c <span style="color: #339933;">=</span> str.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>c <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span> maxDelimCodePoint<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>delimiters.<span style="color: #006633;">indexOf</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                position<span style="color: #339933;">++;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">int</span> c <span style="color: #339933;">=</span> str.<span style="color: #006633;">codePointAt</span><span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>c <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span> maxDelimCodePoint<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> isDelimiter<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                position <span style="color: #339933;">+=</span> <span style="color: #003399;">Character</span>.<span style="color: #006633;">charCount</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>retDelims <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>startPos <span style="color: #339933;">==</span> position<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>hasSurrogates<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">char</span> c <span style="color: #339933;">=</span> str.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>c <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span> maxDelimCodePoint<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>delimiters.<span style="color: #006633;">indexOf</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    position<span style="color: #339933;">++;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">int</span> c <span style="color: #339933;">=</span> str.<span style="color: #006633;">codePointAt</span><span style="color: #009900;">&#40;</span>position<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>c <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span> maxDelimCodePoint<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> isDelimiter<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    position <span style="color: #339933;">+=</span> <span style="color: #003399;">Character</span>.<span style="color: #006633;">charCount</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> position<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">boolean</span> isDelimiter<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> codePoint<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <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> delimiterCodePoints.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>delimiterCodePoints<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> codePoint<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> hasMoreTokens<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        newPosition <span style="color: #339933;">=</span> skipDelimiters<span style="color: #009900;">&#40;</span>currentPosition<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>newPosition <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> maxPosition<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> Palavra nextToken<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        currentPosition <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>newPosition <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #339933;">!</span>delimsChanged<span style="color: #009900;">&#41;</span>
        <span style="color: #339933;">?</span> newPosition <span style="color: #339933;">:</span> skipDelimiters<span style="color: #009900;">&#40;</span>currentPosition<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        delimsChanged <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        newPosition <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>currentPosition <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> maxPosition<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">NoSuchElementException</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">int</span> start <span style="color: #339933;">=</span> currentPosition<span style="color: #339933;">;</span>
        currentPosition <span style="color: #339933;">=</span> scanToken<span style="color: #009900;">&#40;</span>currentPosition<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #003399;">String</span> texto <span style="color: #339933;">=</span> str.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span>start, currentPosition<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Palavra palavra <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Palavra<span style="color: #009900;">&#40;</span>start, currentPosition, texto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> palavra<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> hasMoreElements<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> hasMoreTokens<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> nextElement<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> nextToken<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> countTokens<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> currpos <span style="color: #339933;">=</span> currentPosition<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>currpos <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> maxPosition<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            currpos <span style="color: #339933;">=</span> skipDelimiters<span style="color: #009900;">&#40;</span>currpos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>currpos <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> maxPosition<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            currpos <span style="color: #339933;">=</span> scanToken<span style="color: #009900;">&#40;</span>currpos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            count<span style="color: #339933;">++;</span>
       <span style="color: #009900;">&#125;</span>
       <span style="color: #000000; font-weight: bold;">return</span> count<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p>Classe para controle das palavras e posicionamento dos sublinhados:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">br.com.oslunaticos</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 *
 * @author Eduardo Folly
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Palavra <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">int</span> ini<span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">int</span> fim<span style="color: #339933;">;</span>
    <span style="color: #003399;">String</span> palavra<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Palavra<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> ini, <span style="color: #000066; font-weight: bold;">int</span> fim, <span style="color: #003399;">String</span> palavra<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">ini</span> <span style="color: #339933;">=</span> ini<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">fim</span> <span style="color: #339933;">=</span> fim<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">palavra</span> <span style="color: #339933;">=</span> palavra<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getFim<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> fim<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setFim<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> fim<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">fim</span> <span style="color: #339933;">=</span> fim<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getIni<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> ini<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setIni<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> ini<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">ini</span> <span style="color: #339933;">=</span> ini<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getPalavra<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> palavra<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setPalavra<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> palavra<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">palavra</span> <span style="color: #339933;">=</span> palavra<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Palavra{&quot;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;ini=&quot;</span> <span style="color: #339933;">+</span> ini <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;, fim=&quot;</span> <span style="color: #339933;">+</span> fim <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;, palavra=&quot;</span> <span style="color: #339933;">+</span> palavra <span style="color: #339933;">+</span> <span style="color: #0000ff;">'}'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> clearWord<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> text<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> troca <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;!@#$%&amp;amp;*()_+=,.;:/?[]{}&amp;lt;&amp;gt;<span style="color: #000099; font-weight: bold;">\\</span>–&quot;</span><span style="color: #339933;">;</span>
        <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> troca.<span style="color: #006633;">length</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>
            <span style="color: #000066; font-weight: bold;">char</span> c <span style="color: #339933;">=</span> troca.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            text <span style="color: #339933;">=</span> text.<span style="color: #006633;">replace</span><span style="color: #009900;">&#40;</span>c, <span style="color: #0000ff;">' '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        text <span style="color: #339933;">=</span> text.<span style="color: #006633;">replaceAll</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; - &quot;</span>, <span style="color: #0000ff;">&quot;   &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> text<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Certo, todas as classes e suas respectivas funções foram apresentadas.</p>
<p>&nbsp;</p>
<p><strong>GUI</strong></p>
<p>A tela para demostração foi feita com todos componente para se ter uma idéia do funcionamento.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela1.jpg"><img class="aligncenter size-medium wp-image-1775" title="tela1" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela1-300x235.jpg" alt="" width="300" height="235" /></a></p>
<p>A implementação do dicionário no componente é bem simples.</p>
<p>Primeiro é necessário carregar o dicionário. No caso apresentado o dicionário está na pasta dict, dentro da pasta do projeto (ou execução do jar).</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">Dictionary</span> dictionary <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003399;">String</span> dir <span style="color: #339933;">=</span> <span style="color: #003399;">System</span>.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;user.dir&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
dir <span style="color: #339933;">=</span> dir <span style="color: #339933;">+</span> <span style="color: #003399;">File</span>.<span style="color: #006633;">separator</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;dict&quot;</span> <span style="color: #339933;">+</span> <span style="color: #003399;">File</span>.<span style="color: #006633;">separator</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;pt_BR&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    dictionary <span style="color: #339933;">=</span> Hunspell.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getDictionary</span><span style="color: #009900;">&#40;</span>dir<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Depois o corretor ortográfico é adicionado aos componentes:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">new</span> Spellcheck<span style="color: #009900;">&#40;</span>jTextArea1, dictionary<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">new</span> Spellcheck<span style="color: #009900;">&#40;</span>jTextPane1, dictionary<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">new</span> Spellcheck<span style="color: #009900;">&#40;</span>jEditorPane1, dictionary<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">new</span> Spellcheck<span style="color: #009900;">&#40;</span>jTextField1, dictionary<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">new</span> Spellcheck<span style="color: #009900;">&#40;</span>jFormattedTextField1, dictionary<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">new</span> Spellcheck<span style="color: #009900;">&#40;</span>jPasswordField1, dictionary<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O projeto foi desenvolvido utilizando o <a href="http://www.netbeans.org/" target="_blank">NetBeans</a> e o download está disponível.</p>
<p>Projeto<strong> <a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/Dicionario.rar">Dicionario</a></strong></p>
<p>&nbsp;</p>
<p><strong>Melhorias</strong></p>
<p>Ao longo do projeto, várias idéias vão surgindo e devido a falta de tempo disponível elas acabam ficando em segundo plano.</p>
<p>Sempre é possível melhorar, então&#8230;</p>
<ul>
<li><span style="line-height: 18px;">A correção ortográfica deve ser limitada ao viewport do componente de texto.<br />
</span></li>
<li><span style="line-height: 18px;">O tempo de espera do início do procedimento de correção deve ser configurável.</span></li>
<li><span style="line-height: 18px;">Deve existir um dicionário com palavras adicionadas pelo usuário.</span></li>
<li><span style="line-height: 18px;">Utilização da interface do Hunspell no Linux e OS X. Atualmente só utiliza as bibliotecas para Windows.</span></li>
<li><span style="line-height: 18px;">Controle de palavras com funcionalidades mais específicas.</span></li>
<li><span style="line-height: 18px;">Uma nova implementação sem a utilização do fork do StringTokenizer.</span></li>
</ul>
<p>&nbsp;</p>
<p><strong>Conclusão</strong></p>
<p>Um corretor ortográfico não possui uma simples implementação, é necessário ter rotinas que visem a performance e tragam um resultado dentro de tempos aceitáveis.</p>
<p>Fica aqui o espaço aberto para dúvidas, melhorias, comentários, casos de sucesso, críticas e tudo mais.</p>
<p>Obrigado.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2012/02/corretor-ortografico-em-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>29 maneiras de manter-se criativo</title>
		<link>http://oslunaticos.com.br/2012/02/29-maneiras-de-manter-se-criativo/</link>
		<comments>http://oslunaticos.com.br/2012/02/29-maneiras-de-manter-se-criativo/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 02:14:46 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Criatividade]]></category>
		<category><![CDATA[dica]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/?p=1763</guid>
		<description><![CDATA[Navegando pelas indicações do Google Reader, foi recomendado este video que posto abaixo. Vale muito a pena conferir e adapta-lo ao seu cotidiano. Link para o Vimeo Para quem não conseguiu ver o video ou perdeu alguma dica: Faça listas; Leve um caderno para todos os lugares; Tente escrever a mão livre; Fique longe do [...]]]></description>
			<content:encoded><![CDATA[<p>Navegando pelas indicações do Google Reader, foi recomendado este video que posto abaixo.</p>
<p>Vale muito a pena conferir e adapta-lo ao seu cotidiano.</p>

<!-- Iframe plugin v.2.1 (wordpress.org/extend/plugins/iframe/) -->
<iframe src="http://player.vimeo.com/video/24302498" width="100%" height="480" scrolling="no" class="iframe-class" frameborder="0"></iframe>
<p><em><a title="link para o Vimeo" href="http://vimeo.com/24302498" target="_blank">Link para o Vimeo</a></em></p>
<p>Para quem não conseguiu ver o video ou perdeu alguma dica:</p>
<ul>
<li><span style="line-height: 18px;">Faça listas;</span></li>
<li><span style="line-height: 18px;">Leve um caderno para todos os lugares;</span></li>
<li><span style="line-height: 18px;">Tente escrever a mão livre;</span></li>
<li><span style="line-height: 18px;">Fique longe do computador;</span></li>
<li><span style="line-height: 18px;">Pare de se superar;</span></li>
<li><span style="line-height: 18px;">Faça pausas;</span></li>
<li><span style="line-height: 18px;">Cante no banho;</span></li>
<li><span style="line-height: 18px;">Beba café;</span></li>
<li><span style="line-height: 18px;">Escute músicas novas;</span></li>
<li><span style="line-height: 18px;">Esteja aberto;</span></li>
<li><span style="line-height: 18px;">Cerque-se de pessoas criativas;</span></li>
<li><span style="line-height: 18px;">De retorno;</span></li>
<li><span style="line-height: 18px;">Colabore;</span></li>
<li><span style="line-height: 18px;">Não desista;</span></li>
<li><span style="line-height: 18px;">Pratique;</span></li>
<li><span style="line-height: 18px;">Permita-se a cometer erros;</span></li>
<li><span style="line-height: 18px;">Vá a algum lugar novo;</span></li>
<li><span style="line-height: 18px;">Conte suas bênçãos;</span></li>
<li><span style="line-height: 18px;">Tenha momentos de descanso;</span></li>
<li><span style="line-height: 18px;">Assuma riscos;</span></li>
<li><span style="line-height: 18px;">Quebre regras;</span></li>
<li><span style="line-height: 18px;">Não force;</span></li>
<li><span style="line-height: 18px;">Leia uma página do dicionário;</span></li>
<li><span style="line-height: 18px;">Crie uma estrutura (framework);</span></li>
<li><span style="line-height: 18px;">Pare de tentar ser uma pessoa perfeita;</span></li>
<li><span style="line-height: 18px;">Tem uma idéia. Anote;</span></li>
<li><span style="line-height: 18px;">Limpe seu local de trabalho;</span></li>
<li><span style="line-height: 18px;">Divirta-se;</span></li>
<li><span style="line-height: 18px;">Termine algo.</span></li>
</ul>
<p>Acredito que se você consegue fazer 25 itens dessa lista, pode se considerar um profissional com um grande futuro. O caminho do sucesso é a criatividade, independente da sua área.</p>
<p>&nbsp;</p>
<p><em>Via: <a href="http://www.brainstorm9.com.br/28153/web-video/os-29-caminhos-para-voce-permanecer-com-a-mente-criativa/">brainstorm9</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2012/02/29-maneiras-de-manter-se-criativo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Processing no NetBeans</title>
		<link>http://oslunaticos.com.br/2012/02/processing-no-netbeans/</link>
		<comments>http://oslunaticos.com.br/2012/02/processing-no-netbeans/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 21:07:56 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/?p=1744</guid>
		<description><![CDATA[Processing? Processing é uma linguagem de programação de código aberto e um ambiente de desenvolvimento integrado (IDE), construído para as artes eletrônicas e comunidades de design visual com o objetivo de ensinar noções básicas de programação de computador em um contexto visual e para servir como base para protótipos eletrônicos. O projeto foi iniciado em [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="Processing" src="http://code.google.com/p/processing/logo" alt="" width="55" height="55" /></p>
<h6>Processing?</h6>
<blockquote>
<p style="text-align: justify;">Processing é uma linguagem de programação de código aberto e um ambiente de desenvolvimento integrado (IDE), construído para as artes eletrônicas e comunidades de design visual com o objetivo de ensinar noções básicas de programação de computador em um contexto visual e para servir como base para protótipos eletrônicos. O projeto foi iniciado em 2001 por Casey Reas e Ben Fry, ambos ex-membros do Grupo de Computação do MIT Media Lab. Um dos objetivos declarados do Processing é atuar como uma ferramenta para não-programadores, através da satisfação imediata de um retorno visual. Processing baseia-se na linguagem de programação Java, mas utiliza uma sintaxe simplificada e um padrão de programação baseado em gráficos.</p>
</blockquote>
<p>&nbsp;</p>
<h6>Ambiente</h6>
<p>O ambiente utilizado neste tutorial é Windows 7, NetBeans 7.1, JDK 1.6.0_30 e Processing 1.5.1.</p>
<p><span id="more-1744"></span></p>
<h6>Iniciando</h6>
<p>Considerando que o NetBeans e o JDK já estejam instalados, é necessário ir no site do Processing e realizar o download da versão sem o JDK &#8211;  <a href="http://processing.org/download/">http://processing.org/download/</a>. Após baixar o arquivo <em>processing-1.5.1-windows-expert.zip</em>, descompacte-o e mova a pasta <em>processing-1.5.1</em> para dentro de <em>C:\Arquivos de Programas</em>.</p>
<p>Neste primeiro contato o Processing já está pronto para trabalhar, agora é só configurar o NetBeans.</p>
<p>&nbsp;</p>
<h6>Agora no Netbeans</h6>
<p>Para continuar abra o NetBeans e clique em <em>Projetos</em> -&gt; <em>Bibliotecas</em>.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela01.jpg"><img class="aligncenter size-medium wp-image-1746" title="tela01" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela01-300x151.jpg" alt="" width="300" height="151" /></a></p>
<p>&nbsp;</p>
<p>Na tela de Bibliotecas, clique em <em>Nova Biblioteca&#8230;</em></p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela02.jpg"><img class="aligncenter size-medium wp-image-1747" title="tela02" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela02-300x229.jpg" alt="" width="300" height="229" /></a></p>
<p>&nbsp;</p>
<p>Em Nova Biblioteca, digite <em>Processing 1.5.1</em> em <em>Nome da biblioteca</em> e clique em <em>OK</em>.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela03.jpg"><img class="aligncenter size-medium wp-image-1748" title="tela03" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela03-300x149.jpg" alt="" width="300" height="149" /></a></p>
<p>&nbsp;</p>
<p>Após confirmar, clique em <em>Adicionar JAR/pasta&#8230; </em>Será exibida uma tela para localização dos arquivos. Procure <em>C:\Arquivos de Programas\processing-1.5.1\lib</em>, selecione os arquivos e clique em <em>Adicionar JAR/pasta</em>.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela04.jpg"><img class="aligncenter size-medium wp-image-1751" title="tela04" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela04-300x190.jpg" alt="" width="300" height="190" /></a></p>
<p>&nbsp;</p>
<p>Será exibida a tela com as informações da nova biblioteca.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela05.jpg"><img class="aligncenter size-medium wp-image-1752" title="tela05" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela05-300x229.jpg" alt="" width="300" height="229" /></a></p>
<p>&nbsp;</p>
<p>Neste momento a biblioteca está configurada e pronta para ser adicionada ao projeto.</p>
<p>&nbsp;</p>
<h6>Novo Projeto</h6>
<p>Agora será necessário iniciar um novo projeto. Clique em <em>Arquivo</em> -&gt; <em>Novo Projeto</em>. Na tela de Novo Projeto, selecione em <em>Categorias: Java</em> e <em>Projetos: Aplicativo Java</em>.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela06.jpg"><img class="aligncenter size-medium wp-image-1753" title="tela06" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela06-300x206.jpg" alt="" width="300" height="206" /></a></p>
<p>&nbsp;</p>
<p>Na tela de Novo Aplicativo Java, insira o nome do projeto: <em>TestProcessing</em>, verifique as demais opções selecionadas e clique em <em>Finalizar</em>.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela07.jpg"><img class="aligncenter size-medium wp-image-1754" title="tela07" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela07-300x206.jpg" alt="" width="300" height="206" /></a></p>
<p>&nbsp;</p>
<p>Após o novo projeto carregado, abra a árvore do projeto, clique em <em>Bibliotecas</em>, depois em <em>Adicionar biblioteca&#8230;</em></p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela08.jpg"><img class="aligncenter size-medium wp-image-1755" title="tela08" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela08-257x300.jpg" alt="" width="257" height="300" /></a></p>
<p>&nbsp;</p>
<p>Na tela de adicionar biblioteca, clique em <em>Importar</em>.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela09.jpg"><img class="aligncenter size-medium wp-image-1756" title="tela09" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela09-284x300.jpg" alt="" width="284" height="300" /></a></p>
<p>&nbsp;</p>
<p>Selecione a biblioteca que foi criada (Processing 1.5.1) e clique em <em>Importar biblioteca</em>.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela10.jpg"><img class="aligncenter size-medium wp-image-1757" title="tela10" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela10-219x300.jpg" alt="" width="219" height="300" /></a></p>
<p>&nbsp;</p>
<p>Novamente de volta a de Adicionar biblioteca selecione <em>Processing 1.5.1</em> e clique em <em>Adicionar biblioteca</em>.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela11.jpg"><img class="aligncenter size-medium wp-image-1758" title="tela11" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela11-284x300.jpg" alt="" width="284" height="300" /></a></p>
<p>&nbsp;</p>
<p>Os arquivos JAR do Processing serão adicionados ao projeto, assim será possível realizar a importação das bibliotecas.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela12.jpg"><img class="aligncenter size-medium wp-image-1759" title="tela12" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela12-300x255.jpg" alt="" width="300" height="255" /></a></p>
<p>&nbsp;</p>
<p>Foi testado o seguinte código:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">testprocessing</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.core.PApplet</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
*
* @author Eduardo Folly
*/</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TestProcessing <span style="color: #000000; font-weight: bold;">extends</span> PApplet <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     *
     */</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">640</span>, <span style="color: #cc66cc;">480</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #666666; font-style: italic;">/*
    *
    */</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        rectMode<span style="color: #009900;">&#40;</span>CENTER<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        fill<span style="color: #009900;">&#40;</span>0xFFFFAA99<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        rect<span style="color: #009900;">&#40;</span>mouseX, mouseY, <span style="color: #cc66cc;">100</span>, <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * @param args the command line arguments
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        PApplet.<span style="color: #006633;">main</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">&quot;testprocessing.TestProcessing&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>E o resultado obtido foi a aplicação rodando perfeitamente.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela13.jpg"><img class="aligncenter size-medium wp-image-1761" title="tela13" src="http://oslunaticos.com.br/wp-content/uploads/2012/02/tela13-300x236.jpg" alt="" width="300" height="236" /></a></p>
<p>&nbsp;</p>
<h6>Melhorias futuras e possíveis questões</h6>
<ul>
<li><span style="line-height: 18px;">Somente o código fonte do exemplo foi testado, é necessário testar com outros exemplos que utilizem bibliotecas específicas.<br />
</span></li>
<li><span style="line-height: 18px;">Devido ao Processing ser multi-plataforma, assim como o NetBeans, testar esta configuração em outros sistemas operacionais é imprescindível.</span></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2012/02/processing-no-netbeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consumindo web service do Protheus com JAX-WS</title>
		<link>http://oslunaticos.com.br/2011/10/consumindo-web-service-do-protheus-com-jax-ws/</link>
		<comments>http://oslunaticos.com.br/2011/10/consumindo-web-service-do-protheus-com-jax-ws/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 21:08:32 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JAX-WS]]></category>
		<category><![CDATA[Protheus]]></category>
		<category><![CDATA[Totvs]]></category>
		<category><![CDATA[Web Service]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/?p=1701</guid>
		<description><![CDATA[O que é web service? De acordo com a W3C, web service é um software projetado para suportar interação máquina-máquina de forma interoperável através de uma rede. Ele tem uma interface descrita em um formato máquina-processável (especificamente WSDL). Sistemas que interagem com o web service de uma maneira prescrita por sua descrição, utilizam mensagens SOAP, [...]]]></description>
			<content:encoded><![CDATA[<h3>O que é web service?</h3>
<p>De acordo com a <a href="http://www.w3.org/" target="_blank">W3C</a>, <a href="http://www.w3.org/TR/2004/NOTE-ws-gloss-20040211/" target="_blank">web service</a> é um software projetado para suportar interação máquina-máquina de forma interoperável através de uma rede. Ele tem uma interface descrita em um formato máquina-processável (especificamente WSDL). Sistemas que interagem com o web service de uma maneira prescrita por sua descrição, utilizam mensagens SOAP, normalmente transmitidas através de HTTP com uma serialização XML em conjunto com outros padrões web.</p>
<p>&nbsp;</p>
<h3>O caminho.</h3>
<p>Para a integração com outros sistemas, o ERP Protheus da Totvs provê uma série de web services e ainda existe a possibilidade de desenvolver e publicar serviços customizados dentro da plataforma.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/server.png"><img class="aligncenter size-medium wp-image-1722" title="server" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/server-300x185.png" alt="" width="300" height="185" /></a></p>
<p style="text-align: center;"><em>Figura 1 &#8211; Página com a descrição dos serviços disponíveis do Protheus.</em></p>
<p>&nbsp;</p>
<h3>O problema.</h3>
<p>Ao iniciar o desenvolvimento de uma aplicação em Java 6, utilizando o Netbeans 7.0 como IDE e a biblioteca JAX-WS para o consumo dos serviços, foi exibida a mensagem <em>&#8220;WEBSERVICE ERROR : Soap Prefix Missing : USERPORTAL : PRTLOGIN : Formato do Pacote Soap DESCONHECIDO.&#8221;</em> ao tentar executar uma chamada simples ao serviço USERPORTAL, método PRTLOGIN.<br />
<span id="more-1701"></span><br />
&nbsp;</p>
<h3>A solução.</h3>
<p>Será demostrado um passo-a-passo de como iniciar um projeto até o consumo com sucesso do web service especificado.</p>
<p>No Netbeans, clique no menu <em>Arquivo</em>, seguido por <em>Novo Projeto</em>. Na tela que irá abrir, selecione em <em>Categorias:</em> &#8220;Java&#8221; e em <em>Projetos:</em> &#8220;Aplicativo Java&#8221;. Clique em <em>Próximo</em>.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image000.png"><img class="aligncenter size-medium wp-image-1706" title="image000" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image000-300x206.png" alt="" width="300" height="206" /></a><em>Figura 2 &#8211; Novo projeto.</em></p>
<p>&nbsp;</p>
<p>Informe o nome do projeto (neste caso SigaWS), faça modificações caso ache necessário e clique em <em>Finalizar</em>.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image001.png"><img class="aligncenter size-medium wp-image-1707" title="image001" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image001-300x206.png" alt="" width="300" height="206" /></a><em>Figura 3 &#8211; Novo Aplicativo Java</em></p>
<p>&nbsp;</p>
<p>Com o projeto criado, deverá ser criada a classe para consumo do serviço USERPORTAL, para isto clique em <em>Arquivo</em>, seguido por <em>Novo Arquivo</em>.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image002.png"><img class="aligncenter size-medium wp-image-1708" title="image002" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image002-220x300.png" alt="" width="220" height="300" /></a><em>Figura 4 &#8211; Arquivo, Novo Arquivo.</em></p>
<p>&nbsp;</p>
<p>Na tela de Novo Arquivo selecione em <em>Categorias:</em> &#8220;Serviços Web&#8221; e em <em>Tipos de arquivos:</em> &#8220;Cliente para serviço Web&#8221;, clicando em <em>Próximo</em>.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image003.png"><img class="aligncenter size-medium wp-image-1709" title="image003" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image003-300x206.png" alt="" width="300" height="206" /></a><em>Figura 5 &#8211; Novo arquivo.</em></p>
<p>&nbsp;</p>
<p>Na próxima tela deverá ser selecionada a opção <em>WSDL URL</em> e informado o caminho do arquivo de definição do serviço de acordo com o publicado no Protheus. Clique em <em>Finalizar</em>.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image004.png"><img class="aligncenter size-medium wp-image-1710" title="image004" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image004-300x206.png" alt="" width="300" height="206" /></a><em>Figura 6 &#8211; Novo cliente para serviço Web.</em></p>
<p>&nbsp;</p>
<p>Voltando para a tela principal do Netbeans, vá na aba <em>Projetos</em> e abra os nós de <em>Referência de serviços Web</em> até localizar o método PRTLOGIN.</p>
<p>Selecione o nó PRTLOGIN, arraste-o e solte dentro da classe SigaWS, isto fará com que o código de chamada ao método seja gerado automaticamente. Em seguida defina os parâmetros para execução da chamada do serviço.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image005.png"><img class="aligncenter size-medium wp-image-1711" title="image005" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image005-300x232.png" alt="" width="300" height="232" /></a><em>Figura 7 &#8211; Definição da classe de execução do Web Service.</em></p>
<p>&nbsp;</p>
<p>Executando o projeto neste momento, será verificado o erro citado no início do artigo.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image006.png"><img class="aligncenter size-medium wp-image-1712" title="image006" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image006-300x121.png" alt="" width="300" height="121" /></a><em>Figura 8 &#8211; Erro na execução.</em></p>
<p>&nbsp;</p>
<p>Para solucionar o problema, o proposto é adicionar um manipulador de mensagem SOAP e realizar algumas modificações nos dados retornados pelo serviço, assim possibilitando a serialização.</p>
<p>Clique em <em>Arquivo</em>, seguido por <em>Novo Arquivo</em>. Na tela seguinte, selecione em <em>Categorias:</em> &#8220;Serviços Web&#8221; e em <em>Tipos de arquivos:</em> &#8220;Manipulador de mensagens&#8221;, clique em <em>Próximo</em>.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image007.png"><img class="aligncenter size-medium wp-image-1713" title="image007" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image007-300x206.png" alt="" width="300" height="206" /></a><em>Figura 9 &#8211; Novo arquivo &#8211; Manipulador de mensagens.</em></p>
<p>&nbsp;</p>
<p>Informe o nome para o arquivo, neste caso SigaHandler, clique em <em>Finalizar</em>.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image008.png"><img class="aligncenter size-medium wp-image-1714" title="image008" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image008-300x206.png" alt="" width="300" height="206" /></a><em>Figura 10 &#8211; Novo manipulador de mensagens.</em></p>
<p>&nbsp;</p>
<p>Com o arquivo gerado o código deverá ficar desta forma:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">sigaws.ws</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.ByteArrayOutputStream</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Collections</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Set</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.namespace.QName</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.soap.SOAPException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.soap.SOAPMessage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.transform.Source</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.transform.stream.StreamSource</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.ws.handler.MessageContext</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.ws.handler.soap.SOAPHandler</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.ws.handler.soap.SOAPMessageContext</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 *
 * @author Eduardo Folly
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SigaHandler <span style="color: #000000; font-weight: bold;">implements</span> SOAPHandler <span style="color: #009900;">&#123;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> handleMessage<span style="color: #009900;">&#40;</span>SOAPMessageContext messageContext<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">boolean</span> outbound <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Boolean</span><span style="color: #009900;">&#41;</span> messageContext.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>MessageContext.<span style="color: #006633;">MESSAGE_OUTBOUND_PROPERTY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>outbound<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                SOAPMessage msg <span style="color: #339933;">=</span> messageContext.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #003399;">ByteArrayOutputStream</span> baos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ByteArrayOutputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">writeTo</span><span style="color: #009900;">&#40;</span>baos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #003399;">String</span> teste <span style="color: #339933;">=</span> baos.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span>getMessageEncoding<span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                teste <span style="color: #339933;">=</span> teste.<span style="color: #006633;">replaceAll</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;S:&quot;</span>, <span style="color: #0000ff;">&quot;soap:&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                teste <span style="color: #339933;">=</span> teste.<span style="color: #006633;">replaceAll</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;S=&quot;</span>, <span style="color: #0000ff;">&quot;soap=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                Source src <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StreamSource<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> java.<span style="color: #006633;">io</span>.<span style="color: #003399;">StringReader</span><span style="color: #009900;">&#40;</span>teste<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">getSOAPPart</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setContent</span><span style="color: #009900;">&#40;</span>src<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Set</span> getHeaders<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">Collections</span>.<span style="color: #006633;">EMPTY_SET</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> handleFault<span style="color: #009900;">&#40;</span>SOAPMessageContext messageContext<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> close<span style="color: #009900;">&#40;</span>MessageContext context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> getMessageEncoding<span style="color: #009900;">&#40;</span>SOAPMessage msg<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> SOAPException <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> encoding <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;utf-8&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>msg.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span>SOAPMessage.<span style="color: #006633;">CHARACTER_SET_ENCODING</span><span style="color: #009900;">&#41;</span> <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>
            encoding <span style="color: #339933;">=</span> msg.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span>SOAPMessage.<span style="color: #006633;">CHARACTER_SET_ENCODING</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> encoding<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p>Assim o resultado final da classe é apresentado.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image009.png"><img class="aligncenter size-medium wp-image-1715" title="image009" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image009-300x232.png" alt="" width="300" height="232" /></a><em>Figura 11 &#8211; Classe SigaHandler.</em></p>
<p>&nbsp;</p>
<p>Agora é necessário relacionar o manipulador de mensagens com o serviço USERPORTAL. Para isto na aba <em>Projetos </em>clique com o botão direito do mouse no serviço USERPORTAL, seguido por <em>Configurar manipuladores&#8230;</em></p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image010.png"><img class="aligncenter size-medium wp-image-1716" title="image010" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image010-201x300.png" alt="" width="201" height="300" /></a><em>Figura 12 &#8211; Configurar manipuladores&#8230;</em></p>
<p>&nbsp;</p>
<p>Na próxima tela, clique em <em>Adicionar</em>.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image011.png"><img class="aligncenter size-medium wp-image-1717" title="image011" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image011-300x174.png" alt="" width="300" height="174" /></a><em>Figura 13 &#8211; Configurar os manipuladores de mensagens.</em></p>
<p>&nbsp;</p>
<p>Selecione o arquivo manipulador, neste caso o arquivo SigaHandler.java, e clique em <em>OK</em>.</p>
<p style="text-align: center;"><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image012.png"><img class="aligncenter size-medium wp-image-1718" title="image012" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image012-244x300.png" alt="" width="244" height="300" /></a><em>Figura 14 &#8211; Selecionar classe de manipuladores de mensagens.</em></p>
<p>&nbsp;</p>
<p>Após a confirmação será exibido o manipulador de mensagens associado ao serviço. Clique em <em>OK</em>.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image013.png"><img class="aligncenter size-medium wp-image-1719" title="image013" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image013-300x174.png" alt="" width="300" height="174" /></a></p>
<p style="text-align: center;"><em>Figura 15 &#8211; Associação do manipulador de mensagens.</em></p>
<p>&nbsp;</p>
<p>Desta forma a execução do programa funciona perfeitamente.</p>
<p><a href="http://oslunaticos.com.br/wp-content/uploads/2011/10/image014.png"><img class="aligncenter size-medium wp-image-1720" title="image014" src="http://oslunaticos.com.br/wp-content/uploads/2011/10/image014-300x147.png" alt="" width="300" height="147" /></a></p>
<p style="text-align: center;"><em>Figura 16 &#8211; Execução do programa.</em></p>
<p>&nbsp;</p>
<h3>Considerações finais.</h3>
<p>Até o presente momento a Totvs não disponibilizou uma modificação no padrão do retorno da mensagem do serviço Web para o Protheus 10.</p>
<p>Gostaria de agradecer a Vicente de Paula (vicenterecife@gmail.com) por ter originado os questionamentos que deram origem a este artigo.</p>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2011/10/consumindo-web-service-do-protheus-com-jax-ws/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Como descobrir seu dispositivo desconhecido.</title>
		<link>http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/</link>
		<comments>http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 17:05:37 +0000</pubDate>
		<dc:creator>Clemar Folly</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>
		<category><![CDATA[Dispositivo desconhecido]]></category>
		<category><![CDATA[Drivers]]></category>
		<category><![CDATA[Formatação]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/?p=691</guid>
		<description><![CDATA[Algumas vezes é necessário formatar o computador, porém, utilizar aquele DVD de restauração padrão que vem com a máquina acaba instalando coisas além do necessário, consumindo recursos do sistema que poderiam ser utilizados em atividades mais nobres. Desta forma surge o primeiro inimigo da formatação: o DISPOSITIVO DESCONHECIDO. Mesmo depois do advento do plug and [...]]]></description>
			<content:encoded><![CDATA[<p>Algumas vezes é necessário formatar o computador, porém, utilizar aquele DVD de restauração padrão que vem com a máquina acaba instalando coisas além do necessário, consumindo recursos do sistema que poderiam ser utilizados em atividades mais nobres.</p>
<p>Desta forma surge o primeiro inimigo da formatação: o DISPOSITIVO DESCONHECIDO.</p>
<p>Mesmo depois do advento do plug and play e Windows Update alguns dispositivos acabam sendo esquecidos e quando vamos atualizar o sistema operacional eles aparecem de forma alienígena.</p>
<p>Exemplificando, podemos ver na imagem abaixo um dispositivo denominado Co-processador não sendo reconhecido pelo Windows 7 64-bit, então o que fazer?<br />
<span id="more-691"></span><br />
<div id="attachment_696" class="wp-caption aligncenter" style="width: 495px"><a rel="attachment wp-att-696" href="http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/2009-12-04_092742-2/"><img class="size-full wp-image-696" title="Co-processador desconhecido." src="http://oslunaticos.com.br/wp-content/uploads/2010/02/2009-12-04_0927421.png" alt="Co-processador desconhecido." width="485" height="612" /></a><p class="wp-caption-text">Co-processador desconhecido.</p></div></p>
<p>Selecionando o Co-processador, em Outros dispositivos, podemos ver que o sistema não conseguiu instalar os drivers para o dispositivo.</p>
<p>Iniciando o processo de descoberta do software é necessário acessar as propriedades do dispositivo.</p>
<div id="attachment_694" class="wp-caption aligncenter" style="width: 424px"><a rel="attachment wp-att-694" href="http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/2009-12-04_093133/"><img class="size-full wp-image-694" title="Driver não instalado." src="http://oslunaticos.com.br/wp-content/uploads/2010/02/2009-12-04_093133.png" alt="Driver não instalado." width="414" height="461" /></a><p class="wp-caption-text">Driver não instalado.</p></div>
<p>Após abrir a tela de propriedades, clica-se na aba de Detalhes e seleciona a Propriedade IDs de Hardware.</p>
<div id="attachment_695" class="wp-caption aligncenter" style="width: 424px"><a rel="attachment wp-att-695" href="http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/2009-12-04_093006/"><img class="size-full wp-image-695" title="Detalhes do dispositivo." src="http://oslunaticos.com.br/wp-content/uploads/2010/02/2009-12-04_093006.png" alt="Detalhes do dispositivo." width="414" height="461" /></a><p class="wp-caption-text">Detalhes do dispositivo.</p></div>
<p>Nesta janela é apresentada toda a solução do problema na linha selecionada.</p>
<blockquote><p>PCI\<strong>VEN_10DE</strong>&amp;<strong>DEV_0543</strong>&amp;SUBSYS_01271025&amp;REV_A2</p></blockquote>
<p>A partir desta <a href="http://pt.wikipedia.org/wiki/String" target="_blank">string</a> podemos identificar o código do fabricante (VEN_10DE) e do dispositivo (DEV_0543).</p>
<p>De posse destas informações o Google nos ajuda a resolver o problema. Então é só localizar um driver escrito para o seu sistema operacional, neste caso, Windows 7 64-bit.</p>
<div id="attachment_712" class="wp-caption aligncenter" style="width: 619px"><img class="size-full wp-image-712" title="Busca no Google" src="http://oslunaticos.com.br/wp-content/uploads/2010/02/busca-google.png" alt="Resultado da busca no Google" width="609" height="259" /><p class="wp-caption-text">Resultado da busca no Google</p></div>
<p>Após a localização do driver, basta voltar até a aba geral da tela de propriedades do dispositivo e clicar no botão Atualizar Driver.</p>
<p>Na tela de atualização do driver deve-se selecionar Procurar software de driver no computador, como mostrado na imagem abaixo.</p>
<div id="attachment_697" class="wp-caption aligncenter" style="width: 638px"><a rel="attachment wp-att-697" href="http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/2009-12-04_093148/"><img class="size-full wp-image-697" title="Modo de instalação do driver." src="http://oslunaticos.com.br/wp-content/uploads/2010/02/2009-12-04_093148.png" alt="Modo de instalação do driver." width="628" height="460" /></a><p class="wp-caption-text">Modo de instalação do driver.</p></div>
<p>Informe a localização dos arquivos baixados na caixa de texto referente a Procurar software de driver neste local.</p>
<div id="attachment_698" class="wp-caption aligncenter" style="width: 638px"><a rel="attachment wp-att-698" href="http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/2009-12-04_093212/"><img class="size-full wp-image-698" title="Selecionar localização do driver." src="http://oslunaticos.com.br/wp-content/uploads/2010/02/2009-12-04_093212.png" alt="Selecionar localização do driver." width="628" height="460" /></a><p class="wp-caption-text">Selecionar localização do driver.</p></div>
<p>Estando o driver correto, o Windows consegue instalar o Co-processador sem problemas, agora conhecido como NVIDIA nForce System Management Controller.</p>
<div id="attachment_699" class="wp-caption aligncenter" style="width: 638px"><a rel="attachment wp-att-699" href="http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/2009-12-04_093229/"><img class="size-full wp-image-699" title="Dispositivo reconhecido e instalado." src="http://oslunaticos.com.br/wp-content/uploads/2010/02/2009-12-04_093229.png" alt="Dispositivo reconhecido e instalado." width="628" height="460" /></a><p class="wp-caption-text">Dispositivo reconhecido e instalado.</p></div>
<p>Concluido o processo de instalção retorna-se para a janela de propriedades do dispositivo e nela já é exibida a mensagem que &#8220;Este dispositivos está funcionando corretamente.&#8221;.</p>
<div id="attachment_700" class="wp-caption aligncenter" style="width: 424px"><a rel="attachment wp-att-700" href="http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/2009-12-04_093249/"><img class="size-full wp-image-700" title="Dispositivo funcionando corretamente." src="http://oslunaticos.com.br/wp-content/uploads/2010/02/2009-12-04_093249.png" alt="Dispositivo funcionando corretamente." width="414" height="461" /></a><p class="wp-caption-text">Dispositivo funcionando corretamente.</p></div>
<p>No Gerenciador de Dispositivos é verificado que não existe mais dispositivos desconhecidos.</p>
<div id="attachment_701" class="wp-caption aligncenter" style="width: 495px"><a rel="attachment wp-att-701" href="http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/2009-12-04_093311/"><img class="size-full wp-image-701" title="Nenhum dispositivo desconhecido." src="http://oslunaticos.com.br/wp-content/uploads/2010/02/2009-12-04_093311.png" alt="Nenhum dispositivo desconhecido." width="485" height="612" /></a><p class="wp-caption-text">Nenhum dispositivo desconhecido.</p></div>
<p>Assim termina a saga da instalação dos Co-processador desconhecido no Windows 7 64-bit, mas fica uma excelente dica de como identificar e instalar dispositivos que não possuem drivers listados nos sites dos seus fabricantes.</p>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2011/10/como-descobrir-seu-dispositivo-desconhecido/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Steve Jobs deixa o cargo de CEO da Apple</title>
		<link>http://oslunaticos.com.br/2011/08/steve-jobs-deixa-o-cargo-de-ceo-da-apple/</link>
		<comments>http://oslunaticos.com.br/2011/08/steve-jobs-deixa-o-cargo-de-ceo-da-apple/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 23:34:31 +0000</pubDate>
		<dc:creator>Felippe Montez</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[cargo]]></category>
		<category><![CDATA[CEO]]></category>
		<category><![CDATA[demissão]]></category>
		<category><![CDATA[Steve Jobs]]></category>

		<guid isPermaLink="false">http://oslunaticos.com.br/2011/08/steve-jobs-deixa-o-cargo-de-ceo-da-apple/</guid>
		<description><![CDATA[Pessoal, Nesta tarde de quarta-feira, Steve Jobs, fundador da Apple (já sabia disso, né?) deixou o cargo de CEO. Apesar de deixar o cargo, Steve Jobs continuará como diretor, empregado e chairman no board da Apple. Abaixo, a sua &#8220;carta de demissão do cargo&#8221;: To the Apple Board of Directors and the Apple Community: I [...]]]></description>
			<content:encoded><![CDATA[<p>Pessoal,</p>
<p>Nesta tarde de quarta-feira, Steve Jobs, fundador da Apple (já sabia disso, né?) deixou o cargo de CEO.</p>
<p>Apesar de deixar o cargo, Steve Jobs continuará como diretor, empregado e chairman no board da Apple.</p>
<p>Abaixo, a sua &#8220;carta de demissão do cargo&#8221;:<br />
<span id="more-1529"></span><br />
To the Apple Board of Directors and the Apple Community:</p>
<p>I have always said if there ever came a day when I could no longer meet my duties and expectations as Apple’s CEO, I would be the first to let you know. Unfortunately, that day has come.</p>
<p>I hereby resign as CEO of Apple. I would like to serve, if the Board sees fit, as Chairman of the Board, director and Apple employee.</p>
<p>As far as my successor goes, I strongly recommend that we execute our succession plan and name Tim Cook as CEO of Apple.</p>
<p>I believe Apple’s brightest and most innovative days are ahead of it. And I look forward to watching and contributing to its success in a new role.</p>
<p>I have made some of the best friends of my life at Apple, and I thank you all for the many years of being able to work alongside you.</p>
<p>Steve</p>
]]></content:encoded>
			<wfw:commentRss>http://oslunaticos.com.br/2011/08/steve-jobs-deixa-o-cargo-de-ceo-da-apple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

