Class PropertyCacheFile


  • public final class PropertyCacheFile
    extends java.lang.Object
    This class maintains a persistent(on file-system) store of the files that have checked ok(no validation events) and their associated timestamp. It is used to optimize Checkstyle between few launches. It is mostly useful for plugin and extensions of Checkstyle. It uses a property file for storage. A hashcode of the Configuration is stored in the cache file to ensure the cache is invalidated when the configuration has changed.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  PropertyCacheFile.ExternalResource
      Class which represents external resource.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static int BASE_16
      Default number for base 16 encoding.
      private static byte[] BUFFER
      Default buffer for reading from streams.
      private static int BUFFER_SIZE
      Size of default byte array for buffer.
      private Configuration config
      Configuration object.
      static java.lang.String CONFIG_HASH_KEY
      The property key to use for storing the hashcode of the configuration.
      private java.lang.String configHash
      Generated configuration hash.
      private java.util.Properties details
      The details on files.
      static java.lang.String EXTERNAL_RESOURCE_KEY_PREFIX
      The property prefix to use for storing the hashcode of an external resource.
      private java.lang.String fileName
      File name of cache.
    • Constructor Summary

      Constructors 
      Constructor Description
      PropertyCacheFile​(Configuration config, java.lang.String fileName)
      Creates a new PropertyCacheFile instance.
    • Field Detail

      • CONFIG_HASH_KEY

        public static final java.lang.String CONFIG_HASH_KEY
        The property key to use for storing the hashcode of the configuration. To avoid name clashes with the files that are checked the key is chosen in such a way that it cannot be a valid file name.
        See Also:
        Constant Field Values
      • EXTERNAL_RESOURCE_KEY_PREFIX

        public static final java.lang.String EXTERNAL_RESOURCE_KEY_PREFIX
        The property prefix to use for storing the hashcode of an external resource. To avoid name clashes with the files that are checked the prefix is chosen in such a way that it cannot be a valid file name and makes it clear it is a resource.
        See Also:
        Constant Field Values
      • BUFFER

        private static final byte[] BUFFER
        Default buffer for reading from streams.
      • details

        private final java.util.Properties details
        The details on files.
      • fileName

        private final java.lang.String fileName
        File name of cache.
      • configHash

        private java.lang.String configHash
        Generated configuration hash.
    • Constructor Detail

      • PropertyCacheFile

        public PropertyCacheFile​(Configuration config,
                                 java.lang.String fileName)
        Creates a new PropertyCacheFile instance.
        Parameters:
        config - the current configuration, not null
        fileName - the cache file
        Throws:
        java.lang.IllegalArgumentException - when either arguments are null
    • Method Detail

      • load

        public void load()
                  throws java.io.IOException
        Load cached values from file.
        Throws:
        java.io.IOException - when there is a problems with file read
      • persist

        public void persist()
                     throws java.io.IOException
        Cleans up the object and updates the cache file.
        Throws:
        java.io.IOException - when there is a problems with file save
      • reset

        public void reset()
        Resets the cache to be empty except for the configuration hash.
      • isInCache

        public boolean isInCache​(java.lang.String uncheckedFileName,
                                 long timestamp)
        Checks that file is in cache.
        Parameters:
        uncheckedFileName - the file to check
        timestamp - the timestamp of the file to check
        Returns:
        whether the specified file has already been checked ok
      • put

        public void put​(java.lang.String checkedFileName,
                        long timestamp)
        Records that a file checked ok.
        Parameters:
        checkedFileName - name of the file that checked ok
        timestamp - the timestamp of the file
      • get

        public java.lang.String get​(java.lang.String name)
        Retrieves the hash of a specific file.
        Parameters:
        name - The name of the file to retrieve.
        Returns:
        The has of the file or null.
      • remove

        public void remove​(java.lang.String checkedFileName)
        Removed a specific file from the cache.
        Parameters:
        checkedFileName - The name of the file to remove.
      • getHashCodeBasedOnObjectContent

        private static java.lang.String getHashCodeBasedOnObjectContent​(java.io.Serializable object)
        Calculates the hashcode for the serializable object based on its content.
        Parameters:
        object - serializable object.
        Returns:
        the hashcode for serializable object.
        Throws:
        java.lang.IllegalStateException - when some unexpected happened.
      • serialize

        private static void serialize​(java.io.Serializable object,
                                      java.io.OutputStream outputStream)
                               throws java.io.IOException
        Serializes object to output stream.
        Parameters:
        object - object to be serialized
        outputStream - serialization stream
        Throws:
        java.io.IOException - if an error occurs
      • putExternalResources

        public void putExternalResources​(java.util.Set<java.lang.String> locations)
        Puts external resources in cache. If at least one external resource changed, clears the cache.
        Parameters:
        locations - locations of external resources.
      • loadExternalResource

        private static byte[] loadExternalResource​(java.lang.String location)
                                            throws java.io.IOException,
                                                   CheckstyleException
        Loads the content of external resource.
        Parameters:
        location - external resource location.
        Returns:
        array of bytes which represents the content of external resource in binary form.
        Throws:
        java.io.IOException - if error while loading occurs.
        CheckstyleException - if error while loading occurs.
      • toByteArray

        private static byte[] toByteArray​(java.io.InputStream stream)
                                   throws java.io.IOException
        Reads all the contents of an input stream and returns it as a byte array.
        Parameters:
        stream - The input stream to read from.
        Returns:
        The resulting byte array of the stream.
        Throws:
        java.io.IOException - if there is an error reading the input stream.
      • isResourceLocationInCache

        private boolean isResourceLocationInCache​(java.lang.String location)
        Checks whether resource location is in cache.
        Parameters:
        location - resource location.
        Returns:
        true if resource location is in cache.