Diamond Powder - um framework Java ME para coleta de dados



Documentos relacionados
Orientação a Objetos

Persistência de Dados

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Curso de Aprendizado Industrial Desenvolvedor WEB

Acessando um Banco de Dados

Portal Sindical. Manual Operacional Empresas/Escritórios

Smart Laudos 1.9. A Forma Inteligente de Criar seus Laudos Médicos. Manual do Usuário

Android e Bancos de Dados

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

Construindo portais com Plone

Aprenda como instalar o plugin EclipseUML no Eclipse e como utilizá-lo para fazer engenharia reversa de seu código-fonte.

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão Atualização 26/01/2009 Depto de TI - FASUL Página 1

Noções de. Microsoft SQL Server. Microsoft SQL Server

Scriptlets e Formulários

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes

5 Mecanismo de seleção de componentes

Apresenta. SofStore o mais novo aliado no gerenciamento do seu negócio

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Banco de Dados. Microsoft Access

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

Trecho retirando do Manual do esocial Versão 1.1

Síntese das discussões do fórum Livro-APF: Julho/2010

Upload e Download de Arquivos. Ao programador Morfik, cabe implementar em sua aplicação os mecanismos gerenciem todo o processo acima.

Artur Petean Bove Júnior Tecnologia SJC

Roteiro do Programa e Entrada/Saída

atube Catcher versão 3.8 Manual de instalação do software atube Catcher

Especificação do 3º Trabalho

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

MANUAL DE INSTALAÇÃO DO ODONTO TECHNOLOGY

REP idx. Manual de integração com Ponto Secullum 4

Banco de Dados Microsoft Access: Criar tabelas

Google Drive: Acesse e organize seus arquivos

PROGRAMAÇÃO SERVIDOR PADRÕES MVC E DAO EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

Banco de Dados Microsoft Access: Criar tabelas. Vitor Valerio de Souza Campos

Banco de Dados BrOffice Base

Interfaces Gráficas parte 3

Procedimentos para Reinstalação do Sisloc

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Está apto a utilizar o sistema, o usuário que tenha conhecimentos básicos de informática e navegação na internet.

ANDROID APPLICATION PROJECT

Programação para Celular com Java

Para funcionamento do Netz, alguns programas devem ser instalados e alguns procedimentos devem ser seguidos. São eles:

TUTORIAL FERRAMENTA DE PRÉ-AGENDAMENTO ONLINE. MAPLO

Instalando software MÉDICO Online no servidor

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

02 - Usando o SiteMaster - Informações importantes

MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Facebook. Java com o. Integrando Aplicações. Descubra como é fácil criar uma aplicação para rodar no Facebook. _capa

MQSeries Everyplace. Leia-me primeiro G

Manual de Administração DPS Printer 2.1 NDDigital S/A - Software

Ano III - Número 16. Versão 4.6.4

Manual SAGe Versão 1.2 (a partir da versão )

Manual Captura S_Line

Parte I. Demoiselle Mail

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

JSF e PrimeFaces. Professor: Ricardo Luis dos Santos IFSUL Campus Sapucaia do Sul

Agregador de feeds RSS para dispositivos móveis

Versão 7 TraceGP Ágil

2 Diagrama de Caso de Uso

Sistema de Cancelamento Eletrônico. Manual de utilização do sistema pelo cartório

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Capture Pro Software. Guia de referência. A-61640_pt-br

Microsoft Office Outlook Web Access ABYARAIMOVEIS.COM.BR

Usando o Conference Manager do Microsoft Outlook

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

MANUAL DA AGENFA. Controle de Documentos para Digitalização SEFAZ - CDD. Módulo da Agenfa MAI / 2011 VERSÃO 01

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

Para que seja instalado o Bematef Total, é necessário que o computador onde seja efetuada a instalação

O que há de novo. Audaces Idea

Tutorial Plone 4. Manutenção de Sites. Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados

Universidade Federal do Mato Grosso - STI-CAE. Índice

PROCEDIMENTOS PARA CONVERSÃO DE IMAGENS DIGITALIZADAS EM DOCUMENTO PDF ÚNICO UTILIZANDO A IMPRESSORA FREEPDF XP.

Feature-Driven Development

PROJETO MODUS-SD (TUTORIAL DO PROTÓTIPO) Autor: Gregory Moro Puppi Wanderley. - O protótipo foi desenvolvido na arquitetura cliente - servidor.

VVS Sistemas (21)

MANUAL DE UTILIZAÇÃO SISTEMA DE CADASTRO INTRANET

Manual de Instalação do Agente Citsmart

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

GUIA DE INSTALAÇÃO TOOLBOX.

PROJETO INFORMÁTICA NA ESCOLA

Sistemas Distribuídos

Ferramenta de Pré-agendamento Online Tutorial de Utilização para Usuários TUTORIAL P R É A G E N D A M E N T O O N L I N E.

Guião de Introdução ao Eclipse IDE Índice

MANUAL DE MEMBRO COMUNIDADE DO AMIGO

Universidade de São Paulo São Carlos, SP Instituto de Ciências Matemáticas e de Computação. SSC0206 1/2010 Introdução à Compilação

Módulo de Topografia Avançada. Curvas de nível.

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Permissões de compartilhamento e NTFS - Parte 1

Engenharia de Software III

Sistema de Chamados Protega

INDICE 1. INTRODUÇÃO CONFIGURAÇÃO MÍNIMA INSTALAÇÃO INTERLIGAÇÃO DO SISTEMA ALGUNS RECURSOS SERVIDOR BAM...

MANUAL DE UTILIZAÇÃO. HELP SUPORTE e HELP - REMOTO (Versão de usuário: 2.0)

Projeto Arquitetural do IEmbedded

Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos

OSMobile Força de Vendas

Transcrição:

Artigo GUJ.com.br Diamond Powder - um framework Java ME para coleta de dados Autor Renato Bellia: é formado em Engenharia de Computadores, trabalha com Java EE a mais de 08 anos, e atualmente está utilizando Java ME em seus projetos. Gravata Este artigo explora alguns recursos do Diamond Powder, um framework Open Source para Java ME, que facilita a vida do desenvolvedor de MIDlets. Desenvolva com rapidez formulários para coleta de dados em seus MIDlets, e ganhe em flexibilidade e em gerenciamento automático de persistência RMS. Introdução O desenvolvedor de MIDlets tem que saber lidar com LCDUI e RMS - duas APIs fundamentais do profile MIDP. Enquanto LCDUI permite a construção de interfaces simples, RMS permite o armazenamento de dados persistentes no dispositivo. Muitas vezes uma aplicação MIDlet, dentre outras responsabilidades, tem que implementar funcionalidades de coleta de dados. Por coletor de dados vamos entender um componente de software que, ajuda o usuário a tomar notas rápidas de informações, além de gerenciar o armazenamento e recuperação posterior de tais informações. É possível desenvolver coletores de dados com LCDUI e RMS. Mas isso é um trabalho repetitivo de um projeto com coletor de dados a outro mudam os nomes dos campos da interface com o usuário, mas a lógica de programação envolvida será praticamente a mesma. Diamond Powder é um framework open source para Java ME que acelera a criação de coletores de dados em aplicações baseadas em MIDlets. Ele nasceu durante a implementação um projeto que oferece uma interface móvel para os usuários, via MIDlet. Tal MIDlet demandava não um, mas três coletores de dados. Um princípio que eu procuro seguir sempre é o DRY, e significa Don t Repeat Yourself, ou não se repita, em português. Eu percebi que teria muito trabalho repetitivo para concluir este MIDlet, e a idéia do Diamond Powder começou a se formar. Na prática um coletor de dados gerencia uma seqüência de formulários, com campos de texto, calendários, listas de opções e telas de help. Para descrever um coletor de dados o Diamond Powder utiliza um formato de configuração bastante simples e direto um programador que conhece LCDUI vai se sentir em casa, pois a configuração remete a vários elementos desta API. Vamos verificar como utilizar esse formato de configuração, batizado de schema, e como incorporar os coletores de dados em seus MIDlets.

Um cenário simples Imagine o desenvolvimento de desenvolve um MIDlet que ajude motoristas de carro a manter registros sobre o consumo de combustível de seu carro: O motorista abastece no posto de gasolina e saca seu dispositivo móvel para tomar a nota sobre o valor do odômetro, a quantidade de combustível, o preço do combustível, o nome do posto de gasolina, e a data atual. Mais tarde o motorista precisa recuperar tais dados. Este é um coletor de dados, e o Diamond Powder pode ajudar neste desenvolvimento. Sem dúvida, o MIDlet poderia ir além, fazendo alguma matemática com tais dados, desenhando gráficos, enviado os registros pela o internet, etc, mas estas funcionalidades não competem a um coletor de dados. Definindo um Schema Um schema do Diamond Powder descreve um coletor de dados. Veja alguns elementos que podem ser declarados em um schema: schema: é o elemento raiz, e contém um nome e um número de versão; flow: ou fluxo, é uma seqüência de páginas (page) por onde o usuário pode navegar, durante uma coleta de dados todo schema deve conter ao menos um flow; page: é uma etapa de um fluxo de coleta de dados, é um agrupador de campos de entrada de dados; help: é um texto de ajuda associado a uma página; field: é um campo de entrada de dados, semelhante aos itens LCDUI: textfield, datefield, choicegroup, stringitem, e um campo especial chamado filter ; listmodel: é uma lista de elementos para os choicegroups, onde cada elemento está associado a um número identificador. No código fonte de seu MIDlet o schema se concretiza com um Hashtable veja a listagem 1. Construindo um Coletor de Dados A classe Collector da API do Diamond Powder é uma subclasse de Form, e deve ser instanciada recebendo o objeto de Display do MIDlet, o schema e o nome do flow que será seguido. Além disso: O coletor deve receber via addcommand pelo menos um comando OK e um comando BACK para se integrar com os demais dos formulários do MIDlet. O coletor deve receber via setcommandlistener o tratador de eventos do MIDlet (o próprio MIDlet neste exemplo) Finalmente o método showcurrentpage deve ser invocado para a montagem interna das páginas do coletor (ainda não será exibido no display). Veja a listagem 2. Os comandos OkCommand1 e BackCommand utilizados neste exemplo devem possuir tratamento de eventos para navegar para outros formulários do seu MIDlet que convivem com o coletor. Veja um exemplo na figura 1.

Exibindo o Coletor de Dados Para exibir o coletor deve fazê-lo como se estivesse exibindo um formulário comum. Veja a listagem 3. As figuras 2 e 3 mostram o coletor em funcionamento. Persistência Automática Para armazenar e restaurar todos os dados capturados por um coletor utilizamos a classe StorageManager. Acompanhe a listagem 4. Obtendo Dados de um Coletor A classe collector oferece o método getfields(), que retorna uma Hashtable contendo os objetos LCDUI interpretados a partir do schema. A listagem 5 mostra como obter do coletor o preço do combustível. Poupando Trabalho Repetitivo Se este coletor de dados fosse construído diretamente com LCDUI e RMS, teríamos algo em torno de umas 100 linhas de código. Fica por conta do leitor a experiência: alterar o schema (listagem 1) acrescentando novos campos e páginas, e calcular o tempo e esforço poupados. Coletores são Dinâmicos Um ponto central do Diamond Powder é que um coletor analisa um schema e monta os campos para entrada de dados em tempo de execução. Neste exemplo o schema está hard-coded, mas nada impede a construção dinâmica do Hashtable de schema. Se uma alteração no coletor de dados for necessária (novos campos, por exemplo), é perfeitamente possível entregar uma nova versão de um schema em tempo de execução (via SMS, HTTPConnection,...) para o MIDlet, dispensando o redeployment deste último. Tal caracterpistica confere um novo grau de liberdade ao desenvolvedor de MIDlets. Conclusões O Diamond Powder nasceu da necessidade de simplicidade e agilidade na construção de coletores de dados em aplicações Java ME. Verificamos através dos exemplos como construir rapidamente um schema de coleta de dados, e como integrar um coletor em sua aplicação MIDlet. Existem outros recursos disponíveis e novidades em implementação que podem ser acompanhados através do blog do projeto. Para Saber Mais http://diamond-powder.blogspot.com - o blog é em inglês, mas aceitamos comentários em português. https://diamond-powder.dev.java.net - site do projeto, com bibliotecas e exemplos para download.

Listagem 1. Definição de um schema de coleta de dados public Hashtable getschema() { Hashtable schema = new Hashtable(); //schema declaration: name;version schema.put("schema", "fuelcontrol;1"); //flow declaration: page1;page2;... schema.put("flow.basicrecord", "numbers;extra"); //page declaration: title;field1;field2;... schema.put("page.numbers", "The Numbers;odometer;fuelAmount;fuelPrice"); schema.put("page.extra", "Gas Station;gasStationName;gasStationBrand"); //help for page: help text schema.put("help.extra", "Enter the gas station name and brand"); schema.put("help.numbers", "Enter the odometer mark, the supplied fuel amount and the fuel price"); //text field declaration: field type;label;size;mask schema.put("field.odometer","textfield;odometer;6;numeric"); schema.put("field.fuelamount","textfield;fuel amount;5;decimal"); schema.put("field.fuelprice","textfield;fuel price;5;decimal"); schema.put("field.gasstationname", "textfield;gas station;40;initial_caps_word"); } //choice gorup declaration: field type;label;list model;mode schema.put("field.gasstationbrand", choicegroup;brand;allbrands;exclusive"); //list model declaration: value1;label1;value2;label2;... schema.put("listmodel.allbrands", "999;undefined;1;Atlantic;2;Chevron;3;Esso;4;Texaco"); return schema; Listagem 2. Construindo um coletor de dados private Collector collector; public Collector getcollector() { if (collector == null) { collector = new Collector(getDisplay(), getschema(), "basicrecord"); collector.settitle("collector"); collector.addcommand(getokcommand1()); collector.addcommand(getbackcommand()); collector.setcommandlistener(this); collector.showcurrentpage(); } return collector; } Listagem 3. Exibindo um coletor de dados getdisplay().setcurrent(getcollector());

Listagem 4. Armazenamento e recuperação // um StorageManager deve referenciar um coletor StorageManager sm = new StorageManager(getCollector()); // armazena dados em registro RMS, e retorna o id do registro int id = sm.store(); // para limpar o collector getcollector().reset(); // recupera os dados armazenados em RMS, com o id especificado sm.load(id); // altera um registro RMS com os dados disponíveis no coletor sm.update(id); // remove um registro, dados o schema e o id StorageManager.delete( fuelcontrol, id); Listagem 5. Obtendo campos do coletor Object field = getcollector().getfields().get("field.fuelprice"); String strpreco = ((TextField) field).getstring(); Figura 1. O coletor e os demais formulários de um MIDlet.

Figura 2: página numbers do fluxo basicrecord, e o respectivo help. Figura 3: página extra do fluxo basicrecord, e o respectivo help.