Class AbstractAssetManager<K,​V>

  • Type Parameters:
    K - The type of key for the asset cache
    V - The type of value for the asset cache
    Direct Known Subclasses:
    FontManagerImpl, IconManagerImpl, ThemeManagerImpl

    public abstract class AbstractAssetManager<K,​V>
    extends AbstractLifecycle
    Base class for managing static assets. During setup() files from the injected asset's defaults will be moved to the respective assets directory in the system home directory even if they do exist. Uses a FileWatcher to react to changes to the injected asset directory under the perspective modules directory of the system home directory. Changes in the watched asset directory will cause the in memory cache to be updated. Extensions of this class must override generateKey(Path) and parseValue(Path) so that this class may update its cache with the appropriate entry.
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected void copyInputStreamToPath​(java.io.InputStream is, java.nio.file.Path pathTo)  
      protected void copyInputStreamToPath​(java.lang.String name, byte[] defaultAssetData, byte[] defaultAssetDigest, byte[] existingAssetDigest)  
      protected abstract java.util.Optional<K> generateKey​(java.nio.file.Path path)
      Generate a cache key for the given Path
      protected java.util.Map<K,​V> getCache()
      Fetch a copy of the cache
      protected java.util.Optional<V> getCachedValue​(K key)
      Fetch the cached value associated with a key
      java.util.Optional<com.inductiveautomation.ignition.common.gson.JsonObject> getDigestCopy()  
      protected java.util.Optional<java.lang.String> getDigestFor​(K assetKey)
      If the assetKey exists in the cache and it's been hashed, the digest may be retrieved for the asset name
      protected void onCacheChanged()
      Invoked within a synchronized block, that holds onto the cache lock, when there is a create, modify, or delete watch event.
      protected void onShutdown()  
      protected void onStartup()  
      protected abstract java.util.Optional<V> parseValue​(java.nio.file.Path path)
      Parse the cache value for the given Path
      void setup()
      Setup the Asset Manager.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • assetPath

        protected final java.nio.file.Path assetPath
      • cacheLock

        protected final java.lang.Object cacheLock
    • Constructor Detail

      • AbstractAssetManager

        public AbstractAssetManager​(@Nonnull
                                    PerspectiveContext perspectiveContext,
                                    @Nonnull
                                    java.lang.String asset)
      • AbstractAssetManager

        public AbstractAssetManager​(@Nonnull
                                    PerspectiveContext perspectiveContext,
                                    @Nonnull
                                    java.lang.String asset,
                                    @Nonnull
                                    java.io.FileFilter fileFilter)
    • Method Detail

      • getCache

        protected java.util.Map<K,​V> getCache()
        Fetch a copy of the cache
        Returns:
        A copy of the cache
      • getCachedValue

        protected java.util.Optional<V> getCachedValue​(K key)
        Fetch the cached value associated with a key
        Parameters:
        key - The cache key
        Returns:
        An Optional containing the cached value associated with the given key, or an empty Optional of there is no such cached value associated with the given key
      • copyInputStreamToPath

        protected void copyInputStreamToPath​(@Nonnull
                                             java.io.InputStream is,
                                             @Nonnull
                                             java.nio.file.Path pathTo)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • copyInputStreamToPath

        protected void copyInputStreamToPath​(@Nonnull
                                             java.lang.String name,
                                             @Nonnull
                                             byte[] defaultAssetData,
                                             @Nonnull
                                             byte[] defaultAssetDigest,
                                             @Nullable
                                             byte[] existingAssetDigest)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • getDigestCopy

        public java.util.Optional<com.inductiveautomation.ignition.common.gson.JsonObject> getDigestCopy()
        Returns:
        a copy of the digests object, if present, otherwise empty optional
      • getDigestFor

        protected java.util.Optional<java.lang.String> getDigestFor​(@Nullable
                                                                    K assetKey)
        If the assetKey exists in the cache and it's been hashed, the digest may be retrieved for the asset name
        Parameters:
        assetKey - the name of the asset being cached, generally the filename of the asset
        Returns:
        optional containing the digest for the named asset
      • setup

        public void setup()
        Setup the Asset Manager. Copies any defaults into the asset home directory. Should be run before AbstractLifecycle.startup()
      • generateKey

        @Nonnull
        protected abstract java.util.Optional<K> generateKey​(@Nonnull
                                                             java.nio.file.Path path)
        Generate a cache key for the given Path
        Parameters:
        path - The Path for which we want to generate a cache key
        Returns:
        An Optional containing the cache key or an empty Optional if the cache key could not be generated
      • parseValue

        @Nonnull
        protected abstract java.util.Optional<V> parseValue​(@Nonnull
                                                            java.nio.file.Path path)
        Parse the cache value for the given Path
        Parameters:
        path - The Path for which we want to generate a cache value
        Returns:
        An Optional containing the cache value or an empty Optional if the cache value could not be generated
      • onCacheChanged

        protected void onCacheChanged()
        Invoked within a synchronized block, that holds onto the cache lock, when there is a create, modify, or delete watch event. Invoked immediately following modification of the cache, the cache values and digest will be updated prior to being called. Override this method to update any cache local to the subclass.