↓ Arquivos ↓

Arquivo → August, 2009

Swing: how to discover the current character position on a JEditPane

Did you ever had the need to know your current character position on a JEditorPane? Well, I had to and, for my surprise, it wasn’s so simple as I thought. In a first moment, I thought: “hmm… probably there’s some method in this class like getCurrentCharacterLine() or getCurrentCharacterColumn() that I can use”. Well, that’s not the case.

So here is a little snippet you may use to solve this problem:


//txtScript is an instance of javax.swing.JEditorPane
txtScript.addCaretListener(

/*

In this case, I added a new intance of CaretListener so I could update the caption of a JLabel component with the current row and column of the cursor.

*/
txtScript.addCaretListener(
new CaretListener() {

public void caretUpdate(CaretEvent e) {

int row = txtScript.getDocument().getRootElements()[0].getElementIndex(txtScript.getCaretPosition());

int column = txtScript.getCaretPosition() - txtScript.getDocument().getRootElements()[0].getElement(row).getStartOffset();

lblCharacterPosition.setText("Row: " + (row + 1) + ", Column:" + (column + 1));

}

}

));

JEditPane: como descobrir a posição do cursor?

Recentemente me deparei com o seguinte problema: ao desenvolver uma DSL usando Groovy, me vi na necessidade de verificar em qual linha do meu código erros eram encontrados ao serem executados pelo interpretador.

O script em questão era digitado em um componente do tipo JEditorPane. Em um primeiro pensei: “moleza!”, no entanto, não há um método pronto para que você obtenha o número da linha aonde o seu cursor se encontra (!!!). Caso você se depare com este problema, o snippet abaixo lhe salvará algum tempo de pesquisa na internet:


//txtScript consiste na minha instância de javax.swing.JEditorPane
txtScript.addCaretListener(

/*

Neste caso, criei uma nova instância de CaretListener para que um componente do tipo JLabel seja atualizado sempre que o usuário movimentar o cursor dentro do componente

*/

new CaretListener() {

public void caretUpdate(CaretEvent e) {

int row = txtScript.getDocument().getRootElements()[0].getElementIndex(txtScript.getCaretPosition());

int coluna = txtScript.getCaretPosition() - txtScript.getDocument().getRootElements()[0].getElement(row).getStartOffset();

lblPosicaoCaractere.setText("Linha: " + (row + 1) + ", Coluna:" + (coluna + 1));

}

}

);

Tosco mas funciona :)

Sending e-mails with Grails: the simple way

Sending e-mails with Grails can be quite complicated (yeap, I know about the Mail Plugin, but I also know many people who had some problems with it AND it’s a Grails only alternative).

If you don´t want to use a plugin, you can always count with the Java Mail API, or even the Spring Framework support for it, right? Yeah, right: but at least for me, it seems like a to complex solution for a simple need. So, I started my quest for a simple way to do it. The solution I found was right in front of me all the time (so usual…): Commons E-mail, which is part of the Apache Commons project!

To show how you can use it, here is a small snippet:


import org.apache.commons.mail.SimpleEmail
class MailService {

boolean transactional = false
// I added the configuration on the same class just for the sake of simplicity (you should NEVER do this on a real case)
String host= "your.mail.ver"
String username = "your.login"
String password = "your.password"
String from = "me@me.com"
Integer port = 465

def send(String subject, String msg, String to) {

//SimpleEmail is the class which will do all the hard work for you
SimpleEmail email = new SimpleEmail()
email.setHostName(host)
email.addTo(to)
email.setFrom(from)
email.setSubject(subject)
email.setMsg(msg)

//If you need authentication, this is the method
email.setAuthentication(username,password)

// If you need to specify your smtp port, this is how to
email.setSmtpPort(port)

// So all you need to do is call the method send() and your e-mail will be delivered (at least in theory)
email.send()
}
}

Just like I wanted: simple!

Dependencies

All you need is JAF, which may be downloaded on the following link: http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp

Where to download Commons E-mail: http://commons.apache.org/email/

Grails: Enviando e-mails de uma forma REALMENTE simples

Enviar e-mails usando Grails pode ser uma tarefa muito chata. Sim, temos o plugin mail , com o qual muitas pessoas enfrentam dificuldades (e outra: é uma alternativa útil somente dentro do ambiente Grails). Outra possibilidade consiste em usar os wrappers que o próprio Spring nos oferece para lidar com o problema, porém a tarefa continua sendo, ao menos na minha opinião, complexa DEMAIS para algo que deveria ser simples (aliás, se quiser tornar o processo realmente infernal, experimente usar a API Java Mail).

Visto que as aplicações que crio em Grails nem sempre possuem sua lógica de negócios implementada em Groovy, precisava de uma solução que pudesse fácilmente implementar usando Java puro. A solução que encontrei é o Commons E-mail que, como o próprio nome já diz, consiste em um subcomponente da excelente biblioteca Commons da Apache.

Para ilustrar o uso deste bichinho, segue abaixo um serviço extremamente simples que implementei:


import org.apache.commons.mail.SimpleEmail
class MailService {

boolean transactional = false
// Inclui as configurações do serviço no próprio serviço apenas por comodidade para este post
String host= "mail.itasks.com.br"
String username = "seu_user_name_aqui"
String password = "senhaquente"
String from = "eu@eu.com"
Integer port = 465

def send(String subject, String msg, String to) {

//SimpleEmail é a nossa classe heróica
SimpleEmail email = new SimpleEmail()
email.setHostName(host)
email.addTo(to)
email.setFrom(from)
email.setSubject(subject)
email.setMsg(msg)

//Precisando de autenticação, ESTE é o método
email.setAuthentication(username,password)

// Caso precise definir a porta do seu servidor smtp
email.setSmtpPort(port)

// e isto faz todo o trabalho pra você :)
email.send()
}
}

Reparou na simplicidade do código? Não precisei me preocupar com sessões, mimetypes, nada! Apenas as configurações básicas do seu servidor SMTP e da mensagem que você pretende enviar.

Dependência

A única dependência do componente consiste no JAF, que é um arquivo de menos de 300kb que pode ser baixado em  http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp

Site do projeto: http://commons.apache.org/email/

Grails usado na automação hospitalar

Hoje para minha surpresa (agradável) recebi um e-mail de uma empresa chamada Wareline me informando sobre o seu novo sistema de automação hospitalar 100% feito em Grails.

Considero um case interessante, uma vez que estes sistemas não podem falhar de maneira alguma (e muita gente ainda tem um pé atrás com relação à estabilidade oferecida pelo Grails).

Segue abaixo o conteúdo que me foi enviado por Carla Akl, que faz parte do departamento de comunicação da empresa:

Wareline começa a desenvolver novo sistema utilizando Grails

A Wareline, empresa de informatização hospitalar, que desde janeiro iniciou o projeto de migração da plataforma de desenvolvimento Windows para a JAVA, começou agora a utilizar o Grails (framework web open-source que utiliza a linguagem Groovy) e outros frameworks consagrados como Hibernate e Spring. O objetivo em usar essas ferramentas é que, além de proporcionarem segurança aos usuários, elas permitem flexibilidade para a escolha do banco de dados, o que significa que o cliente Wareline poderá optar em qual banco quer utilizá-la, mais uma vez podendo ficar livre de licenças. Para completar, esta ferramenta oferece alta qualidade e aplicações fáceis de serem utilizadas, o que levou a empresa desenvolvedora do Grails a ser comprada pela Spring Source e receber um investimento muito significativo.

Vantagens do desenvolvimento dessa plataforma:

Portabilidade: O sistema independe de Sistema Operacional, ou seja, ele pode funcionar em qualquer ambiente, como por exemplo, Windows, Linux, MAC-OS, etc. Com isso o cliente Wareline não fica preso a licenças, podendo utilizar sistemas open-source.

Distribuição: Como é um sistema que fica na Web, poderá ser utilizado em qualquer máquina no planeta que tenha um Navegador (Browser).

Sobre a Wareline

Criada em 1989, a Wareline é uma empresa especializada em desenvolvimento de sistemas de informatização hospitalar, que oferece integração e automatização das partes operacionais e financeiras das instituições de saúde. As soluções e serviços da Wareline garantem aos clientes qualidade nos sistemas e expertise junto aos órgãos públicos e privados com os quais têm interface.
Atuando no mercado nacional, a Wareline atende mais de 230 instituições, entre hospitais universitários, filantrópicos, particulares e redes municipais distribuídos nos estados de São Paulo, Minas Gerais, Goiás, Mato Grosso, Rio de Janeiro, Bahia e Paraná.  Visite o site: www.wareline.com.br

RISE: an almost perfect ER diagram tool

Every time I start to work on an ER diagramming tool it’s the same story: the tool is quickly replaced by paper and pencil because it’s too expansive or too complex (or rough). So, as time went by, I just gave up of these tools. Basically, all I need is a graphical tool for this kind of job.

So I discovered RISE (developed by a swedish company called RISE to Bloom). It have the basic attributes that, at least for me, make this product a winner:

  • Easy to use: the user interface is really simple. It didn’t take me a lot of time to understand it.
  • Price: it’s free. I’m currently using the free version, which have all the basic functionalities I need. (this version also includes code generators for MySQL, SQLServer, C# and PHP).Warning RISE is not free software, it only have a free version.
  • Easy installation: the software is installed using .NET’s ClickOnce technology (as a Java developer, I just can’t avoid to feel kind of envy of this .NET feature when I remember Webstart…). As a pre-requisite, all you’ll need is .NET 3.5.

Actually, I have only one complaint about RISE: it’s based on .NET 3.5, which means that it will only run on Windows (I know that it’s possible to run it using some virtualization tool like VMWare). This may not be a problem for those which are used to work only with Windows, but unfortunetely, that’s not my case. Most of my work is done on Linux and Mac OS.

So, here is my tip: if you need an ER diagram tool (for the Windows platform) which is easy to use, setup and offer a great cost-benefit, RISE may be the right tool for you.

(actually, it’s unfair to call RISE “an ER diagram tool”, because it is in fact, as RISE to Bloom describes it: “a software suite for Information System Engineering. It’s a tool for model driven system development, packed with features and functions needed to build your information model and to turn it into a complete information management solution.”)

Link: http://www.risetobloome.com/Default.aspx

RISE: um “editor de diagramas de entidades e relacionamentos” QUASE perfeito

Sempre que vou trabalhar em um diagrama de entidades e relacionamentos termino na mesma situação: o computador é substituido por lápis e papel (ou PowerPoint (!!!)). Ou o editor que encontrei é muito tosco, ou complexo demais ou muito caro. Por esta razão, acabei por desistir destes editores.

Bom: isto até encontrar o RISE (desenvolvido pela empresa sueca RISE to Bloom), que contém os atributos que o tornam ideal para o meu caso:

  • Direto ao ponto: já começo a trabalhar direto nos meus diagramas. Não perdi tempo algum aprendendo o básico do funcionamento. A interface gráfica do produto é incrívelmente simples e fácil de ser compreendida (desde que você saiba o que de fato é um diagrama de entidades e relacionamentos).
    (Confesso que tive uma dificuldade inicial (de 30 segundos) relacionada ao modo como os relacionamentos são definidos, porém foi falha 100% minha, e não do software)

    Interface do RISE (retirada do próprio site)

  • Preço razoável: gratuito. Há uma versão gratuita do editor que não corta nenhuma das suas funcionalidades relacionadas ao design de diagramas.(Esta versão gratuita também inclui geradores de código (para MySQL, SQLServer, C# e PHP). Porém, para o meu caso, raramente será utilizado)ponto importante: não é software livre (muita gente confunde software gratuito com livre). A empresa sueca que o produz (RISE to Bloom) gera sua receita a partir de uma série de serviços relacionados a este editor. Serviços estes que achei inclusive bastante interessantes.
  • Instalação simples: a instalação é feita usando o recurso ClickOnce do .NET (como programador Java, sinto uma certa inveja deste recurso. Como eu gostaria que o Java Webstart fosse como o ClickOnce!)
  • Requisitos simples: o seu computador só precisa ter o .NET 3.5 instalado (e aqui entra o único porém do produto)

A única queixa que tenho contra o RISE diz respeito justamente aos seus requisitos de sistema: .NET 3.5. Este não será um problema para você caso trabalhe apenas com a plataforma Windows. Porém, na minha situação (muito trabalho no Mac OS e Linux, e pouco no Windows) este é um fator limitador (sim, eu sei que posso executar o software usando uma máquina virtual). Seria ótimo se existissem versões do RISE para Linux ou Mac OS também.

Na realidade, o RISE é mais do que um simples editor de diagramas. Trata-se de uma plataforma para desenvolvimento de sistemas de informação. É possível, por exemplo, gerar código Ajax que acesse sua base de dados remotamente, o que me parece ser um recurso bastante interessante. Porém, para o meu caso (alguém que precisa APENAS de uma ferramenta gráfica), este recurso ainda é superfluo.

Sendo assim, fica aqui a dica. Caso precise de um editor de diagramas de entidade relacionamento simples, direto ao ponto e gratuito, experimente o RISE. Se bobear, é exatamente o que você precisa (caso a limitação que citei não seja um problema).

Link: http://www.risetobloome.com/Default.aspx

Get Adobe Flash playerPlugin by wpburn.com wordpress themes