Java Magazine - Edição 038
Java Magazine - Edição 038
Java Magazine - Edição 038
Conversores no Struts
Estenda o framework para garantir
a converso e a formatao de dados
Eclipse Callisto
Conhea o novo projeto do Eclipse.org
que simplifica a vida do desenvolvedor
Relatrios
&
Grcos
Agrupamentos,
totalizaes e grficos com
JasperReports e iReport
17/7/2006 14:07:33
jm38.indb 2
17/7/2006 14:07:45
Contedo
EXPLORANDO O CD
PRODUTOS ORACLE
Passos para instalao do JDeveloper
10g, Oracle Containers for J2EE e
Oracle Database Express Edition,
includos no CD-ROM.
Sees
10
CAFENA
LEONARDO GALVO
Aprendendo programao OO com Greenfoot; Shale
e Tapestry top-level; novos Groovy, Geronimo e WTK
08
60
64
22
Capa
DATAS NO DESKTOP
Desktop
FERNANDO LOZANO
Manipulao de datas em aplicaes Swing usando componentes de
calendrio do projeto NachoCalendar, e conceitos sobre JavaBeans e MVC
Eclipse
Web
jm38.indb 3
PROJETO CALLISTO
FERNANDO LOZANO
Detalhes sobre o novo projeto da Fundao Eclipse, que simplifica a
instalao de dez plug-ins fundamentais do Eclipse.org
36
12
44
68
56
17/7/2006 14:09:05
Esp a
Direo
Diretor Editorial Leonardo Galvo
Diretor de Marketing Gladstone Matos
Diretor Comercial Casseano Filho
Edio
Publisher e Editor-Chefe
Leonardo Galvo (leonardo@javamagazine.com.br)
Editores-Adjuntos
Fernando Lozano (lozano@javamagazine.com.br)
Osvaldo Doederlein (osvaldo@javamagazine.com.br)
Colaboraram nesta edio
Ana Abrantes, Ari Dias Neto, Douglas Jos Rodrigues,
Fernando Lozano, Hugo Vidal Teixeira, Julio Faerman,
Leonardo Galvo, Osvaldo Doederlein, Yara Senger
Arte
Diretor de Arte Tarcsio Bannwart (phdesign@phdesign.com.br)
Diagramao Jaime Peters Junior, Lais Pancote e Tersis Zonato
Ilustraes Felipe Machado e Francisco Peixoto
Produo
Gerncia de Marketing Kaline Dolabella
Distribuio
Fernando Chinaglia Distribuidora S.A.
Rua Teodoro da Silva, 907, Graja - RJ
CEP 20563-900, (21) 3879-7766 - (21) 2577-6362
Atendimento ao leitor
A DevMedia possui uma Central de Atendimento on-line, onde voc pode
tirar suas dvidas sobre servios, enviar crticas e sugestes e falar com um
de nossos atendentes. Atravs da nossa central tambm possvel alterar
dados cadastrais, consultar o status de assinaturas e conferir a data de envio
de suas revistas. Acesse www.devmedia.com.br/central, ou se preferir
entre em contato conosco atravs do telefone 21 2283-9012.
Edies anteriores
Adquira as edies anteriores da revista Java Magazine ou de qualquer outra
publicao do Grupo DevMedia de forma prtica e segura, em
www.devmedia.com.br/anteriores.
Publicidade
publicidade@javamagazine.com.br, 21 2213-0940
Anncios Anunciando nas publicaes e nos sites do Grupo DevMedia,
voc divulga sua marca ou produto para mais de 100 mil desenvolvedores
de todo o Brasil, em mais de 200 cidades. Solicite nossos Media Kits, com
detalhes sobre preos e formatos de anncios.
Reprints Editoriais Se foi publicado na Java Magazine um artigo que
possa alavancar as suas vendas, multiplique essa oportunidade! Solicite a
reimpresso da matria junto com a capa da edio em que saiu, e distribua
esse reprint personalizado entre seus clientes.
Encarte de CDs Faa como nossos maiores anunciantes. Encarte um CD
com uma amostra de seus produtos na Java Magazine e atinja um pblico
segmentado e formador de opinio.
Realizao
Apoio
Boa leitura!
Leonardo Galvo
Parceiros
jm38.indb 4
17/7/2006 14:10:00
p ao do Leitor
Iniciando com Java
jm38.indb 5
17/7/2006 14:10:09
Espao do Leitor
JDBC
Quero parabenizar toda a equipe de Java Magazine pelo excelente trabalho de contedo e de
visual da revista. Os artigos sobre JDBC nas edies
25 e 26 (Persistncia Turbinada) so excelentes, e
ajudaram a esclarecer muitas questes.
Carlos Eduardo Privati
Correo na Edio 36
Ao me deparar com um trecho de cdigo na pgina 22 da Ediao 36 (artigo Qualidade Aplicada),
no cdigo referente escolha de polimorfismo ao
switch, h uma linha desta forma:
public class Cliente { public abstract void venda(); }
Essa classe no deveria ser abstrata, e por conseqncia ela no poderia ser instanciada?
Fbio Jos Fernandes
Realmente, houve um erro neste trecho de
cdigo: Cliente deveria ser abstract. J a primeira
verso da classe Cliente mostrada no artigo,
com um atributo int tipo, concreta. Quanto a
no permitir instanciao, era essa a inteno
Pools
Em aplicaes que processam vrias requisies
ao mesmo tempo e exigem mltiplas conexes
com o banco de dados, fica clara a necessidade
de um pool de conexes. Existem vrias APIs que
prometem resolver o problema, mas para quem
iniciante na tecnologia fica difcil avaliar o melhor
caminho. Vocs podem dar algumas sugestes?
Carlos Eduardo Privati
A princpio, voc no precisaria se preocupar
com isso, pois hoje em dia a grande maioria das
aplicaes Java que acessam SGBDs diretamente, se forem construdas segundo um paradigma
multicamadas, utilizam servidores Java EE para o
back-end (servidor). Em qualquer servidor Java
EE, desde um produto open source e limitado
web como o Tomcat at um servidor Java EE
completo como o JBoss ou Weblogic, voc pode
utilizar o recurso de DataSources, que encapsu-
Participe!
Envie sua dvida, comentrio, correo
ou sugesto, com nome completo,
cidade e estado, para:
cartas@javamagazine.com.br
Cartas publicadas podem ser editadas
por motivos de clareza ou extenso.
17/7/2006 14:10:22
jm38.indb 7
17/7/2006 14:10:27
Cafen a
News & Bits
Shale top-level
O framework web Shale foi aprovado como
um projeto top-level da Apache Software
Foundation. Com isso torna-se autnomo
na ASF, em vez de um subprojeto do Apache
Struts. Ter, assim, seu prprio website, listas
Geronimo 1.1
Magnolia 3
Graduao do Tapestry
Novo WTK
Foi lanado o beta do Sun Wireless Toolkit
2.5 para CLDC, o popular kit de ferramentas para desenvolvimento de aplicaes
Java Micro Edition. Vrias novas APIs esto
implementadas, entre elas Mobile Service
Architecture (JSR-248), Scalable 2D Vector
17/7/2006 14:10:34
n a
Leonardo Galvo
Groovy JSR-6
Est disponvel a ltima verso do Groovy
antes do lanamento da primeira verso
Release Candidate (RC). Segundo o lder
do projeto, Guillaume Laforge, esto sendo realizadas mudanas significativas no
BlueJ, IDE voltado ao aprendizado cas de imagens. Por ser baseado no BlueJ, o
de orientao a objetos e Java, tem Greenfoot j vem com editor de cdigo Java,
um novo derivado o Greenfoot depurador e inspetor de objetos, incluindo
que cria um ambiente grfico bidimen- recursos que permitem atuar sobre o mosional altamente flexvel para estimular o delo de objetos criado (os atores e mundos
aprendizado de tcnicas OO. O novo am- so objetos Java comuns com mtodos,
biente, assim como o BlueJ, direcionado atributos e construtores). Pode-se, por
a estudantes que esto iniciando a progra- exemplo, criar um novo ator escolhendo um
mao, mas se diferencia por privilegiar um de seus construtores em um menu; executar
pblico mais jovem, do nvel colegial.
Com visual bem cuidado, o Greenfoot
se baseia em dois conceitos fundamentais: mundos e atores que so
representados por imagens e tm seus
comportamentos programados por
cdigo Java. Como mostram os vrios
exemplos includos na distribuio, atores
podem ser praticamente qualquer coisa,
desde pequenos mamferos australianos
at foguetes, formigas e rochas. Podem
tambm ser programados para interagir
com o mundo e com outros atores, permitindo a criao de simulaes sofisticadas
e at jogos.
Atravs de uma API simples, mas j
bastante extensa, o usurio pode definir
novos atores e mundos, e programar
rapidamente operaes comuns em
simulaes, como deslocamento na tela,
verificao de colises, animaes e tro- Greenfoot: Criao de simulaes e jogos para aprender Java e orientao a objetos
17/7/2006 14:10:36
Explorando
o CD
Incio da instalao
O CD inclui um arquivo Autorun.inf,
que, em alguns sistemas, far com que a
pgina inicial seja carregada automaticamente (veja a Figura 1). Caso no seja, abra
a pgina index.htm na raiz do CD.
Para iniciar a instalao, clique no boto
Install Now!. Ser mostrada uma lista
de restries; marque todas as checkboxes,
leia a licena a seguir e, se decidir aceit-la,
clique em I Accept. Na prxima pgina,
ser mostrada uma senha para instalao,
que ser sempre 10gJ2EE (para os trs
produtos). Ao final da pgina, voc ver
instrues para instalao, que detalhamos a seguir.
JDeveloper 10g
OC4J
A instalao do OC4J igualmente simples. Descompacte o arquivo oc4j1013.zip,
localizado no diretrio oc4j do CD, para
uma pasta adequada do disco (exemplo:
c:\Java\oc4j). Para que seja possvel usar os
scripts de execuo do OC4J, sua varivel
de ambiente JAVA_HOME deve estar definida, apontando para o diretrio principal
17/7/2006 14:10:42
Oracle Express
O Oracle Database 10g Express Edition inclui um
instalador convencional (para Windows). Descompacte o arquivo OracleXE.zip para algum local do disco
e execute OracleXE.exe. Siga os primeiros passos do
wizard, defina uma senha para contas de sistema e
prossiga com a instalao.
Para testar a instalao, selecione a opo Ir Para a
Home Page de Banco de Dados no grupo de programas criado para o programa (ou visite diretamente a
URL http://127.0.0.1:8080/apex). Fornea o login system e a senha definida na instalao. A pgina inicial
de administrao ser exibida (veja a Figura 5).
17/7/2006 14:10:43
Java Livre
Datas no Desktop
Sobre o NachoCalendar
O NachoCalendar um projeto open
source criado em meados de 2004 no
SourceForge. Como tem licena LGPL,
pode ser includo tambm em aplicaes
distribudas sob licenas de software
proprietrio, sem que isto exija a permisso dos desenvolvedores e sem obrigar a
17/7/2006 14:10:51
Fernando Lozano
abertura do cdigo da aplicao que faz
uso do componente.
So fornecidos trs componentes principais, todos no pacote net.sf.nachocalendar.
components:
DateField Permite tanto a digitao
de datas quanto a seleo em uma janela pop-up, com estilo semelhante a um
combobox.
DatePanel basicamente o pop-up utilizado pelo DateField, mas fornecido como
uma subclasse de JPanel. Por isso pode ser
posicionado livremente dentro de uma
janela para formar telas de entrada de
dados customizadas (como numa agenda
de compromissos).
CalendarPanel Outra subclasse de JPanel,
que exibe mltiplos DatePanels simultaneamente, formando uma viso de calendrio
que exibe diversos meses, com navegao
e layout customizveis.
A Figura 1 apresenta a aplicao de demonstrao inclusa com o NachoCalendar.
Observe que o componente j est localizado para o portugus brasileiro, usando
recursos presentes no Java SE, por meio de
java.text.DateFormat e classes relacionadas.
Os trs componentes compartilham
muitos recursos, de modo que a maior
parte do que se aprende sobre o mais
simples vlida tambm para os mais
complexos. Assim o artigo inicia apresentando exemplos de uso do DateField, e
depois passa para o DatePanel. Para evitar
que o artigo fique muito longo, entretanto, no sero apresentados exemplos do
CalendarPanel. No entanto, a parte principal
da sua utilizao ser exatamente igual
do DatePanel.
A Edio 22 apresenta, na seo Primeiros
Passos, um artigo que detalha todas as APIs de
manipulao de datas do Java SE. Leitura reco-
Instalao do NachoCalendar
Para obter o NachoCalendar, visite
nachocalendar.sf.net, siga o link Downloads
e baixe o arquivo nachocalendar- 0.23.
zip. Ento descompacte o ZIP em uma
pasta qualquer. Ser criado o diretrio
nachocalendar- 0.23 que contm, entre
outros, o arquivo manual-0.23.pdf, um
QuickStart para a utilizao do componente. A documentao JavaDoc pode
ser encontrada no subdiretrio doc. Em
lib est o arquivo nachocalendar-0.23.jar,
que deve ser adicionado ao classpath de
compilao e de execuo de qualquer
aplicao que utilize os componentes do
NachoCalendar.
Para executar o programa de demonstrao do projeto, execute a seguinte linha
de comando, onde %NACHO% deve ser
substitudo pelo diretrio contendo o JAR
do NachoCalendar:
Figura 1. Aplicao de demonstrao do NachoCalendar: observe no DatePanel que a data atual pode ser indicada por uma
elipse vermelha (os retngulos vermelhos indicam os componentes em si).
13
17/7/2006 14:10:52
qui apresentamos uma breve relao de outros componentes e bibliotecas livres para Java,
que podem substituir ou complementar o NachoCalendar, agrupados em categorias de
acordo com suas finalidades.
Note que so todos projetos hospedados no SourceForge, mesmo que alguns tenham seus prprios domnios DNS independentes e em alguns casos sites independentes do SourceForge.
Arquitetura do NachoCalendar
O manual do NachoCalendar parece in-
17/7/2006 14:10:54
15
17/7/2006 14:10:55
return dateField;
}
Esta mudana ser reconhecida pelo VE e incorporada rea de desenho em poucos segundos.
O VE um editor poderoso e flexvel, embora
ainda no seja to intuitivo nem eficiente quanto
o Matisse do NetBeans.
17/7/2006 14:10:57
A flexibilidade
dos componentes
java.util.Date;
java.text.DateFormat;
java.awt.BorderLayout;
javax.swing.*;
net.sf.nachocalendar.components.*;
getContentPane().add(BorderLayout.CENTER, dateField);
pack();
1
17/7/2006 14:10:59
getContentPane().add(BorderLayout.CENTER, dateField);
pack();
}
private ChangeListener dataAlterada = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JOptionPane.showMessageDialog(EventosData.this,
A data escolhida foi: + dateField.getValue(),
Data alterada, JOptionPane.INFORMATION_MESSAGE);
}
};
//...mtodo main omitido
}
17/7/2006 14:11:02
Listagem 4. ExibeCalendario.java adio de um DayRenderer customizado para exibir linhas de grade no calendrio
//...imports omitidos
public class ExibeCalendario extends JFrame {
private DatePanel datePanel;
public ExibeCalendario() throws Exception {
setTitle(Exemplo do NachoCalendar);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
DefaultDayRenderer dayRenderer = new DefaultDayRenderer();
dayRenderer.setBorder(new MatteBorder(new Insets(1, 1, 1, 1),
Color.LIGHT_GRAY));
getContentPane().add(BorderLayout.NORTH,
new JLabel(Calendrio Swing));
datePanel = new DatePanel();
datePanel.setRenderer(dayRenderer);
}
}
getContentPane().add(BorderLayout.CENTER, datePanel);
pack();
getContentPane().add(BorderLayout.CENTER, datePanel);
pack();
};
}
JOptionPane.showMessageDialog(EscolheVariasDatas.this,
As datas escolhidas foram:\n + listaDatas,
Datas alteradas, JOptionPane.INFORMATION_MESSAGE);
19
17/7/2006 14:11:03
Exibio de feriados
Encerrando os exemplos de uso do NachoCalendar, ser visto como acrescentar
feriados ao DatePanel. O processo envolve
duas etapas:
1. Fornecer um decorator1 para o DayRenderer,
Convenes e introspeco
O uso da introspeco em JavaBeans baseado na obedincia a algumas convenes,
como o uso de um construtor sem argumentos
e de mtodos de acesso getXxx()/setXxx() para
propriedades. Estas convenes bsicas se
tornaram bastante populares, ao ponto de se
confundir a obedincia a elas como sendo a
BeanInfo
A outra forma de se relacionar atributos,
propriedades e eventos fornecidos por um
JavaBean fornecendo uma classe que implementa a interface java.beans.BeanInfo. Esta classe
deve ser nomeada acrescentando-se o sufixo
BeanInfo ao nome do JavaBean, e pode estar
tanto no mesmo pacote do JavaBean descrito
por ela quando num pacote em separado, configurado pelo IDE.
Ento o IDE pode oferecer suporte especializado para um dado componente, fornecendo uma
classe BeanInfo customizada, que pode substituir
17/7/2006 14:11:04
Concluses
}
}
getContentPane().add(BorderLayout.CENTER, datePanel);
pack();
nachocalendar.sf.net
Site oficial do NachoCalendar.
eclipse.org/vep
Pgina oficial do VE (Visual Editor), plug-in que
permite programao visual Swing e SWT no IDE
Eclipse.
java.sun.com/docs/books/tutorial/uiswing
Trilha de construo de interfaces Swing do Java
Tutorial da Sun.
java.sun.com/products/jfc/tsc/articles/
architecture
Documento da Sun que descreve a arquitetura do
Swing e seu uso da arquitetura MVC.
java.sun.com/developer/onlineTraining/
Beans
Tutoriais sobre componentes JavaBeans; leitura
obrigatria para construtores e usurios de
componentes de extenso Swing.
java.sun.com/products/javabeans/
docs/spec.html
Especificao JavaBeans.
netbeans.org
Site oficial do NetBeans, com recursos
sofisticados para programao visual.
javamagazine.com.br/downloads/jm38/
jm-datasdesktop.zip
Fernando Lozano
(lozano@javamagazine.com.br,
www.lozano.eti.br) trabalha h
mais de 10 anos com desenvolvimento de sistemas de informaes
e integrao de redes, sendo um dos
pioneiros do uso do Software Livre no Brasil. Dentro
da comunidade, atua como Conselheiro do LPI Brasil,
Webmaster da FSF e Community Manager do Java.net.
Atualmente consultor associado Neki Technologies
(www.neki.com.br).
21
17/7/2006 14:11:13
Byte Code
Relatrios e Grficos c
Usando o Business Intelligence and Reporting
17/7/2006 14:11:22
s com Eclipse
ng
Tools BIRT
O Projeto BIRT
O projeto BIRT tem o objetivo de construir ferramentas de Business Intelligence
e relatrios, usando o modelo open source
e as tecnologias da Fundao Eclipse.
interessante destacar algumas conseqncias menos evidentes desta definio:
O BIRT no simplesmente um "plug-in
para o IDE Eclipse". Pode-se utiliz-lo
sem nenhum IDE, inclusive para a edio
visual de relatrios.
O BIRT se integra arquitetura de
ferramentas do Eclipse, o que significa
que haver outros plug-ins para Eclipse a
se beneficiar do BIRT, como j o caso do
TPTP 4.2 (Eclipse Test and Tools Platform).
O quadro O BIRT, outros geradores de
relatrios e open source discute o status
do BIRT como projeto do Eclipse.org, e o
compara com outros projetos competidores no mundo open source.
Componentes do BIRT
Como toda ferramenta de business
intelligence, o BIRT traz sua prpria sopa
de letrinhas, com muitos novos acrnimos para aprendermos. Os componentes de runtime e design do BIRT so os
seguintes:
ERD (Eclipse Report Designer) Editor visual de definies de relatrios.
WRD (Web Based Report Designer)
Equivalente ao ERD, mas com interface
web (este componente ainda no est
disponvel).
ERE (Eclipse Report Engine) Ge-
Instalando
Existem quatro maneiras de instalar o
BIRT de forma a acompanhar este artigo
(utilizaremos o BIRT 2.1, que baseado no
Eclipse 3.2):
1. Instalao tradicional do Eclipse.
Comeando com o Eclipse 3.2 (Platform
+ JDT, ou SDK), instale os plug-ins EMF
2.2 e GEF 3.2 (tambm exigidos por vrios
outros plug-ins, como o WTP). Basta ento
baixar o pacote birt-report-framework-2.1.zip
e descompact-lo sobre sua instalao do
Eclipse.
2. Callisto. Com o Eclipse 3.2 instalado,
v em Help|Software Updates>Find and
Install>Search for new features to install, escolha Callisto Discovery site e selecione
um mirror. Dentro da rvore de opes
Callisto Discovery Site, abra o ramo
Charting and Reporting e selecione
a opo Eclipse BIRT Report Designer
Framework 2.1.x. Depois clique no boto
Select Required para selecionar as dependncias necessrias para a operao do
BIRT, e clique em Next. Aceite a licena
para os componentes a serem instalados;
clique em Next e depois em Finish.
3. Opo all-in- one. Na pgi na
de download do BIRT, baixe o pacote
birt-report-designer-all-in-one-2_1.zip, que
vem com tudo que voc precisa, incluindo
o prprio Eclipse (SDK), o EMF, o GEF e
o BIRT.
4. RCP Report Designer. a opo para
quem quer usar o BIRT sem o Eclipse;
1
A verso embutida da base Classic Models usa o Apache Derby. Veja mais sobre esse SGBD em Demonstrando
o Apache Derby, na Edio 29.
23
17/7/2006 14:11:28
O projeto
Feita a instalao, execute o comando
File|New>Project, e voc ver que foi criado um novo grupo de projetos para BIRT.
Escolha a opo Report Project e fornea um
nome para o projeto. Isso cria um projeto
puro de relatrio, o que num primeiro
momento simplificar o acompanhamento
desse tutorial. Depois veremos como combinar o relatrio a um projeto Java.
Aps a criao do projeto, o BIRT apresenta a perspectiva Report Design, tambm conhecida como ERD (Eclipse Report Designer). No novo projeto, use
New>Report para criar um relatrio. Fornea o nome carros.rptdesign e na opo de
templates escolha Simple Listing.
Depois de finalizar o wizard, voc ver
o ERD lotado de ferramentas atraentes
editor visual de relatrios, paleta de
elementos, editor de propriedades etc.
Mas um relatrio, antes de tudo, precisa
de dados de entrada, portanto o prximo
passo ser disponibilizar esses dados.
Os dados
Entre na view Data Explorer, clique com
o boto direito sobre o n Data Sources e
selecione New Data Source. Depois escolha
Classic Models Inc. Sample Database. D um
nome data source, ex.: carrosDS. Este
banco de dados de teste embutido no
BIRT1; por isso no exigida nenhuma
outra configurao.
Num projeto real, voc usaria um banco de
dados externo. Se quiser j praticar este cenrio
mais realista, baixe o pacote birt-database-2.1.zip,
que contm os scripts para criao e populao
do mesmo banco de dados Classic Models. Este
pacote contm scripts de criao de tabelas e po-
2
Para outros SGBDs, fcil criar as tabelas a partir dos
scripts create_classicmodels.sql de uma destas verses. J
a populao de dados iniciais est disponvel em vrios
arquivos-texto (formato CSV), que podem ser importados
com facilidade em muitos SGBDs, por exemplo com o
Oracle SQL*Loader.
3
Para quem j usou o JasperReports, o arquivo .rptdesign o equivalente aos arquivos .jrxml, exceto que no
existe uma etapa de pr-compilao para .class.
O relatrio
Como o layout bsico do relatrio est
pronto (usamos um template que j inclui
um grid de quatro colunas), s falta associar nosso Data Set ao layout. Observe que
cada coluna do Grid (na aba Layout) possui
as linhas (rows) Header (cabealho), Detail
(dados) e Footer (rodap). Selecione, no
Data Set, a coluna de resultado Fabricante,
e arraste-a at a linha Detail na primeira
coluna (aparece um dilogo Select Data
Binding; voc pode aceitar as opes default e fech-lo). Faa o mesmo para as
outras trs colunas de resultado.
Um ltimo retoque alterar o formato dos
cabealhos, para que estes se diferenciem
dos dados. Selecione com Shift+clique
cada clula de cabealho, e no Property
Editor mude o Background Color. Mas, como
queremos usar o mesmo estilo para todas
as clulas do cabealho, h uma forma
mais fcil: passe o cursor do mouse sobre
o Grid para mostrar o manipulador Table
(sob o canto inferior esquerdo do Grid);
clique nele, revelando os manipuladores
de linhas e colunas; depois clique no da
primeira linha (a do cabealho). Use ento o Property Editor, customizando a cor
de toda a linha selecionada. O resultado
dever ser parecido com a Figura 2.
Para testar o relatrio, clique na aba
Preview. Voc ver o relatrio funcionan-
Aps a criao inicial do Data Set, o dilogo Edit Data Set permite customizar detalhes como parmetros, colunas calculadas,
cache e filtros, e tambm se ter um preview dos dados
selecionados, de
forma a verificar
que a query est
correta.
Um a lt i m a
etapa essencial
ir na aba Output
Columns (ainda
no dilogo Edit
Data Set) e preencher, para cada
coluna do resultado, o seu Display Name (ex.:
BUYPRICE = Preo). Se voc no Figura 1. Definindo um data set a partir de uma query SQL.
17/7/2006 14:11:29
Grficos
Diz-se que uma imagem vale por mil
palavras, mas no caso de relatrios, por
mil nmeros seria mais apropriado.
Grficos de relatrios (ou charts) permitem
visualizar massas de dados grandes ou
complexas, de forma rpida e intuitiva.
Com o BIRT, tambm podemos criar estes
grficos sem nenhuma programao.
Na view Palette, selecione o componente
Chart e clique no relatrio, no espao vazio
logo abaixo ou acima do Grid (coloquei
acima). Um dilogo New Chart permitir
customizar uma srie de opes, das quais
exploraremos uma seleo.
Na primeira aba, Select Chart Type, a opo mais importante Output Format. So
suportados grficos bitmap (JPG, PNG e
BMP) ou vetoriais (SVG). O SVG teoricamente a opo ideal, mas o suporte a esse
formato ainda est longe de ser universal4).
Por segurana, escolha JPG ou PNG.
4
O Mozilla Firefox possui suporte nativo a SVG, mas o
MSIE exige um plug-in da Adobe.
5
Em estatstica, percentil uma medida de posio de
um valor relativamente aos demais valores do conjunto.
Por exemplo, se um modelo X tem preo 72, e 90% dos
modelos tm preo na faixa 0-72, ento o percentil do
preo de X 90, ou seja, est na faixa de preo de 90%
dos modelos. H nomes para percentis comuns, como
primeiro quartil ou Q1 (= percentil 25), e Mediana (=
percentil 50).
25
17/7/2006 14:11:31
17/7/2006 14:11:32
Instalando a documentao
A documentao do BIRT imprescindvel para se utilizar sua API, mas
no est disponvel num download
isolado. Para obt-la, primeiro baixe o
birt-report-framework-sdk-2.1.zip. Este pacote
contm o mesmo framework que orientamos a instalar no Eclipse, mas inclui
tambm a documentao, o cdigo-fonte
e exemplos. A documentao estar nos
seguintes arquivos:
plugins/org.eclipse.birt.doc_verso/doc.zip
plugins/org.eclipse.birt.doc.isv_verso/doc.zip
plugins/org.eclipse.birt.chart.doc.isv_verso/
doc.zip
Ao extrair estes ZIPs, voc poder explorar a abundante API pblica dos engines
de relatrios, charts, de scripting e de extenso de IDE do BIRT. Observe, contudo,
que todas estas APIs esto documentadas
como provisrias, significando que podem sofrer alteraes incompatveis em
releases futuros (ainda que, na prtica,
isto seja raro).
Mas antes de enveredar por estes JavaDocs, comece pela pgina eclipse.org/birt/
phoenix/deploy/reportEngineAPI.php, que inclui diagramas que explicam a arquitetura
geral do runtime e das APIs do BIRT.
Utilizando parmetros
Nesta etapa, vamos modificar o relatrio
para utilizar parmetros: alm do Data Set,
quase todos os relatrios reais precisam de
argumentos que determinam opes como
filtros de dados.
Vamos criar um filtro para gerar relatrios que consideram apenas produtos de
determinado tipo, como carros ou motos.
Na database, isso exige um filtro como
WHERE productLine = Classic Cars para filtrar
apenas os carros; porm, o argumento do
WHERE deve ser um parmetro dinmico.
Na view Data Explorer, em Re port
Parameters, acione New Parameter e preencha os valores: Name = productLine, Data
type = String e Default value = Classic
Cars. Isso cria um parmetro de entrada
do relatrio, cujo valor deve ser setado pela
aplicao antes de invocar o relatrio.
Agora, abra novamente o Edit Data Set.
6
O runtime do iText pode ser baixado pelo site de
update do Callisto. Mas este componente, assim como um
arquivo prototype.js para funcionalidade AJAX, no so includos nos runtimes do BIRT, talvez devido a restries
de licena. Devem ser baixados parte; veja instrues na
pgina de download do BIRT.
2
17/7/2006 14:11:33
Listagem 1. Cdigo Java para uma aplicao desktop mnima com o BIRT.
import
import
import
import
import
import
java.io.File;
java.io.IOException;
java.util.HashMap;
javax.swing.JEditorPane;
javax.swing.JFrame;
org.eclipse.birt.report.engine.api.*;
17/7/2006 14:11:39
Scripting
Como vimos, podemos ir longe no BIRT s
com cliques do mouse. No outro extremo,
possvel utilizar suas APIs Java para customizar a construo e a gerao de relatrios
ou grficos de uma forma mais dinmica do
que seria possvel somente com documentos
.rptdesign estticos. Mas a virtude, j diziam
os antigos, pode estar no meio, ou seja, entre
quaisquer opes extremas.
O BIRT possui um abrangente suporte a
scripting, permitindo que muitos recursos
avanados sejam implementados com
pequenos trechos de cdigo embutido
nos documentos .rptdesign. suportada
JavaScript, linguagem que ser familiar
para muitos desenvolvedores de interfaces
grficas baseadas na web. Para mais
detalhes sobre o suporte a scripting do
BIRT, veja o quadro Scripting no BIRT e
no Eclipse.
Com a aplicabilidade dos scripts muito
ampla, vamos ilustr-la com uma seleo
de exemplos.
Colunas calculadas
Nossa primeira tarefa gerar no Data
http://127.0.0.1:52939/viewer/run?__report=E%3A%5
COsvaldo%5Ctestws%5CBIRTJava%5Ccarros4.rptdesign&
__format=html&__svg=false&__designer=true&_
_masterpage=true& __rtl=false&__maxrows=&1486415089
2
17/7/2006 14:11:42
elementos do ROM. E vai mais alm: possvel escrever scripts com expresses como
sum(row.BUYPRICE), onde sum uma funo
agregada semelhante do SQL. Ela retorna
a soma dos valores da coluna BUYPRICE para
todas as linhas (rows) do Data Set. Esta
sintaxe no suportada por JavaScript, mas
como linguagens de scripting so por natureza fceis de manipular, o BIRT pode criar
extenses desse tipo com facilidade 8.
O BIRT tambm permite invocar classes
Java a partir do relatrio. No abordamos
essa funcionalidade neste artigo, mas uma
opo bem mais complexa. O cdigo Java
no tem os benefcios do Report Object
Model ou de extenses de sintaxe, sendo
obrigado a utilizar APIs do BIRT, ex.: task.
getParameterValue(productLine). Estas APIs priorizam flexibilidade e desempenho sobre a facilidade de uso, e na verso 2.1 ainda no so
APIs estveis (com garantia contra mudanas
incompatveis em releases futuros).
Em geral, voc s utilizar Java no lugar de
JavaScript se tiver necessidades especiais de
integrao, como reusar mtodos de alguma
biblioteca Java. Ou de desempenho, como
calcular um Data Set muito complexo (o
que pode ser feito em JavaScript, mas com
menos desempenho, por ser uma linguagem
interpretada).
8
Ou seja, os scripts do BIRT no so realmente JavaScript puro, e sim uma extenso. Mas o BIRT faz um
pr-processamento que trata estas extenses e gera
cdigo JavaScript comum, compatveis com runtimes
de JavaScript padro, como o Mozilla Rhino.
7
Este artigo de Joel Spolsky diz tudo sobre a questo
aparncia versus funcionalidade:
joelonsoftware.com/articles/fog0000000356.html
17/7/2006 14:11:44
Customizaes de layout
Vamos a uma outra necessidade importante de relatrios caprichados:
modificar dinamicamente a apresentao
dos dados, para destacar informaes
importantes. Nunca esquea que voc
pago (principalmente) para fazer suas
aplicaes parecerem boas!7
Digamos que voc queira que as linhas
do Grid que exibem os modelos mais baratos sejam exibidas em negrito. Para fazer
isso, selecione o manipulador da linha,
e v na aba Property Editor / Highlights,
que permite definir regras de destaque.
Clique em Add, trazendo o dilogo New
Highlight; no primeiro campo, If following
condition is true, clique o boto .... L est
mais uma vez o Expression builder. Crie
a expresso row[Preo]. De volta ao New
Highlight, no segundo combobox (para a
seleo de operador) escolha Less than;
e no terceiro campo, que tambm aceita
uma expresso, digite 50. Agora, no grupo
Then apply following formatting, clique no
segundo boto B (bold); veja a Figura 9.
Pronto, basta confirmar e testar novamente
o relatrio.
O Report Engine procura oferecer uma
GUI que permita fazer tudo com o mouse,
selecionando opes predefinidas mesmo na edio de scripts. Usurios mais
experientes, que conheam JavaScript e j
tenham aprendido palavras-chave como
row e params, podero ignorar esta interface
grfica e digitar as expresses diretamente. No caso do highlight, acho mais fcil
digitar um nico script no primeiro campo
row[BUYPRICE] < 50 e deixar os outros
como Equals to e true.
Figura 10. Definio de colunas para o data set de scripted data source.
Edio 38 Java Magazine
jm38.indb 31
31
17/7/2006 14:11:45
opo de scripting.
Crie um novo Data Source, com o tipo
Scripted Data Source e nome scriptDS. Na
aba Script do editor, voc ver que o BIRT
permite definir cinco mtodos: open, close,
beforeOpen, beforeClose, afterOpen e afterClose.
Pode ser preciso redefinir estes mtodos,
por exemplo, para abrir e depois fechar
uma conexo com um sistema externo.
Neste exemplo, no precisaremos disso.
Crie um Data Set chamado senoidal
para este Data Source. Voc ver que o
dilogo Edit Data Set mais simples que
Figura 11. Data Set totalmente baseado em scripting, com o cdigo que gera cada nova linha.
Figura 12. Chart gerado a partir do data set senoidal, calculado por um script.
17/7/2006 14:11:48
33
17/7/2006 14:11:49
17/7/2006 14:11:51
www.catb.org/esr/writings/cathedral-
Concluses
Este artigo pretendeu dar uma introduo abrangente ao BIRT, mas o enorme
volume de recursos deste gerador de relatrios s nos permitiu abordar os itens
mais essenciais ou interessantes. Ficou
faltando falar de muitos outros itens, que
enumeramos aqui para completar uma
viso geral das capacidades do BIRT:
Relatrios tabulares (em grids) mais
complexos, com agrupamentos, cabealhos
e rodaps;
Localizao/Internacionalizao;
Refinamentos de layout: suporte a CSS,
quebra de pgina, ndices, bookmarks etc.;
Recursos de filtro e ordenao (geralmente desnecessrios para Data Sets
JDBC que podem usar WHERE e ORDER, mas
necessrios para outros Data Sets);
Mapas (tabelas "de/para");
Outros componentes importantes,
eclipse.org
Projeto Eclipse.
eclipse.org/birt/phoenix/ref
Referncia do BIRT
jasperreports.sf.net
JasperReports, gerador de relatrios open source
javamagazine.com.br/downloads/jm38/
jm-birt.zip
Osvaldo Pinali Doederlein
(opinali@gmail.com) Mestre
em Engenharia de Software
Orientado a Objetos, membro
individual do Java Community Process
(tendo participado do Expert Group da JSR-170:
Tiger/J2SE 5.0), e trabalha na Visionnaire Informtica
como arquiteto e desenvolvedor.
35
17/7/2006 14:11:53
17/7/2006 14:11:58
s so a Passo
Aprenda a definir
agrupamentos e calcular
totais em vrios nveis,
num relatrio mestredetalhe, e como criar
grficos de resumo
r Reports
Cliente: +$F{nomeCliente}
torioItens;
11. O relatrio no deve ter margens, e somente as bandas columnHeader e detail sero
usadas; as demais devem ser desativadas
zerando sua band height;
12. Configure a consulta deste relatrio com
a seguinte string SQL:
SELECT it.quantidade, pro.nome as nomeProduto, pro.preco
FROM pedidos_itens it
JOIN pedidos ped ON ped.numero = it.numero_pedido
JOIN produtos pro ON pro.id = it.id_produto
WHERE it.numero_pedido = $P{numeroPedido}
10. Insira os elementos textfield e static text
at que o relatrio fique com a aparncia da
segunda imagem da Figura 2;
11. Crie o parmetro numeroPedido do tipo
java.lang.Integer;
12. Ao executar, o relatrio ficar como mostrado ao final da Figura 2.
37
17/7/2006 14:11:59
17/7/2006 14:12:01
RelatorioPedidos.jrxml
Total do Cliente:
+ java.text.NumberFormat.getCurrencyInstance(
new Locale(pt,br)).format(
$V{totalCliente}.doubleValue())
Total geral
O prximo passo apresentar o valor
total dos pedidos de todo o relatrio. Novamente usaremos a varivel com o valor
total de cada pedido (no sub-relatrio) e
teremos de criar uma varivel no relatrio
RelatorioPedidos.jrxml para armazenar o
total geral, da mesma forma que foi feito
com a varivel de total por cliente.
E xe c ut e o s s e g u i nt e s pa s s o s e m
RelatorioPedidos.jrxml:
1. Crie uma varivel com campo name
igual a totalGeral.
2. Configure o tipo da varivel (Variable
Class type) para java.lang.Double.
3. Defina Calculation type = System.
4. A varivel deve ser reinicializada sempre que o relatrio executado; ento altere
o campo Reset type para Report.
Veja o resultado na Figura 10.
A seguir, preciso configurar em
RelatorioPedidos.jrxml mais um parmetro
de retorno no elemento subreport, para
que o valor da varivel total do sub-rela-
39
17/7/2006 14:12:02
Subdataset
17/7/2006 14:12:03
RelatorioPedidos.jrxml
jm38.indb 41
41
17/7/2006 14:12:04
Concluses
Neste tutorial mostramos como fazer
agrupamentos e totalizaes e como criar
grficos, em um relatrio mestre-detalhe.
Vimos tambm como definir variveis e a
importncia de indicar o tipo de clculo
e de reinicializao adequados para cada
tipo de varivel. O momento de avaliao
jasperreports.sf.net
Site da biblioteca JasperReports, onde se
pode encontrar downloads do software,
documentao, fruns e mais.
ireport.sf.net
Site da ferramenta iReport, tambm com
downloads, novidades etc.
jfree.org/jfreechart
JFreechart, biblioteca usada para a criao de
grficos no JasperReports/iReport
javamagazine.com.br/downloads/jm38/
jm-maisrelatorios.zip
Ana Abrantes
(ana.abrantes@globalcode.com.br)
desenvolvedora Java na
Globalcode, co-autora do curso
de JasperReports/iReport e possui
algumas certificaes em Java (SCJA, SCJP e SCWCD).
formada pela FATEC-SP e atua na rea de informtica
h mais de 15 anos.
Yara M. H. Senger
(yara@globalcode.com.br) formada
em Cincias da Computao na USP
em So Carlos, especialista em desenvolvimento web; possui as certificaes
SCJA, SCJP e SCWCD. Atualmente Instrutora e Diretora
Educacional da Globalcode, criadora e coordenadora
de diversos cursos das carreiras Academia do Java e
Academia do Web Developer.
Figura 18.ltima pgina do relatrio gerado, com grfico inserido.
17/7/2006 14:12:10
es
a
43
17/7/2006 14:12:16
Interfaces Grficas co m
Parte 1: Conceitos e Tcnicas Fundamentais, e a
AP
T
p
17/7/2006 14:12:18
o m Qualidade
a
Tcnicas de
projeto visual
P
45
17/7/2006 14:12:20
17/7/2006 14:12:22
47
17/7/2006 14:12:26
existirem fronteiras
bem definidas).
3. Identifique elementos que precisam de uma nfase visual adicional
(como ttulos). Aumente o espaamento
entre esses elementos
e outros considerados
crticos.
Figura 3. Excesso de bordas no painel esquerda em contraste com a simplicidade do painel direita.
17/7/2006 14:12:30
Implementao
com JGoodies
U
Preparao
A obteno e instalao da API Forms
so bastante simples: navegue at o site
do JGoodies (jgoodies.com), v at a seo
Downloads e clique em Libraries. L voc
ter acesso aos arquivos zipados de todas
as APIs, os quais contm exemplos, documentao, cdigo-fonte e o JAR que deve
ser includo no classpath da sua aplicao
Usando o FormLayout
Para a criao de uma instncia de
FormLayout, passamos no construtor duas
strings que definem, respectivamente, as
colunas e as linhas que formam a grade da
tela sendo projetada. O JGoodies Forms define uma linguagem simples para montar
essas strings e especificar cada linha e coluna. Uma vantagem que toda a estrutura
do painel est centralizada nessas duas
strings, o que facilita a sua compreenso
e rpida modificao. Em outros gerenciadores, a estrutura normalmente fica
espalhada, exigindo que o desenvolvedor
leia partes extensas do cdigo de GUI para
entender a estrutura sendo definida.
Nosso primeiro exemplo o painel
ilustrado na Figura 5. Para cri-lo utilizando o FormLayout, esboamos a tela em
papel e identificamos as linhas e colunas
que formam a sua estrutura. Observe a
Figura 6 e veja como o painel foi projetado. Repare que existem nove colunas.
As colunas 1, 3, 7 e 9 determinam que a
largura seja a largura preferida dos componentes inseridos em seu interior (no
caso, JLabels ou JTextFields / JComboBoxes).
As colunas 1 e 7 exigem ainda que seus
componentes estejam alinhados direita.
Note que a contagem das linhas e colunas
comea em 1.
As colunas 2, 4 e 8 formam um espaamento de proporo fixada em 3dlu
(dialog units). Essa unidade estabelece um
tamanho que independente de pixels e
calculado levando em conta o tamanho
das fontes (definido pelo look-and-feel) e
a resoluo da tela. Dessa forma, podemos
4
17/7/2006 14:12:31
Tipo de especificao
Valores
Exemplos
Alinhamento de
Colunas
Alinhamento de Linhas
top:100px linha de 100 pixels de altura, onde todos os componentes esto alinhados na parte de cima (topo).
fill:3cm linha de 3 cm de altura, onde os componentes ocupam todo
o espao vertical.
Tamanho Constante
Inteiro + Unidade
Onde Unidade pode ser: px (pixel), pt (point) ou dlu
(dialog unit). (Obs.: 1 pt = 1/72 polegada)
ou
Double + Unidade
Onde Unidade pode ser: in (polegada), mm ou cm.
Tamanho de
Componente
Tamanho Limitado
Redimensionamento
17/7/2006 14:12:32
jm38.indb 51
51
17/7/2006 14:12:36
Listagem 2. Classe que recria o painel do exemplo inicial, agora utilizando a API Forms do JGoodies.
public class JanelaBomExemplo {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(
PlasticXPLookAndFeel.class.getName());
} catch (Exception e) { ... }
{
10dlu, p:grow,
p, 3dlu, p, 7dlu, p,
p, 7dlu, p);
return builder.getPanel();
17/7/2006 14:12:36
Concluses
O que JGoodies?
DefaultFormBuilder builder =
new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
builder.addSeparator(Valores, cc.xyw(1, 1, 6));
builder.add(new JLabel(Primeiro Valor:), cc.xy(2, 3));
pelo W3C, porm utilizando Java para descrever as animaes (ao invs de XML).
Binding: Framework para conectar os
componentes de interface com as classes
de modelo da aplicao. A idia reduzir
o cdigo de apresentao e permitir uma
melhor separao de camadas.
Validation : Suporte flexvel para
validao de campos e formulrios, que
permite diferentes tipos de tcnicas e
indicaes de erros.
Cada API est disponvel para download no site do JGoodies na forma de um
arquivo zipado que contm o cdigofonte, a documentao e arquivos JAR.
Inicialmente essas APIs no eram open
source, mas agora esto disponveis sob
a licena BSD.
jgoodies.com
Site do JGoodies com tutoriais, artigos,
aplicaes e APIs para download.
www.sum-it.nl/enguilin.html
Links sobre projeto visual de interfaces grficas.
www.rspa.com/spi/design-interface.html
Site com informaes sobre interfaces grficas
mantido por Roger Pressman, famoso especialista
em Engenharia de Software.
javamagazine.com.br/downloads/jm38/
jm-guisqualidade-p1.zip
Hugo Vidal Teixeira
(hugo.tech@gmail.com) Bacharel
em Informtica pela UFRJ, mestre
em Engenharia de Software pela
COPPE/UFRJ e pesquisador da rea de
componentes e GUI Design. Atualmente
trabalha como consultor integrado Sakonnet Technology,
onde trabalha diretamente com Karsten Lentzsch (criador
do JGoodies) e empresas especializadas em GUI design,
como Ergosign(.de), Centigrade(.de) e OculusInfo(.com).
53
17/7/2006 14:12:40
OT
AD
A
- Multimdia no celular
- Automao com Ant
- Robocode
- Tag Libraries JSP
- Processando XML em Java
Edio 4
Edio 2
Edio 3
ES
G
OT
AD
A
ES
G
Edio 1
- Ferramentas livres
- Introduo ao J2EE 1.4
- Introduo a J2ME
- J2EE Fundamental
- Dados com JDBC
- Eclip
- O me
- Segu
- Inte
- Expr
- Dados em J2ME
- JavaServer Faces
- Jogos wireless
- Certificao J2EE
- Montando um ambiente Java
- Java no Governo
- Apache FOP
- JSTL Guia Completo
- Cocoon Inicial
- Pacotes WAR e JAR
- Cdigos no Eclipse
- New I/O Fundamental
- Game API
- Criando Plug-ins para Eclipse
- Preferences API
- Tutorial de NetBeans
- API New I/O (java.nio)
- Cesta de compras com Struts
- Testes de carga com JMeter
- Concorrncia e a JVM
Edio 14
Edio 13
Edio 12
ES
G
Edio 11
Edio 9
Edio 10
OT
AD
A
Complete
a sua
coleo!
- Relatrios Corporativos
- Grficos com Java 2D
- Java.net na Prtica
- Raio-X do Tiger
- Paginao na Web
- Form
- ANT
- JBos
- Extre
- Meta