jornada de cursos -j2me aula 5 – record management system
TRANSCRIPT
Jornada de Cursos -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• Gerenciamento 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)
.....
Array de bytes2
Array de bytes1
DadoID de registro
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
• Core Java, 2nd Edition