Class TrackDB

java.lang.Object
AEDs3.DataBase.TrackDB
All Implemented Interfaces:
AutoCloseable, Iterable<Track>

public class TrackDB extends Object implements Iterable<Track>, AutoCloseable
Representa um banco de dados binário de faixas de música, permitindo operações de CRUD (Criar, Ler, Atualizar e Deletar), filtragem e ordenação. O banco de dados é gerenciado em um arquivo binário, com cada faixa de música armazenada como um registro.

Esta classe implementa a interface Iterable, permitindo que o banco de dados seja percorrido através de um iterador.

Além disso, a classe implementa a interface AutoCloseable, garantindo que o arquivo seja fechado corretamente após o uso.

See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    Classe interna que representa um filtro de busca para faixas.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    Índice de lista invertida para otimizar buscas pelo nome do álbum.
    Índice de lista invertida para otimizar buscas pelo nome do artista.
    protected static final String
    Extensão de arquivo padrão utilizada para o banco de dados.
    Arquivo que contém os dados binários do banco de dados.
    protected final String
    Caminho para o arquivo de banco de dados.
    protected long
    Máscara de bits que contém diversas flags para o banco de dados.
    protected static final short
    Tamanho do cabeçalho em bytes, incluindo os metadados do banco de dados.
    protected ForwardIndex
    Índice primário utilizado para otimizar operações de busca e escrita.
    protected long
    Posição do último registro de faixa no banco de dados.
    protected int
    Último ID inserido no banco de dados.
    protected int
    Último ID encontrado pelo iterador.
    Índice de lista invertida para otimizar buscas pelo nome da faixa.
    protected int
    Número de espaços usados no banco de dados, incluindo os com lápides.
    protected int
    Número de faixas válidas no banco de dados.
    Filtro de busca aplicado nas faixas do banco de dados.
    protected boolean
    Indica se o segmento atual de faixas foi completamente processado.
    protected long
    Posição do início do segmento atual de faixas.
    protected UUID
    ID único do banco de dados.
  • Constructor Summary

    Constructors
    Constructor
    Description
    TrackDB(String fileName)
    Constrói uma instância do banco de dados a partir de um arquivo.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected int
    append(Track track)
    Adiciona uma faixa ao final do banco de dados, no arquivo binário.
    void
    Limpa o filtro de busca atual.
    void
    Fecha o banco de dados, liberando todos os recursos utilizados.
    int
    create(Track track)
    Adiciona uma nova faixa ao banco de dados.
    void
    delete(int id)
    Deleta uma faixa do banco de dados, identificada pelo seu ID.
    void
    delete(Track.Field field, Object value)
    Deleta faixas do banco de dados que correspondem a um valor específico de campo.
    private void
    Remove índices invertidos de uma faixa no banco de dados.
    void
    Desabilita todos os índices no banco de dados.
    static String
    Retorna a extensão de arquivo padrão utilizada para o banco de dados.
    Retorna o caminho para o arquivo de banco de dados.
    Retorna o filtro de busca atual.
    int
    Retorna o último ID inserido no banco de dados.
    int
    Retorna o número de espaços usados no banco de dados, incluindo os com lápides.
    int
    Retorna o número de faixas válidas no banco de dados.
    Retorna o UUID único do banco de dados.
    boolean
    Verifica se o banco de dados utiliza um índice do tipo Árvore B.
    boolean
    Verifica se o banco de dados utiliza um índice do tipo Hash.
    boolean
    Verifica se o banco de dados utiliza um índice de Lista Invertida.
    boolean
    Verifica se o banco de dados possui um índice.
    private void
    Insere índices invertidos para uma faixa no banco de dados.
    private static String[][]
    Divide os campos de nome, álbum e artista de uma faixa em partes menores, filtrando palavras com mais de 3 caracteres e que correspondem a letras.
    boolean
    Verifica se o ponteiro do arquivo chegou ao final.
    boolean
    Verifica se o banco de dados está ordenado.
    boolean
    Verifica se o segmento atual de faixas foi completamente processado.
    static boolean
    Verifica se um arquivo é um arquivo de banco de dados TrackDB válido.
    Retorna um iterador para percorrer as faixas armazenadas no banco de dados.
    Retorna um array contendo os caminhos de todos os arquivos associados a este banco de dados, incluindo o arquivo de dados e quaisquer arquivos de índice.
    Retorna o próximo leitor de faixa, independentemente de ser válido ou não (pode ser uma lápide).
    protected Track
    Retorna a próxima faixa válida do banco de dados, considerando o filtro de busca, se houver.
    Retorna o próximo leitor de faixa válido do banco de dados.
    void
    Abre o banco de dados a partir do arquivo especificado, inicializando os metadados e o cabeçalho do banco de dados.
    void
    print(int id)
    Imprime um sumário da faixa do banco de dados correspondente ao ID fornecido.
    void
    print(Track.Field field, Object value)
    Imprime um sumário de todas as faixas do banco de dados que correspondem a um valor específico de campo.
    void
    Imprime todas as faixas do banco de dados.
    read(int id)
    Lê uma faixa do banco de dados pelo seu ID.
    readFirst(Track.Field field, Object value)
    Lê a primeira faixa que corresponde ao valor de um campo específico.
    int[]
    readInvertedIndexes(String name, String album, String artist)
    Lê os índices invertidos para o nome, álbum e artista fornecidos.
    void
    Reindexa o banco de dados, recriando o índice atual.
    private static int[]
    resultsIntersection(int[]... arrays)
    Encontra a intersecção de N arrays, podendo incluir arrays nulos ou vazios.
    protected void
    Retorna o ponteiro do arquivo ao início do segmento atual durante a intercalação balanceada, necessário para que o iterador não descarte o primeiro registro do próximo segmento
    void
    setBTreeIndex(boolean value)
    Configura o uso de um índice do tipo Árvore B no banco de dados.
    void
    setBTreeIndex(boolean value, int order)
    Configura o uso de um índice do tipo Árvore B no banco de dados com uma ordem específica.
    void
    setDynamicHashIndex(boolean value)
    Configura o uso de um índice do tipo Hash Dinâmica no banco de dados.
    void
    setDynamicHashIndex(boolean value, int bucketCapacity)
    Configura o uso de um índice do tipo Hash Dinâmica no banco de dados com uma capacidade de bucket específica.
    void
    setFilter(Track.Field field, Object value)
    Define o filtro de busca baseado em um campo e um valor específicos.
    void
    Define o filtro de busca a ser utilizado para operações de pesquisa.
    void
    setInvertedListIndex(boolean value)
    Configura o uso de índices de lista invertida no banco de dados.
    void
    setLastId(int lastId)
    Define o último ID inserido no banco de dados e atualiza o cabeçalho.
    void
    setOrdered(boolean value)
    Define o estado de ordenação do banco de dados.
    void
    Ordena as faixas do banco de dados utilizando o algoritmo de ordenação Balanced Merge Sort com parâmetros padrão (sem configuração de fanout e maxHeapNodes).
    void
    sort(int fanout, int maxHeapNodes)
    Ordena as faixas do banco de dados utilizando o algoritmo de ordenação Balanced Merge Sort (intercalação balanceada).
    protected void
    Trunca o arquivo, removendo todos os dados, exceto o UUID.
    void
    update(int id, Track updated)
    Atualiza uma faixa no banco de dados, identificada pelo seu ID.
    protected void
    Atualiza o cabeçalho do banco de dados no arquivo, incluindo informações como o UUID, o último ID, as flags e o número de faixas e espaços.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface java.lang.Iterable

    forEach, spliterator
  • Field Details

    • file

      protected RandomAccessFile file
      Arquivo que contém os dados binários do banco de dados.
    • filePath

      protected final String filePath
      Caminho para o arquivo de banco de dados.
    • index

      protected ForwardIndex index
      Índice primário utilizado para otimizar operações de busca e escrita. Pode ser do tipo Árvore B ou Hash Dinâmica, dependendo da configuração.
    • nameIndex

      protected InvertedListIndex nameIndex
      Índice de lista invertida para otimizar buscas pelo nome da faixa. Armazena referências para faixas que contêm palavras específicas no nome.
    • albumIndex

      protected InvertedListIndex albumIndex
      Índice de lista invertida para otimizar buscas pelo nome do álbum. Armazena referências para faixas que contêm palavras específicas no nome do álbum.
    • artistIndex

      protected InvertedListIndex artistIndex
      Índice de lista invertida para otimizar buscas pelo nome do artista. Armazena referências para faixas que contêm palavras específicas no nome do artista.
    • lastBinaryTrackPos

      protected long lastBinaryTrackPos
      Posição do último registro de faixa no banco de dados.
    • searchFilter

      protected TrackDB.TrackFilter searchFilter
      Filtro de busca aplicado nas faixas do banco de dados. É respeitado pelo iterador, que ignorará registros que não correspondem.
    • uuid

      protected UUID uuid
      ID único do banco de dados.
    • lastId

      protected int lastId
      Último ID inserido no banco de dados.
    • numTracks

      protected int numTracks
      Número de faixas válidas no banco de dados.
    • numSpaces

      protected int numSpaces
      Número de espaços usados no banco de dados, incluindo os com lápides.
    • flags

      protected long flags
      Máscara de bits que contém diversas flags para o banco de dados.
    • HEADER_SIZE

      protected static final short HEADER_SIZE
      Tamanho do cabeçalho em bytes, incluindo os metadados do banco de dados.
      See Also:
    • DEFAULT_FILE_EXTENSION

      protected static final String DEFAULT_FILE_EXTENSION
      Extensão de arquivo padrão utilizada para o banco de dados.
      See Also:
    • segmentFinished

      protected boolean segmentFinished
      Indica se o segmento atual de faixas foi completamente processado.
    • lastIteratorId

      protected int lastIteratorId
      Último ID encontrado pelo iterador.
    • segmentStart

      protected long segmentStart
      Posição do início do segmento atual de faixas.
  • Constructor Details

    • TrackDB

      public TrackDB(String fileName) throws IOException
      Constrói uma instância do banco de dados a partir de um arquivo.
      Parameters:
      fileName - Caminho para o arquivo do banco de dados.
      Throws:
      IOException - Se ocorrer um erro de leitura ou gravação no arquivo.
  • Method Details

    • open

      public void open() throws IOException
      Abre o banco de dados a partir do arquivo especificado, inicializando os metadados e o cabeçalho do banco de dados.

      Se o arquivo já contiver dados, o banco será carregado e os metadados serão lidos. Caso contrário, será gerado um novo UUID e o cabeçalho será inicializado com valores padrão.

      Throws:
      IOException - Se ocorrer um erro ao abrir o arquivo ou ler os dados.
    • close

      public void close() throws IOException
      Fecha o banco de dados, liberando todos os recursos utilizados.
      Specified by:
      close in interface AutoCloseable
      Throws:
      IOException - Se ocorrer um erro ao fechar o arquivo.
    • isTrackDB

      public static boolean isTrackDB(String file) throws IOException
      Verifica se um arquivo é um arquivo de banco de dados TrackDB válido.
      Parameters:
      file - O caminho para o arquivo a ser verificado.
      Returns:
      true se o arquivo não for um arquivo TrackDB válido, false caso contrário.
      Throws:
      IOException - Se ocorrer um erro de leitura ao acessar o arquivo.
    • create

      public int create(Track track) throws IOException
      Adiciona uma nova faixa ao banco de dados. O ID da faixa é atribuído automaticamente com base no último ID inserido.
      Parameters:
      track - A faixa a ser adicionada.
      Returns:
      O ID da faixa inserida.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • append

      protected int append(Track track) throws IOException
      Adiciona uma faixa ao final do banco de dados, no arquivo binário. A faixa é escrita no formato binário, incluindo o estado de lápide e o tamanho.
      Parameters:
      track - A faixa a ser adicionada.
      Returns:
      O ID da faixa adicionada.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • read

      public Track read(int id) throws IOException
      Lê uma faixa do banco de dados pelo seu ID. Caso o banco de dados esteja desordenado, a busca é feita por todo o arquivo. Caso contrário, o método verifica rapidamente com um iterador.
      Parameters:
      id - O ID da faixa a ser lida.
      Returns:
      A faixa correspondente ao ID, ou null se não encontrada.
      Throws:
      IOException - Se ocorrer um erro de leitura no arquivo.
    • readFirst

      public Track readFirst(Track.Field field, Object value) throws IOException
      Lê a primeira faixa que corresponde ao valor de um campo específico. A busca é feita pelo arquivo a partir do cabeçalho.
      Parameters:
      field - O campo da faixa a ser comparado.
      value - O valor que o campo deve ter.
      Returns:
      A primeira faixa que corresponde ao campo e valor especificados, ou null se não encontrada.
      Throws:
      IOException - Se ocorrer um erro de leitura no arquivo.
    • update

      public void update(int id, Track updated) throws IOException
      Atualiza uma faixa no banco de dados, identificada pelo seu ID. Se o tamanho da nova faixa for menor ou igual ao da faixa existente, ela sobrescreve o registro. Caso contrário, o registro antigo é marcado como lápide e o novo é adicionado no final.
      Parameters:
      id - O ID da faixa a ser atualizada.
      updated - A faixa com os dados atualizados.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
      NoSuchElementException - Se não houver uma faixa com o ID fornecido.
    • delete

      public void delete(int id) throws IOException
      Deleta uma faixa do banco de dados, identificada pelo seu ID. O registro da faixa é marcado como lápide e o número de faixas é decrementado.
      Parameters:
      id - O ID da faixa a ser deletada.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
      NoSuchElementException - Se não houver uma faixa com o ID fornecido.
    • delete

      public void delete(Track.Field field, Object value) throws IOException
      Deleta faixas do banco de dados que correspondem a um valor específico de campo. Todos os registros correspondentes são marcados como lápide.
      Parameters:
      field - O campo da faixa a ser comparado.
      value - O valor que o campo deve ter para que a faixa seja deletada.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • sort

      public void sort(int fanout, int maxHeapNodes) throws IOException
      Ordena as faixas do banco de dados utilizando o algoritmo de ordenação Balanced Merge Sort (intercalação balanceada). O método permite configurar o fanout (quantidade de faixas que podem ser processadas por vez) e o número máximo de nós da heap para a ordenação.
      Parameters:
      fanout - Número de faixas processadas em cada fase do algoritmo de ordenação.
      maxHeapNodes - Número máximo de nós da heap para a ordenação.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo durante a ordenação.
    • sort

      public void sort() throws IOException
      Ordena as faixas do banco de dados utilizando o algoritmo de ordenação Balanced Merge Sort com parâmetros padrão (sem configuração de fanout e maxHeapNodes).
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo durante a ordenação.
    • print

      public void print(int id) throws IOException
      Imprime um sumário da faixa do banco de dados correspondente ao ID fornecido.
      Parameters:
      id - O ID da faixa a ser impressa.
      Throws:
      IOException - Se ocorrer um erro de leitura no arquivo.
    • print

      public void print(Track.Field field, Object value) throws IOException
      Imprime um sumário de todas as faixas do banco de dados que correspondem a um valor específico de campo.
      Parameters:
      field - O campo da faixa a ser comparado.
      value - O valor que o campo deve ter para que a faixa seja impressa.
      Throws:
      IOException - Se ocorrer um erro de leitura no arquivo.
    • printAll

      public void printAll() throws IOException
      Imprime todas as faixas do banco de dados.
      Throws:
      IOException - Se ocorrer um erro de leitura no arquivo.
    • nextTrack

      protected Track nextTrack() throws IOException, ClassNotFoundException
      Retorna a próxima faixa válida do banco de dados, considerando o filtro de busca, se houver. Se o filtro de busca estiver definido, ele irá procurar a próxima faixa que corresponda ao campo e valor fornecidos. Caso contrário, ele retorna a próxima faixa válida, ignorando as lápides.
      Returns:
      A próxima faixa válida, ou null se não houver mais faixas válidas.
      Throws:
      EOFException - Se o fim do arquivo for alcançado.
      IOException - Se ocorrer um erro de leitura no arquivo.
      ClassNotFoundException - Se ocorrer um erro ao ler a classe da faixa.
    • nextValidBinaryTrackReader

      private BinaryTrackReader nextValidBinaryTrackReader() throws IOException
      Retorna o próximo leitor de faixa válido do banco de dados. Um leitor de faixa válido é aquele que não é uma lápide (registro deletado). O método continua buscando até encontrar um leitor de faixa válido.
      Returns:
      Um BinaryTrackReader para a próxima faixa válida.
      Throws:
      EOFException - Se o fim do arquivo for alcançado.
      IOException - Se ocorrer um erro de leitura no arquivo.
    • nextBinaryTrackReader

      private BinaryTrackReader nextBinaryTrackReader() throws IOException
      Retorna o próximo leitor de faixa, independentemente de ser válido ou não (pode ser uma lápide). Este método lê o próximo registro do arquivo, mas não verifica se ele é uma faixa válida.
      Returns:
      Um BinaryTrackReader para a próxima faixa, ou null se o registro for inválido (lápide).
      Throws:
      EOFException - Se o fim do arquivo for alcançado.
      IOException - Se ocorrer um erro de leitura no arquivo.
    • returnToSegmentStart

      protected void returnToSegmentStart() throws IOException
      Retorna o ponteiro do arquivo ao início do segmento atual durante a intercalação balanceada, necessário para que o iterador não descarte o primeiro registro do próximo segmento
      Throws:
      IOException - Se ocorrer um erro ao posicionar o ponteiro no arquivo.
    • truncate

      protected void truncate() throws IOException
      Trunca o arquivo, removendo todos os dados, exceto o UUID. Este método apaga todos os registros e reinicia os contadores do banco de dados mantendo apenas o identificador único do banco de dados.
      Throws:
      IOException - Se ocorrer um erro ao truncar o arquivo.
    • isFinished

      public boolean isFinished()
      Verifica se o ponteiro do arquivo chegou ao final. Este método verifica se a posição do ponteiro de leitura no arquivo é igual ao comprimento do arquivo, indicando que não há mais dados para serem lidos.
      Returns:
      true se o ponteiro de leitura estiver no final do arquivo, false caso contrário.
    • updateHeader

      protected void updateHeader() throws IOException
      Atualiza o cabeçalho do banco de dados no arquivo, incluindo informações como o UUID, o último ID, as flags e o número de faixas e espaços. Este método sobrescreve as informações do cabeçalho no início do arquivo.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita ao atualizar o cabeçalho no arquivo.
    • listFilePaths

      public String[] listFilePaths()
      Retorna um array contendo os caminhos de todos os arquivos associados a este banco de dados, incluindo o arquivo de dados e quaisquer arquivos de índice.
      Returns:
      Um array de strings com os caminhos dos arquivos associados ao banco de dados.
    • setFilter

      public void setFilter(TrackDB.TrackFilter searchFilter)
      Define o filtro de busca a ser utilizado para operações de pesquisa. Este filtro pode ser usado para buscar faixas que correspondam a um campo e valor específicos.
      Parameters:
      searchFilter - O filtro de busca a ser aplicado.
    • setFilter

      public void setFilter(Track.Field field, Object value)
      Define o filtro de busca baseado em um campo e um valor específicos.
      Parameters:
      field - O campo da faixa a ser filtrado.
      value - O valor que o campo deve ter para que a faixa seja retornada.
    • getFilter

      public TrackDB.TrackFilter getFilter()
      Retorna o filtro de busca atual.
      Returns:
      O filtro de busca atualmente definido, ou null se não houver filtro.
    • clearFilter

      public void clearFilter()
      Limpa o filtro de busca atual. Após chamar este método, nenhum filtro será aplicado nas buscas.
    • iterator

      public Iterator<Track> iterator() throws RuntimeException
      Retorna um iterador para percorrer as faixas armazenadas no banco de dados. O iterador percorre as faixas em sequência, respeitando a ordem de leitura dos registros no arquivo. Durante a iteração, as faixas que correspondem ao filtro de busca (se definido) serão retornadas.
      Specified by:
      iterator in interface Iterable<Track>
      Returns:
      Um iterador para as faixas armazenadas no banco de dados.
      Throws:
      RuntimeException - Se houver um erro ao posicionar o ponteiro no primeiro registro ou ao obter a próxima faixa.
    • getUUID

      public UUID getUUID()
      Retorna o UUID único do banco de dados.
      Returns:
      O UUID do banco de dados.
    • getLastId

      public int getLastId()
      Retorna o último ID inserido no banco de dados.
      Returns:
      O último ID inserido.
    • setLastId

      public void setLastId(int lastId) throws IOException
      Define o último ID inserido no banco de dados e atualiza o cabeçalho.
      Parameters:
      lastId - O último ID a ser definido.
      Throws:
      IOException - Se ocorrer um erro ao atualizar o cabeçalho.
    • getNumTracks

      public int getNumTracks()
      Retorna o número de faixas válidas no banco de dados.
      Returns:
      O número de faixas válidas.
    • getNumSpaces

      public int getNumSpaces()
      Retorna o número de espaços usados no banco de dados, incluindo os com lápides.
      Returns:
      O número de espaços usados.
    • getFilePath

      public String getFilePath()
      Retorna o caminho para o arquivo de banco de dados.
      Returns:
      O caminho do arquivo de banco de dados.
    • getDefaultFileExtension

      public static String getDefaultFileExtension()
      Retorna a extensão de arquivo padrão utilizada para o banco de dados.
      Returns:
      A extensão de arquivo padrão.
    • isSegmentFinished

      public boolean isSegmentFinished()
      Verifica se o segmento atual de faixas foi completamente processado.
      Returns:
      true se o segmento foi processado, false caso contrário.
    • hasPrimaryIndex

      public boolean hasPrimaryIndex()
      Verifica se o banco de dados possui um índice.
      Returns:
      true se o banco de dados estiver indexado, false caso contrário.
    • hasBTreeIndex

      public boolean hasBTreeIndex()
      Verifica se o banco de dados utiliza um índice do tipo Árvore B.
      Returns:
      true se o índice for do tipo Árvore B, false caso contrário.
    • hasDynamicHashIndex

      public boolean hasDynamicHashIndex()
      Verifica se o banco de dados utiliza um índice do tipo Hash.
      Returns:
      true se o índice for do tipo Hash, false caso contrário.
    • hasInvertedListIndex

      public boolean hasInvertedListIndex()
      Verifica se o banco de dados utiliza um índice de Lista Invertida.
      Returns:
      true se o índice for de Lista Invertida, false caso contrário.
    • setBTreeIndex

      public void setBTreeIndex(boolean value) throws IOException
      Configura o uso de um índice do tipo Árvore B no banco de dados.
      Parameters:
      value - true para habilitar o índice Árvore B, false para desabilitar.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • setBTreeIndex

      public void setBTreeIndex(boolean value, int order) throws IOException
      Configura o uso de um índice do tipo Árvore B no banco de dados com uma ordem específica.
      Parameters:
      value - true para habilitar o índice Árvore B, false para desabilitar.
      order - A ordem da Árvore B.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • setDynamicHashIndex

      public void setDynamicHashIndex(boolean value) throws IOException
      Configura o uso de um índice do tipo Hash Dinâmica no banco de dados.
      Parameters:
      value - true para habilitar o índice Hash Dinâmica, false para desabilitar.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • setDynamicHashIndex

      public void setDynamicHashIndex(boolean value, int bucketCapacity) throws IOException
      Configura o uso de um índice do tipo Hash Dinâmica no banco de dados com uma capacidade de bucket específica.
      Parameters:
      value - true para habilitar o índice Hash Dinâmica, false para desabilitar.
      bucketCapacity - A capacidade do bucket para a tabela hash.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • readInvertedIndexes

      public int[] readInvertedIndexes(String name, String album, String artist) throws IOException
      Lê os índices invertidos para o nome, álbum e artista fornecidos.
      Parameters:
      name - O nome da faixa a ser lido no índice invertido.
      album - O nome do álbum a ser lido no índice invertido.
      artist - O nome do artista a ser lido no índice invertido.
      Returns:
      Um array de inteiros contendo os IDs das faixas que correspondem aos critérios.
      Throws:
      IOException - Se ocorrer um erro de leitura no arquivo.
    • resultsIntersection

      private static int[] resultsIntersection(int[]... arrays)
      Encontra a intersecção de N arrays, podendo incluir arrays nulos ou vazios.
      Parameters:
      arrays - Arrays de inteiros que serão processados para encontrar a intersecção.
      Returns:
      Um array de inteiros contendo os elementos que estão presentes em todos os arrays fornecidos, ignorando aqueles que são nulos ou vazios.
    • invertedIndexSplit

      private static String[][] invertedIndexSplit(Track t)
      Divide os campos de nome, álbum e artista de uma faixa em partes menores, filtrando palavras com mais de 3 caracteres e que correspondem a letras.
      Parameters:
      t - A faixa a ser dividida.
      Returns:
      Um array de strings contendo as partes divididas do nome, álbum e artista.
    • insertInvertedIndexes

      private void insertInvertedIndexes(Track t) throws IOException
      Insere índices invertidos para uma faixa no banco de dados.
      Parameters:
      t - A faixa para a qual os índices serão criados.
      Throws:
      IOException - Se ocorrer um erro de E/S durante a operação.
    • deleteInvertedIndexes

      private void deleteInvertedIndexes(Track t) throws IOException
      Remove índices invertidos de uma faixa no banco de dados.
      Parameters:
      t - A faixa para a qual os índices serão removidos.
      Throws:
      IOException - Se ocorrer um erro de E/S durante a operação.
    • setInvertedListIndex

      public void setInvertedListIndex(boolean value) throws IOException
      Configura o uso de índices de lista invertida no banco de dados.
      Parameters:
      value - true para habilitar os índices de lista invertida, false para desabilitar.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • disableIndex

      public void disableIndex() throws IOException
      Desabilita todos os índices no banco de dados.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • reindex

      public void reindex() throws IOException
      Reindexa o banco de dados, recriando o índice atual.
      Throws:
      IOException - Se ocorrer um erro de leitura ou escrita no arquivo.
    • isOrdered

      public boolean isOrdered()
      Verifica se o banco de dados está ordenado.
      Returns:
      true se os registros no banco de dados estiverem ordenados por ID, false caso contrário.
    • setOrdered

      public void setOrdered(boolean value) throws IOException
      Define o estado de ordenação do banco de dados.
      Parameters:
      value - true para marcar o banco de dados como ordenado, false para marcar como não ordenado.
      Throws:
      IOException - Se ocorrer um erro ao atualizar o cabeçalho do arquivo.