Class StoreArchiver


  • public class StoreArchiver
    extends Object
    Class to encapsulate archive CRUD operations for a store. Having it here lets us use it in other places, e.g. QDL.

    Created by Jeff Gaynor
    on 10/19/21 at 6:14 AM

    • Constructor Summary

      Constructors 
      Constructor Description
      StoreArchiver​(edu.uiuc.ncsa.security.core.Store store)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      Long create​(edu.uiuc.ncsa.security.core.Identifier identifier)
      Create a new version.
      edu.uiuc.ncsa.security.core.Identifier createVersionedID​(edu.uiuc.ncsa.security.core.Identifier id, long version)
      Given a base id and the new version number, create the identifier
      edu.uiuc.ncsa.security.core.Identifier getBaseID​(edu.uiuc.ncsa.security.core.Identifier overloadedID)
      Removes the fragment (with the version number).
      protected Long getLatestVersionNumber​(edu.uiuc.ncsa.security.core.util.DoubleHashMap<URI,​Long> versionNumbers)
      Get the latest version number or return a -1 if no versions present.
      edu.uiuc.ncsa.security.storage.data.MapConverter getMapConverter()  
      edu.uiuc.ncsa.security.core.Store getStore()  
      edu.uiuc.ncsa.security.core.Identifiable getVersion​(edu.uiuc.ncsa.security.core.Identifier targetID, long version)
      Given the raw id and a version number (which may be -1 to indicate using the latest) get the stored version.
      long getVersionNumber​(edu.uiuc.ncsa.security.core.Identifier id)
      Given a version id (of form URI#version=number), return the number.
      List<Long> getVersionNumbers​(edu.uiuc.ncsa.security.core.Identifier id)  
      protected edu.uiuc.ncsa.security.core.util.DoubleHashMap<URI,​Long> getVersions​(edu.uiuc.ncsa.security.core.Identifier identifier)
      For a given object in the store, return all the versions associated with it in a DoubleHashMap.
      TreeMap<Long,​edu.uiuc.ncsa.security.core.Identifiable> getVersionsMap​(edu.uiuc.ncsa.security.core.Identifiable identifiable)
      For a given object, get all the versions (not just their identifiers) and return in a map keyed by version number.
      static void main​(String[] args)  
      void remove​(edu.uiuc.ncsa.security.core.Identifier identifier, long version)
      Removed the version of the object from the store.
      boolean restore​(edu.uiuc.ncsa.security.core.Identifier id, Long version)
      For a
    • Field Detail

      • ARCHIVE_VERSION_TAG

        public static String ARCHIVE_VERSION_TAG
        Key in the fragment for the version
      • ARCHIVE_VERSION_SEPARATOR_TAG

        public static String ARCHIVE_VERSION_SEPARATOR_TAG
        Separator between the version tag and the version number.
    • Constructor Detail

      • StoreArchiver

        public StoreArchiver​(edu.uiuc.ncsa.security.core.Store store)
    • Method Detail

      • getStore

        public edu.uiuc.ncsa.security.core.Store getStore()
      • getMapConverter

        public edu.uiuc.ncsa.security.storage.data.MapConverter getMapConverter()
      • getVersionNumber

        public long getVersionNumber​(edu.uiuc.ncsa.security.core.Identifier id)
        Given a version id (of form URI#version=number), return the number.
        Parameters:
        id -
        Returns:
      • createVersionedID

        public edu.uiuc.ncsa.security.core.Identifier createVersionedID​(edu.uiuc.ncsa.security.core.Identifier id,
                                                                        long version)
        Given a base id and the new version number, create the identifier
             URI#version=number
         
        This is to make sure everythign is created identically.
        Parameters:
        id -
        version -
        Returns:
      • main

        public static void main​(String[] args)
      • getVersions

        protected edu.uiuc.ncsa.security.core.util.DoubleHashMap<URI,​Long> getVersions​(edu.uiuc.ncsa.security.core.Identifier identifier)
        For a given object in the store, return all the versions associated with it in a DoubleHashMap. Note that the keys are of the form
             URI#version=number
         
        and the value is the number. As a double hash map then you can do a reverse lookup by version number and get the unique identifier.
        Parameters:
        identifier -
        Returns:
      • getVersionsMap

        public TreeMap<Long,​edu.uiuc.ncsa.security.core.Identifiable> getVersionsMap​(edu.uiuc.ncsa.security.core.Identifiable identifiable)
        For a given object, get all the versions (not just their identifiers) and return in a map keyed by version number. This sorts the entries. Rather similar to getVersions(Identifier), this has key = number and value =URI#version=number. Use this where you need all the versions sorted by number for, e.g., display purposes.
        Parameters:
        identifiable -
        Returns:
      • getLatestVersionNumber

        protected Long getLatestVersionNumber​(edu.uiuc.ncsa.security.core.util.DoubleHashMap<URI,​Long> versionNumbers)
        Get the latest version number or return a -1 if no versions present. Remember that versions increase, so version 0 is the first made, 1 is the next,... and the highest number is the most recent version.
        Parameters:
        versionNumbers -
        Returns:
      • getVersion

        public edu.uiuc.ncsa.security.core.Identifiable getVersion​(edu.uiuc.ncsa.security.core.Identifier targetID,
                                                                   long version)
                                                            throws IOException
        Given the raw id and a version number (which may be -1 to indicate using the latest) get the stored version. Might return null of there is no such version.
        Parameters:
        targetID -
        version -
        Returns:
        Throws:
        IOException
      • remove

        public void remove​(edu.uiuc.ncsa.security.core.Identifier identifier,
                           long version)
        Removed the version of the object from the store. This either returns or throws a runtime exception from the store.

        Note

        There is not a version with signature remove(Identifier) because of the risk of removing the base object if the wrong .
        Parameters:
        identifier -
        version -
      • create

        public Long create​(edu.uiuc.ncsa.security.core.Identifier identifier)
        Create a new version. This returns the overloaded identifier of the versioned object.
        Parameters:
        identifier -
        Returns:
      • getBaseID

        public edu.uiuc.ncsa.security.core.Identifier getBaseID​(edu.uiuc.ncsa.security.core.Identifier overloadedID)
        Removes the fragment (with the version number).
        Parameters:
        overloadedID -
        Returns:
      • getVersionNumbers

        public List<Long> getVersionNumbers​(edu.uiuc.ncsa.security.core.Identifier id)
      • restore

        public boolean restore​(edu.uiuc.ncsa.security.core.Identifier id,
                               Long version)
        For a
        Parameters:
        id -
        version -
        Returns: