package br.edu.estacio;
import java.io.*;
import javax.microedition.rms.*;
/**
* Classe abstrata para armazenamento de dados persistentes.
* @author Estácio (Prof. Michel Masiero de Aquino).
*/
public abstract class Persistencia {
/**
* Armazena o objeto de banco de dados.
*/
private RecordStore recordStore;
/**
* Armazena o objeto de navegação do banco de dados.
*/
private RecordEnumeration recordEnumeration;
/**
* Construtor.
*/
public Persistencia() {
this.recordStore = null;
this.recordEnumeration = null;
}
/**
* Abre o banco de dados.
* @param nome <code>String</code> - Nome do RecordStore.
* @param criar <code>boolean</code> - Quando <code>true</code> cria o banco de
dados se o mesmo não existir.
* @throws RecordStoreException Se algum erro ocorrer.
*/
protected void abrirRecordStore(String nome, boolean criar) throws
RecordStoreException {
this.recordStore = RecordStore.openRecordStore(nome, criar);
}
/**
* Retorna o banco de dados.
* @return <code>RecordStore</code> - Banco de dados.
*/
public RecordStore getRecordStore() {
return this.recordStore;
}
/**
* Fecha o banco de dados.
*/
public void fecharRecordStore() {
if (null != this.getRecordStore()) {
try {
this.getRecordStore().closeRecordStore();
} catch (RecordStoreException ex) { }
this.recordStore = null;
}
}
/**
* Evento que ocorre ao ler os dados de um registro.
* @param id <code>int</code> - Identificador do registro.
* @param dados <code>DataInputStream</code> - Objeto par ler dados.
* @throws IOException Se algum erro ocorrer.
*/
public abstract void leituraRegistroEvent(int id, DataInputStream dados) throws
IOException;
/**
* Evento que ocorre ao salvar os dados de um registro.
* @param dados <code>DataOutputStream</code> - Objeto para salvar dados.
* @throws IOException Se algum erro ocorrer.
*/
public abstract void salvamentoRegistroEvent(DataOutputStream dados) throws
IOException;
/**
* Lê um registro salvo.
* @param id <code>int</code> - Código de identificação do registro.
* @return <code>boolean</code> - Se <code>true</code> indica sucesso.
*/
public boolean lerRegistro(int id) {
boolean retorno = false;
if (null != this.getRecordStore()) {
try {
byte[] registro = this.getRecordStore().getRecord(id);
if (null != registro) {
ByteArrayInputStream byteArrayInputStream = new
ByteArrayInputStream(registro);
DataInputStream dataInputStream = new
DataInputStream(byteArrayInputStream);
this.leituraRegistroEvent(id, dataInputStream);
dataInputStream.close();
byteArrayInputStream.close();
retorno = true;
}
} catch (Exception ex) {}
}
return retorno;
}
/**
* Salva um registro.
* @param id <code>Integer</code> - Identificador do registro ou <code>null</code>
para incluir um novo.
* @return <code>boolean</code> - Se <code>true</code> indica sucesso.
*/
public boolean salvarRegistro(Integer id) {
boolean retorno = false;
if (null != this.getRecordStore()) {
try {
ByteArrayOutputStream byteArrayOutputStream = new
ByteArrayOutputStream();
DataOutputStream dataOutputStream = new
DataOutputStream(byteArrayOutputStream);
this.salvamentoRegistroEvent(dataOutputStream);
byte[] registro = byteArrayOutputStream.toByteArray();
if (null == id) {
this.getRecordStore().addRecord(registro, 0, registro.length);
} else {
this.getRecordStore().setRecord(id.intValue(), registro, 0,
registro.length);
}
dataOutputStream.close();
byteArrayOutputStream.close();
retorno = true;
} catch (Exception ex) {
}
}
return retorno;
}
/**
* Permite a utilização dos métodos de navegação entre registros no banco de dados.
* @param filter <code>RecordFilter</code> - Objeto para filtrar dados.
* @param comparator <code>RecordComparator</code> - Objeto para ordenar os
registros.
* @param keepUpdated <code>boolean</code> - Se <code>true</code>, a navegação
exibirá qualquer alteração nos registros.
* @return <code>boolean</code> - Se <code>true</code> indica sucesso.
*/
protected boolean iniciarNavagacao(RecordFilter filter, RecordComparator comparator,
boolean keepUpdated) {
boolean retorno = false;
if (null != this.getRecordStore()) {
try {
this.recordEnumeration = this.recordStore.enumerateRecords(filter,
comparator, keepUpdated);
retorno = true;
} catch (RecordStoreNotOpenException ex) { }
}
return retorno;
}
/**
* Reinicia a navegação.
*/
public void reiniciarNavegacao() {
if (null != this.recordEnumeration) {
this.recordEnumeration.reset();
}
}
/**
* Retorna
* @return
*/
public int
return
o total de registros navegáveis.
<code>int</code> - Total de registros navegáveis.
getNumeroNavegaveis() {
(null != this.recordEnumeration) ? this.recordEnumeration.numRecords() :
0;
}
/**
* Vai para o próximo registro.
* @return <code>boolean</code> - Se <code>true</code> indica sucesso.
*/
public boolean irParaProximoNavegavel() {
boolean retorno = false;
if ((null != this.recordEnumeration) && (true ==
this.recordEnumeration.hasNextElement())) {
try {
retorno = this.lerRegistro(this.recordEnumeration.nextRecordId());
} catch (InvalidRecordIDException ex) { }
}
return retorno;
}
/**
* Vai para o registro anterior.
* @return <code>boolean</code> - Se <code>true</code> indica sucesso.
*/
public boolean irParaAnteriorNavegavel() {
boolean retorno = false;
if ((null != this.recordEnumeration) && (true ==
this.recordEnumeration.hasPreviousElement())) {
try {
retorno = this.lerRegistro(this.recordEnumeration.previousRecordId());
} catch (InvalidRecordIDException ex) { }
}
return retorno;
}
}
Download

O Dia em que Eu Mordi Jesus Cristo