Skip to content

Commit

Permalink
Método delete atualizado
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasSnatiago committed Sep 8, 2020
1 parent 17bad77 commit 7a2f638
Showing 1 changed file with 21 additions and 40 deletions.
61 changes: 21 additions & 40 deletions src/crud/Crud.java
Original file line number Diff line number Diff line change
Expand Up @@ -221,51 +221,32 @@ public boolean delete(String chaveSecundaria) {
private boolean delete(int id) {
// Criando uma entidade para receber o byteArray
T entidade = null;
long posLapide = -1;
boolean encontrar = false;
long pos = -1;

try {
// Lendo o primeiro registro do programa, apos os metadados
arquivo.seek(this.tamMetadados);

// Procurar o objeto com a id especificada no arquivo
boolean lapide;
while(this.arquivo.getFilePointer() < this.arquivo.length() && !encontrar) {
lapide = false;
posLapide = arquivo.getFilePointer(); // Pegando a posicao atual da lapide
if(this.arquivo.readChar() == '*') lapide = true;

int tamRegistro = arquivo.readInt(); // Pegando o tamanho do registro
if(lapide) {
this.arquivo.seek(arquivo.getFilePointer() + tamRegistro);
// Pegar o ponteiro do arquivo no indice
pos = this.arquivoIndiceDireto.read(id);

} else {
byte[] registro = new byte[tamRegistro];
this.arquivo.read(registro);

// Construindo uma entidade a partir do vetor de bytes dela
entidade = this.constructor.newInstance();
entidade.fromByteArray(registro);

// Verificando se a id do objeto eh a pesquisada
if(entidade.getId() == id) {
// Objeto encontrado
encontrar = true;
this.arquivo.seek(posLapide);
this.arquivo.writeChar('*');

// Removendo dos outros arquivos de dados
// Removendo do Índice Direto
this.arquivoIndiceDireto.delete(id);
// Removendo do Índice Indireto
this.arquivoIndiceIndireto.delete(entidade.chaveSecundaria());
} catch (Exception e) { e.printStackTrace(); }

} // Caso nao encontre continue procurando no while
}
}


} catch(Exception e) { e.printStackTrace(); }
// Removendo apenas itens que não existem na memória
if (pos != -1) {
try {

Entidade elemento = new Entidade(pos); // Criando uma cópia do objeto na memória
this.arquivo.seek(pos); // Deslocar para o elemento no arquivo
this.arquivo.writeChar('*'); // Remover o elemento do disco

// Removendo dos outros bancos de dados
this.arquivoIndiceDireto.delete(id);
this.arquivoIndiceIndireto.delete(elemento.objeto.chaveSecundaria());

// Objeto encontrado e removido!
encontrar = true;

} catch(Exception e) { e.printStackTrace(); }
}

return encontrar;
}
Expand Down

0 comments on commit 7a2f638

Please sign in to comment.