package br.pitagoras.oda.orgarq;
import java.util.List;
import java.util.Map;
import br.pitagoras.oda.orgarq.util.OrgArquivosUtil;
public class ProcessadorDeArquivoDireto extends OrgArquivoAbstrato implements OrgArquivosInterface{
private int tamanho;
public ProcessadorDeArquivoDireto(int tamanho) {
this.tamanho = tamanho;
}
@Override
public RegistroDeArquivo buscar(String chave) {
RegistroDeArquivo reg = null;
try {
Map<String, String> tabelaHash = OrgArquivosUtil.obterMapaRegistrosDiretosDoArquivo(getNomeArquivoDados());
String valor = tabelaHash.get(chave);
if (valor != null && !valor.trim().isEmpty()){
reg = new RegistroDeArquivo(valor);
}
} catch (Exception e) {
}
return reg;
}
@Override
public void inserir(RegistroDeArquivo registro) {
// verificar se o registro já existe na posicao calculada
RegistroDeArquivo reg = buscar(registro.getId());
try {
if (reg != null){ // se sim
// lancar um erro
System.out.println("error");
} else { // senao
// inserir na tabela hash
Map<String, String> tabelaHash = OrgArquivosUtil.obterMapaRegistrosDiretosDoArquivo(getNomeArquivoDados());
tabelaHash.put(registro.getId(), registro.obterCampos());
// salvar a tabela no arquivo
OrgArquivosUtil.escreverMapaRegistrosDiretosEmArquivo(getNomeArquivoDados(), tabelaHash);
}
} catch (Exception e) {
}
}
@Override
public void atualizar(String chave, String valorAtual, String novoValor) {
// obter o registro
RegistroDeArquivo reg = null;
try {
reg = buscar(chave);
if (reg == null){
System.out.println("Error");
} else {
// atualizar o registro
reg.atualizar(valorAtual, novoValor);
// salvar o registro
Map<String, String> tabelaHash = OrgArquivosUtil.obterMapaRegistrosDiretosDoArquivo(getNomeArquivoDados());
tabelaHash.put(chave, reg.obterCampos());
OrgArquivosUtil.escreverMapaRegistrosDiretosEmArquivo(getNomeArquivoDados(), tabelaHash);
}
} catch (Exception e) {
}
}
@Override
public List<RegistroDeArquivo> pesquisar(String valor) {
List<RegistroDeArquivo> registros = pesquisarRegistrosEmArquivoDeDados(valor);
// TODO Auto-generated method stub
return registros;
}
@Override
public void excluir(String chave) {
try {
// buscar a tabela hash
Map<String, String> tabelaHash = OrgArquivosUtil.obterMapaRegistrosDiretosDoArquivo(getNomeArquivoDados());
// verificar se o registro existe
if (tabelaHash.get(chave) == null){
// se nao
// lancar erro
} else {// senao
// remover o registro da tabela
String reg = tabelaHash.get(chave);
tabelaHash.remove(reg);
// salvar a tabela de dados em arquivo
OrgArquivosUtil.escreverMapaRegistrosDiretosEmArquivo(getNomeArquivoDados(), tabelaHash);
}
} catch (Exception e) {
}
}
}
package br.pitagoras.oda.orgarq;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import br.pitagoras.oda.orgarq.util.OrgArquivosUtil;
public abstract class OrgArquivoAbstrato {
private String nomeArquivoDados;
private String nomeArquivoIndices;
protected RegistroDeArquivo buscarEmArquivoDeDados(String chave){
RegistroDeArquivo registro = null;
try {
BufferedReader br = new BufferedReader(new FileReader(nomeArquivoDados));
String s = br.readLine();
String colunas = null;
if (s != null){
colunas = s;
}
s = br.readLine();
while (s != null) {
if (chave.equals(s.split(";")[0])){
registro = new RegistroDeArquivo(s);
break;
}
s = br.readLine();
}
br.close();
} catch (Exception e) {
System.err.println("ERRO ao realizar a busca pela chave " + chave);
throw new RuntimeException("ERRO ao realizar a busca pela chave ", e);
}
return registro;
}
public void setNomeArquivoDados(String nomeArquivoDados) {
this.nomeArquivoDados = nomeArquivoDados;
}
public void setNomeArquivoIndices(String nomeArquivoIndices) {
this.nomeArquivoIndices = nomeArquivoIndices;
}
public String getNomeArquivoDados() {
return nomeArquivoDados;
}
public String getNomeArquivoIndices() {
return nomeArquivoIndices;
}
public List<RegistroDeArquivo> listarRegistros() {
List<RegistroDeArquivo> registros = new ArrayList<RegistroDeArquivo>();
RegistroDeArquivo reg = null;
try {
// Para cada registro no arquivo de dados
List<String> listDados = OrgArquivosUtil.obterRegistrosDoArquivo(getNomeArquivoDados());
for (String s: listDados){
// se o registro possuir o valor
reg = new RegistroDeArquivo(s);
registros.add(reg);
}
// retornar a listagem de resultados
} catch (Exception e) {
String msg = "ERRO ao tentar listar registros";
System.err.println(msg);
throw new RuntimeException(msg, e);
}
return registros;
}
public List<RegistroDeArquivo> pesquisarRegistrosEmArquivoDeDados(String valor) {
List<RegistroDeArquivo> registros = new ArrayList<RegistroDeArquivo>();
RegistroDeArquivo reg = null;
try {
// Para cada registro no arquivo de dados
List<String> listDados = OrgArquivosUtil.obterRegistrosDoArquivo(getNomeArquivoDados());
for (String s: listDados){
// se o registro possuir o valor
if (s.contains(valor)){
reg = new RegistroDeArquivo(s);
registros.add(reg);
}
}
// retornar a listagem de resultados
} catch (Exception e) {
String msg = "ERRO ao tentar listar registros";
System.err.println(msg);
throw new RuntimeException(msg, e);
}
return registros;
}
public List<String> listarIndices(){
try {
return OrgArquivosUtil.obterRegistrosDoArquivo(getNomeArquivoIndices());
} catch (Exception e) {
String msg = "ERRO ao tentar listar os indices do arquivo";
System.err.println(msg);
throw new RuntimeException(msg, e);
}
}
}
package br.pitagoras.oda.orgarq;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import br.pitagoras.oda.orgarq.util.OrgArquivosUtil;
import br.pitagoras.oda.orgarq.util.StringUtil;
public class ProcessadorDeArquivoIndexado extends OrgArquivoAbstrato implements OrgArquivosInterface {
public ProcessadorDeArquivoIndexado(String nomeArquivoDeIndices, String nomeArquivoDeDados) {
this.setNomeArquivoDados(nomeArquivoDeDados);
this.setNomeArquivoIndices(nomeArquivoDeIndices);
System.out.println("Criando um processador de arquivo indexado . . .");
System.out.println("Arquivo de índices: " + nomeArquivoDeIndices);
System.out.println("Arquivo de dados: " + nomeArquivoDeDados);
}
String buscarNoIndice(String chave) throws FileNotFoundException, IOException{
// buscar no arquivo de indices
Map<String, String> mapaIndices = OrgArquivosUtil.obterMapaRegistrosDoArquivo(getNomeArquivoIndices());
// obter o indice associado a chave
String indice = mapaIndices.get(chave);
// se o indice existir
return indice;
}
@Override
public RegistroDeArquivo buscar(String chave){
RegistroDeArquivo reg = null;
try {
// buscar no arquivo de indices
String indice = buscarNoIndice(chave);
// se o indice existir
if (indice != null){
// obter o registro associado ao indice
int pos = Integer.parseInt(indice);
List<String> dadosDoArquivo = OrgArquivosUtil.obterRegistrosDoArquivo(getNomeArquivoDados());
reg = new RegistroDeArquivo(dadosDoArquivo.get(pos));
// retornar o registro encontrado
}
} catch (Exception e) {
String msg = "ERRO: busca pela chave " + chave;
System.err.println(msg);
throw new RuntimeException(msg, e);
}
return reg;
}
@Override
public void inserir(RegistroDeArquivo registro){
// realizar a busca pelo registro
try {
String chave = registro.getId();
String indice = buscarNoIndice(chave);
// se ele existir
if (indice != null){
// informar que o registro já existe
System.out.println("AVISO: o registro com chave " + chave + " já existe.");
} else { // senão
// adicionar o registro novo no arquivo de dados
List<String> listDados = OrgArquivosUtil.obterRegistrosDoArquivo(getNomeArquivoDados());
listDados.add(registro.obterCampos());
int pos = listDados.indexOf(registro.obterCampos());
OrgArquivosUtil.escreverRegistrosEmArquivo(getNomeArquivoDados(), listDados);
System.out.println("Arquivo de dados salvo com sucesso: " + listDados.size());
// adicionar o registro novo no arquivo de indices
Map<String, String> mapaRegistros = OrgArquivosUtil.obterMapaRegistrosDoArquivo(getNomeArquivoIndices());
mapaRegistros.put(registro.getId(), String.valueOf(pos));
OrgArquivosUtil.escreverMapaRegistrosEmArquivo(getNomeArquivoIndices(), mapaRegistros);
System.out.println("Arquivo de indices salvo com sucesso: " + mapaRegistros.size());
}
} catch (Exception e) {
String msg = "ERRO ao tentar inserir um novo registro " + registro;
System.err.println(msg);
throw new RuntimeException(msg, e);
}
}
@Override
public void atualizar(String chave, String valorAtual, String valorNovo){
try {
// buscar pelo registro
String indice = buscarNoIndice(chave);
// se o registro nao for encontrado
if (indice == null){
// mostrar mensagem de erro
} else { // senão
// obter o registro do arquivo de dados
RegistroDeArquivo registro = buscarEmArquivoDeDados(chave);
// atualizar o campo
registro.atualizar(valorAtual, valorNovo);
// salvar o novo registro
List<String> listDados = OrgArquivosUtil.obterRegistrosDoArquivo(getNomeArquivoDados());
int pos = Integer.parseInt(indice);
listDados.set(pos, registro.obterCampos());
OrgArquivosUtil.escreverRegistrosEmArquivo(getNomeArquivoDados(), listDados);
}
} catch (Exception e) {
String msg = "ERRO ao tentar atualizar um registro com chave " + chave;
System.err.println(msg);
throw new RuntimeException(msg, e);
}
}
@Override
public List<RegistroDeArquivo> pesquisar(String valor){
List<RegistroDeArquivo> registros = new ArrayList<RegistroDeArquivo>();
RegistroDeArquivo reg = null;
try {
// Para cada registro no arquivo de dados
List<String> listDados = OrgArquivosUtil.obterRegistrosDoArquivo(getNomeArquivoDados());
for (String s: listDados){
// se o registro possuir o valor
if (s.contains(valor)){
// adiciona-lo na lista de resultados
reg = new RegistroDeArquivo(s);
registros.add(reg);
}
}
// retornar a listagem de resultados
} catch (Exception e) {
String msg = "ERRO ao tentar pesquisar por um registro com valor " + valor;
System.err.println(msg);
throw new RuntimeException(msg, e);
}
return registros;
}
@Override
public void excluir(String chave){
try {
// verificar se a chave existe no arquivo de indices
String indice = buscarNoIndice(chave);
// se sim
if (StringUtil.isEmpty(indice)){
System.out.println("AVISO: o registro com chave " + chave + " não existe.");
} else {
// buscar o registro no arquivo de dados
List<String> listDados = OrgArquivosUtil.obterRegistrosDoArquivo(getNomeArquivoDados());
int pos = Integer.parseInt(indice);
// remover o registro do arquivo
listDados.remove(pos);
// atualizar o arquivo
OrgArquivosUtil.escreverRegistrosEmArquivo(getNomeArquivoDados(), listDados);
// remover o registro do arquivo de indices
Map<String, String> mapaIndices = OrgArquivosUtil.obterMapaRegistrosDoArquivo(getNomeArquivoIndices());
mapaIndices.remove(chave);
OrgArquivosUtil.escreverMapaRegistrosEmArquivo(getNomeArquivoIndices(), mapaIndices);
}
} catch (Exception e) {
String msg = "ERRO ao tentar excluir um registro com chave " + chave;
System.err.println(msg);
throw new RuntimeException(msg, e);
}
}
}