Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System.

Post on 19-Apr-2015

106 views 0 download

Transcript of Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System.

Programa Expresso de CapacitaçãoMódulo J2ME

Aula 5 – Record Management System

Pausa para reflexão

"Sem esforço não há progresso, mas com esforço também não há progresso”

Ryotan Tokuda, Mestre Zen

Record Management System• Gereciamento de registros persistentes• Registro• Identificador ligado a um array de bytes

• Equivalente a armazenamento em arquivo de J2SE

• Classes para armazenar, recuperar, enumerar, comparar e filtrar dados não-voláteis

RMS• Armazém de registros (RecordStore)

• Nomenclatura• Até 32 caracteres UNICODE (16 bits)

ID de registro Dado1 Array de bytes

2 Array de bytes

... ..

RMS• Informações adicionais• Número da versão: um valor inteiro que é

incrementado a cada modificação do conteúdo do armazém

• Indicação de data/hora: última modificação do armazém

• A existência dos registros está limitada à do MIDlet que os criou

RMS - Métodos• static RecordStore openRecordStore(String nome, boolean criarSeNecessario);

• void closeRecordStore();

• void delete recordStore(String nome);

• int addRecord(byte[] dados, int offset, int numBytes);

• void setRecord(int recordId, byte[] novosDados, int offset, int numBytes);

• byte[] getRecord(int recordId);

• int getRecord(int recordId, byte[] buffer, int offset);

RMS – Métodos (Cont.)• int getNumRecords();

• long getLastModified();

• String getName();

• addRecordListener(RecordListener listener);

• removeRecordListener(RecordListener listener);

RMS - Exemplo...RecordStore rs = null; String nome = “Eduardo”;...try { rs = RecordStore.openRecordStore( “meusdados", true ); byte[] recData = nome.getBytes(); rs.addRecord(recData, 0, recData.length); //Grava dados ... //Recupera dados String retorno = new String( rs.getRecord(1) );

} catch( Exception e ) { // tratamento de exceção}

RecordEnumeration• Interface que fornece métodos de movimentação para

frente e para trás em registros• Semelhante ao Iterator em J2SE• Pode levar em conta filtros (para pesquisa) e/ou

comparadores (para ordenação)• Ex: classificar registros em ordem alfabética

RecordEnumeration• Métodos Principais

• RecordEnumerator enumerateRecords(RecordFilter filter, RecordComparator comparator, boolean keepUpdated); *

• byte nextRecord();• byte previousRecord();• Boolean hasNextElement();• Boolean hasPreviousElement();• Void keepUpdated(boolean keep);

* Método da classe RecordStore

Exemplo.....RecordEnumeration enum = re.enumerateRecords(null, null,

false);

while ( re.hasNextElement() ) {//armazena o próximo registro em um StringString str = new String(re.nextRecord());… processa algo…

}…

RecordComparator• Interface para comparação entre registros

• Método a ser implementado• Int compare(byte[] rec1, byte[] rec2);

• Tipos de RecordComparator• EQUIVALENT – rec1 é equivalente a rec2• FOLLOWS – rec1 vem depois de rec2 • PRECEDES – rec1 vem antes de rec2

Exemplo...public class Comparador implements RecordComparator {

public int compare(byte rec1, byte rec2) {String str1 = new String(rec1);String str2 = new String(rec2);

int resultado = str1.compareTo(str2);if (resultado == 0)

return RecordComparator.EQUIVALENT;else if (result < 0)

return RecordComparator.PRECEDES;else

return RecordComparator.FOLLOWS;}

}

Exemplo (Cont.)...//Cria um novo comparador para ordenarComparador comp = new Comparador();

//Referencia o comparador ao criar a enumeraçãoRecordEnumeration re = rs.enumerateRecords(null, comp, false);

//Itera nos registros, que já estarão ordenadosWhile ( re.hasPreviousElement ) {

... String s = new String(re.previousRecord());...

}…

RecordFilter• Interface para filtro de registros

• Apenas os resultados que correspondem ao critério do filtro, farão parte do conjunto enumerador

• Método a ser implementado• boolean matches(byte[] candidate)

Exemplo...class Filtro implements RecordFilter {

private String textoBuscado = null;

public Filtro(String textoBuscado) {//este é o texto a ser pesquisadothis.textoBuscado = textoBuscado.toLowerCase();

}

public boolean matches(byte[] candidato) {String str = new String(candidato).toLowerCase();//procura uma correspondênciaif ( textoBuscado != null && str.indexOf(textoBuscado) != -1 ) {

return true;} else {

return false;}

}}

Exemplo (Cont.)...//Cria um novo filtro de buscaFiltro filtro = new Filtro(“Texto a ser buscado”);

//Referencia o filtro ao criar o enumeradorRecordEnumeration re = rs.enumerateRecords(filtro, null, false);

/*Se houver pelo menos um registro no conjunto de resultados, uma correspondência foi encontrada*/

if (re.getNumRecords() > 0) {//Manipula os resultados

}…

RecordListener• Notificação de que um registro foi adicionado,

removido ou atualizado• Ex: Salvar preferências de um usuário

• Opera como os outros Receptores de eventos já vistos em aula

• Métodos a serem implementados• void recordAdded(RecordStore rs, int recordId);• void recordChanged(RecordStore rs, int recordId);• void recordDeleted(RecordStore rs, int recordId);

Exercício

• Implemente a persistencia de uma agenda. Considere que cada elemento é composto de 3 Strings: Nome, Endereco e Telefone.

• Escreva filtros em cima da implementação acima.

Referências

• Tutoriais da Sun