Class ZoneInfoProvider

  • All Implemented Interfaces:
    Provider

    public class ZoneInfoProvider
    extends java.lang.Object
    implements Provider
    ZoneInfoProvider loads compiled data files as generated by ZoneInfoCompiler.

    ZoneInfoProvider is thread-safe and publicly immutable.

    Since:
    1.0
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.io.File iFileDir
      The directory where the files are held.
      private java.lang.ClassLoader iLoader
      The class loader to use.
      private java.lang.String iResourcePath
      The resource path.
      private java.util.Set<java.lang.String> iZoneInfoKeys
      Maps ids to strings or SoftReferences to DateTimeZones.
      private java.util.Map<java.lang.String,​java.lang.Object> iZoneInfoMap
      Maps ids to strings or SoftReferences to DateTimeZones.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
        ZoneInfoProvider​(java.io.File fileDir)
      ZoneInfoProvider searches the given directory for compiled data files.
        ZoneInfoProvider​(java.lang.String resourcePath)
      ZoneInfoProvider searches the given ClassLoader resource path for compiled data files.
        ZoneInfoProvider​(java.lang.String resourcePath, java.lang.ClassLoader loader)
      ZoneInfoProvider searches the given ClassLoader resource path for compiled data files.
      private ZoneInfoProvider​(java.lang.String resourcePath, java.lang.ClassLoader loader, boolean favorSystemLoader)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.util.Set<java.lang.String> getAvailableIDs()
      Gets a list of all the available zone ids.
      DateTimeZone getZone​(java.lang.String id)
      If an error is thrown while loading zone data, the exception is logged to system error and null is returned for this and all future requests.
      private DateTimeZone loadZoneData​(java.lang.String id)
      Loads the time zone data for one id.
      private static java.util.Map<java.lang.String,​java.lang.Object> loadZoneInfoMap​(java.io.InputStream in)
      Loads the zone info map.
      private java.io.InputStream openResource​(java.lang.String name)
      Opens a resource from file or classpath.
      private static void readZoneInfoMap​(java.io.DataInputStream din, java.util.Map<java.lang.String,​java.lang.Object> zimap)
      Reads the zone info map from file.
      protected void uncaughtException​(java.lang.Exception ex)
      Called if an exception is thrown from getZone while loading zone data.
      • Methods inherited from class java.lang.Object

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

      • iFileDir

        private final java.io.File iFileDir
        The directory where the files are held.
      • iResourcePath

        private final java.lang.String iResourcePath
        The resource path.
      • iLoader

        private final java.lang.ClassLoader iLoader
        The class loader to use.
      • iZoneInfoMap

        private final java.util.Map<java.lang.String,​java.lang.Object> iZoneInfoMap
        Maps ids to strings or SoftReferences to DateTimeZones.
      • iZoneInfoKeys

        private final java.util.Set<java.lang.String> iZoneInfoKeys
        Maps ids to strings or SoftReferences to DateTimeZones.
    • Constructor Detail

      • ZoneInfoProvider

        public ZoneInfoProvider​(java.io.File fileDir)
                         throws java.io.IOException
        ZoneInfoProvider searches the given directory for compiled data files.
        Throws:
        java.io.IOException - if directory or map file cannot be read
      • ZoneInfoProvider

        public ZoneInfoProvider​(java.lang.String resourcePath)
                         throws java.io.IOException
        ZoneInfoProvider searches the given ClassLoader resource path for compiled data files. Resources are loaded from the ClassLoader that loaded this class.
        Throws:
        java.io.IOException - if directory or map file cannot be read
      • ZoneInfoProvider

        public ZoneInfoProvider​(java.lang.String resourcePath,
                                java.lang.ClassLoader loader)
                         throws java.io.IOException
        ZoneInfoProvider searches the given ClassLoader resource path for compiled data files.
        Parameters:
        loader - ClassLoader to load compiled data files from. If null, use system ClassLoader.
        Throws:
        java.io.IOException - if directory or map file cannot be read
      • ZoneInfoProvider

        private ZoneInfoProvider​(java.lang.String resourcePath,
                                 java.lang.ClassLoader loader,
                                 boolean favorSystemLoader)
                          throws java.io.IOException
        Parameters:
        favorSystemLoader - when true, use the system class loader if loader null. When false, use the current class loader if loader is null.
        Throws:
        java.io.IOException
    • Method Detail

      • getZone

        public DateTimeZone getZone​(java.lang.String id)
        If an error is thrown while loading zone data, the exception is logged to system error and null is returned for this and all future requests.
        Specified by:
        getZone in interface Provider
        Parameters:
        id - the id to load
        Returns:
        the loaded zone
      • getAvailableIDs

        public java.util.Set<java.lang.String> getAvailableIDs()
        Gets a list of all the available zone ids.
        Specified by:
        getAvailableIDs in interface Provider
        Returns:
        the zone ids
      • uncaughtException

        protected void uncaughtException​(java.lang.Exception ex)
        Called if an exception is thrown from getZone while loading zone data.
        Parameters:
        ex - the exception
      • openResource

        private java.io.InputStream openResource​(java.lang.String name)
                                          throws java.io.IOException
        Opens a resource from file or classpath.
        Parameters:
        name - the name to open
        Returns:
        the input stream
        Throws:
        java.io.IOException - if an error occurs
      • loadZoneData

        private DateTimeZone loadZoneData​(java.lang.String id)
        Loads the time zone data for one id.
        Parameters:
        id - the id to load
        Returns:
        the zone
      • loadZoneInfoMap

        private static java.util.Map<java.lang.String,​java.lang.Object> loadZoneInfoMap​(java.io.InputStream in)
                                                                                       throws java.io.IOException
        Loads the zone info map.
        Parameters:
        in - the input stream
        Returns:
        the map
        Throws:
        java.io.IOException
      • readZoneInfoMap

        private static void readZoneInfoMap​(java.io.DataInputStream din,
                                            java.util.Map<java.lang.String,​java.lang.Object> zimap)
                                     throws java.io.IOException
        Reads the zone info map from file.
        Parameters:
        din - the input stream
        zimap - gets filled with string id to string id mappings
        Throws:
        java.io.IOException