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(java.lang.String, java.lang.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(java.util.function.Function<? super T, ? extends K>)
      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>