Class Cache<Data extends Cacheable>

java.lang.Object
br.ufsc.labsec.utils.cache.Cache<Data>
Type Parameters:
Data - O tipo de objeto a ser armazenado
All Implemented Interfaces:
Iterable<CacheEntry<Data>>
Direct Known Subclasses:
DetachedCache, RevocationCache, SignaturePolicyCache

public abstract class Cache<Data extends Cacheable> extends Object implements Iterable<CacheEntry<Data>>
Esta classe é responsável por administrar objetos em cache, armazenando-os em disco e em memória, e permitindo a sua recuperação através da implementação do metodo decodeEntry(byte[]...).

A classe implementa a interface Iterable para permitir a iteração por todos os itens da cache. Para evitar leituras desnecessárias em disco, é iterado sobre CacheEntry ao invés de Data, realizando a leitura apenas quando o metodo CacheEntry.read() é chamado.

  • Field Details

    • runtimeCache

      protected Map<String, CacheEntry<Data extends Cacheable>> runtimeCache
    • path

      protected final Path path
    • regexFilter

      protected final String regexFilter
      Regex para selecionar arquivos no diretório, similar ao Dos/Unix (FilenameUtils.wildcardMatch(String, String))
  • Constructor Details

    • Cache

      public Cache(String path)
      Construtor
      Parameters:
      path - O caminho para a cache
    • Cache

      public Cache(String path, String regexFilter)
  • Method Details

    • decodeEntry

      protected abstract Data decodeEntry(byte[]... encodedParts) throws EncodingException
      Decodifica um objeto em cache a partir de seus bytes em "chunks", habilitando armazenamento de um objeto em diversos arquivos, como assinaturas detached, por exemplo.
      Parameters:
      encodedParts - Os bytes do objeto
      Returns:
      O objeto decodificado
      Throws:
      EncodingException - Exceção em caso de erro na decodificação
    • store

      public void store(Data obj)
      Armazena um objeto na cache
      Parameters:
      obj - O objeto a ser armazenado
    • get

      public Optional<Data> get(String key)
      Obtém um objeto da cache a partir de sua chave
      Parameters:
      key - A chave do objeto
      Returns:
      Um Optional do objeto em cache
    • remove

      public void remove(String key)
    • getLastAccess

      public Date getLastAccess(String key)
    • getSource

      public Cache.Source getSource(String key)
    • has

      public boolean has(String key)
      Verifica se um objeto está na cache
      Parameters:
      key - A chave de um objeto
      Returns:
      Indica se o objeto está na cache
    • has

      public boolean has(Cacheable obj)
      Verifica se um objeto está na cache
      Parameters:
      obj - O objeto a ser verificado
      Returns:
      Indica se o objeto está na cache
    • groupFilesInDiskBy

      protected String groupFilesInDiskBy(File fileInDisk)
      Função auxiliar para atribuir uma chave comum para arquivos, para serem juntados em um CacheEntry só, podendo ser qualquer estrutura de string aceita pelo Collectors.groupingBy(Function)
      Parameters:
      fileInDisk - O arquivo a ser agrupado
      Returns:
      String com a chave comum
    • checkExpired

      public boolean checkExpired(String cacheKey)
      Verifica se o objeto armazenado no cache deve ser removido (mais de 7 dias sem acesso)
      Parameters:
      cacheKey - A chave do objeto
      Returns:
      Indica se o objeto deve ser removido
    • iterator

      @NotNull public @NotNull Iterator<CacheEntry<Data>> iterator()
      Specified by:
      iterator in interface Iterable<Data extends Cacheable>