Class JProperties

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable, java.util.Map<java.lang.String,​java.lang.String>
    Direct Known Subclasses:
    LangProperties

    public class JProperties
    extends java.util.Hashtable<K,​V>
    This class, based on Properties manage properties file in UTF-8 encoding. Its save updateAndSave(File) methods keep layout of previous properties file.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
        JProperties()  
      protected JProperties​(JProperties jProperties)
      Constructor with a parent JProperties (used only for resolve linked properties when subProperties feature is used.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addProperties​(JProperties prop)
      Add every property of the given JProperties to this JProperties.
      void addProperties​(java.util.Properties prop)
      Add every property of the given Properties to this JProperties.
      void addPropertiesListener​(JPropertiesListener l)
      Adds a listener for any change of this JProperties.
      void addProtectedKeys​(java.util.Collection<java.lang.String> col)  
      protected static java.lang.String[] buildArrayFromString​(java.lang.String value, java.lang.String[] defaultValue)
      Convert a string to a String[] using the following formats: "@{delim}value1{delim}value2...", where {delim} is one character delimiter of your choice. "value1{delim}value2{delim}...", where {delim} is a character from \t\n\r\f.
      protected JProperties checkCacheGetProperties​(java.lang.String prefix)  
      void clear()  
      void clearProperties()
      Clear all properties.
      boolean containsProperty​(java.lang.String name)
      Tests if this JProperties contains the given property key/name.
      void firePropertiesChange()
      Triggers a properties change to notify all listener of this JProperties.
      boolean getBooleanProperty​(java.lang.String name, boolean defaultValue)
      Gets the value of a property as a boolean given its key/name.
      double getDoubleProperty​(java.lang.String name, double defaultValue)
      Gets the value of a property as a double value given its key/name.
      float getFloatProperty​(java.lang.String name, float defaultValue)
      Gets the value of a property as a float value given its key/name.
      int[] getIntArrayProperty​(java.lang.String name, int[] defaultValue)
      Gets the value of a property as a int array.
      int getIntegerProperty​(java.lang.String name, int defaultValue)
      Gets the value of a property as an int value given its key/name.
      java.util.Set<JPropertiesListener> getListenerSet()
      Retrieve set of all JPropertiesListener use by this JProperties instance.
      java.util.Set<java.io.File> getLoadedFiles()
      Retrieve a set of all that were loaded in this JProperties instance (ordered by the load order)
      long getLongProperty​(java.lang.String name, long defaultValue)
      Gets the value of a property as a long value given its key/name.
      JProperties getProperties​(java.lang.String prefix)
      Returns a new property set of properties with key matching a given prefix.
      java.lang.String getProperty​(java.lang.String name)
      Gets value of a property.
      java.lang.String getProperty​(java.lang.String name, java.lang.String defaultValue)
      Gets the value of a property given its key/name.
      java.util.Set<java.lang.String> getProtectedKeySet()  
      java.lang.String[] getStringArrayProperty​(java.lang.String name, java.lang.String[] defaultValue)
      Gets the value of a property as a String array.
      java.util.Map<java.lang.String,​java.lang.Object> getSubProperties​(java.lang.String prefix)
      Returns a map of properties built from those properties and having a given prefix.
      Example:
      prop:
      foo.bar.case1.x: value of x for case1
      foo.bar.case1.y: value of y for case1
      foo.bar.case2.x: value of x for case2
      foo.bar.case2.y: value of y for case2
      foo.bar.case2.z.t: value of z for case2
      void invalidateCacheGetProperties()
      Invalidate the cache used for getProperties(String) method.
      boolean isSensitiveProperty​(java.lang.String key)
      Check if the specified property key is considered to be sensitive and for which values is being concealed or crypted on saved.
      void load​(java.io.File file)
      Reads a property file (key and element pairs) from the given File.
      void load​(java.io.File file, boolean unprotectSensitiveData)
      Reads a property file (key and element pairs) from the given File.
      void load​(java.io.File file, java.lang.String prefix)
      Reads a property file (key and element pairs) from the given File.
      void load​(java.io.File file, java.lang.String prefix, boolean unprotectSensitiveData)
      Reads a property file (key and element pairs) from the given File.
      static JProperties parse​(java.lang.String str)  
      static JProperties parse​(java.lang.String str, boolean decodeDoubleBackslashedChar)  
      V put​(K key, V value)  
      protected void putCacheGetProperties​(java.lang.String prefix, JProperties prop)  
      V remove​(java.lang.Object key)  
      void removePropertiesListener​(JPropertiesListener l)
      Removes a listener for any change of this JProperties.
      void setListenerSet​(java.util.Set<JPropertiesListener> listeners)
      Set the Set of JPropertiesListener that this JProperties instance must used to notify
      java.lang.Object setProperty​(java.lang.String name, java.lang.String value)
      Sets value of a property.
      java.lang.String toString()  
      void updateAndSave​(java.io.File file)
      Updates and save properties.
      • Methods inherited from class java.util.Hashtable

        clone, compute, computeIfAbsent, computeIfPresent, contains, containsKey, containsValue, elements, entrySet, equals, forEach, get, getOrDefault, hashCode, isEmpty, keys, keySet, merge, putAll, putIfAbsent, rehash, remove, replace, replace, replaceAll, size, values
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
    • Field Detail

      • PREFIX_PROPERTIES_CACHE_MAX_ENTRIES

        protected static final int PREFIX_PROPERTIES_CACHE_MAX_ENTRIES
        See Also:
        Constant Field Values
      • prefixPropertiesCache

        protected java.util.Map<java.lang.String,​JProperties> prefixPropertiesCache
      • propertyNameAsDefaultValue

        protected boolean propertyNameAsDefaultValue
      • SENSITIVE_KEYWORD

        protected java.util.Set<java.lang.String> SENSITIVE_KEYWORD
      • ENCRYPTED_EXTENSION

        protected java.lang.String ENCRYPTED_EXTENSION
    • Constructor Detail

      • JProperties

        public JProperties()
      • JProperties

        protected JProperties​(JProperties jProperties)
        Constructor with a parent JProperties (used only for resolve linked properties when subProperties feature is used.
        Parameters:
        jProperties - parent JProperties object, used for linked property resolution
    • Method Detail

      • containsProperty

        public boolean containsProperty​(java.lang.String name)
        Tests if this JProperties contains the given property key/name.
        Parameters:
        name - the key/name of the property to check
        Returns:
        true if the specified object is a key in this hashtable; false otherwise.
      • getProperty

        public java.lang.String getProperty​(java.lang.String name)
        Gets value of a property.
        Parameters:
        name - the key/name of the property to retrieve
        Returns:
        the property value
      • getProperty

        public java.lang.String getProperty​(java.lang.String name,
                                            java.lang.String defaultValue)
        Gets the value of a property given its key/name.
        Parameters:
        name - the key/name of the property to retrieve
        defaultValue - the default value to use if the existing value is null.
        Returns:
        the value of a property given its key/name.
      • setProperty

        public java.lang.Object setProperty​(java.lang.String name,
                                            java.lang.String value)
        Sets value of a property.
        Parameters:
        name - the key/name of the property to retrieve
        value - the new value to assign.
        Returns:
        the previous value of the specified key/name
      • getBooleanProperty

        public boolean getBooleanProperty​(java.lang.String name,
                                          boolean defaultValue)
        Gets the value of a property as a boolean given its key/name.
        Parameters:
        name - the key/name of the property to retrieve
        defaultValue - the default value to use if the existing value is null or is neither "false" nor "true" (case sensitive).
        Returns:
        the boolean value of the property
      • getIntegerProperty

        public int getIntegerProperty​(java.lang.String name,
                                      int defaultValue)
        Gets the value of a property as an int value given its key/name.
        Parameters:
        name - the key/name of the property to retrieve
        defaultValue - the default value to use if the existing value is null or if Integer.parseInt() throws exception during String to int conversion.
        Returns:
        the int value of the property
      • getLongProperty

        public long getLongProperty​(java.lang.String name,
                                    long defaultValue)
        Gets the value of a property as a long value given its key/name.
        Parameters:
        name - the key/name of the property to retrieve
        defaultValue - the default value to use if the existing value is null or if Long.parseLong() throws exception during String to long conversion.
        Returns:
        the long value of the property
      • getFloatProperty

        public float getFloatProperty​(java.lang.String name,
                                      float defaultValue)
        Gets the value of a property as a float value given its key/name.
        Parameters:
        name - the key/name of the property to retrieve
        defaultValue - the default value to use if the existing value is null or if Float.parseFloat() throws exception during String to float conversion.
        Returns:
        the float value of the property
      • getDoubleProperty

        public double getDoubleProperty​(java.lang.String name,
                                        double defaultValue)
        Gets the value of a property as a double value given its key/name.
        Parameters:
        name - the key/name of the property to retrieve
        defaultValue - the default value to use if the existing value is null or if Double.parseDouble() throws exception during String to double conversion.
        Returns:
        the double value of the property
      • getStringArrayProperty

        public java.lang.String[] getStringArrayProperty​(java.lang.String name,
                                                         java.lang.String[] defaultValue)
        Gets the value of a property as a String array.

        The property value must be in one of the following forms:

        • "@{delim}value1{delim}value2...", where {delim} is one character delimiter of your choice.
        • "value1{delim}value2{delim}...", where {delim} is a character from \t\n\r\f.
        For example :
           String[] array = prop.getStringArrayProperty("missingexample", new String[] { "default", "value"});
           assertEquals(2, array.length);
           assertEquals("default", array[0]);
           assertEquals("value", array[1]);
           
           prop.setProperty("example1", "@|abc|def");
           String[] array1 = prop.getStringArrayProperty("example1", new String[] { });
           assertEquals(2, array1.length);
           assertEquals("abc", array1[0]);
           assertEquals("def", array1[1]);
          
           prop.setProperty("example2", "foo bar\tzig");
           String[] array2 = prop.getStringArrayProperty("example2", new String[] { });
           assertEquals(3, array2.length);
           assertEquals("foo", array2[0]);
           assertEquals("bar", array2[1]);
           assertEquals("zig", array2[2]);
         
        Parameters:
        name - the key/name of the property to retrieve
        defaultValue - the default value to use if the existing value is null or no values could be found in the conversion.
        Returns:
        a String array
      • buildArrayFromString

        protected static java.lang.String[] buildArrayFromString​(java.lang.String value,
                                                                 java.lang.String[] defaultValue)
        Convert a string to a String[] using the following formats:
        • "@{delim}value1{delim}value2...", where {delim} is one character delimiter of your choice.
        • "value1{delim}value2{delim}...", where {delim} is a character from \t\n\r\f.
        Parameters:
        value - the value
        defaultValue - the default value
        Returns:
        an array of String
      • getIntArrayProperty

        public int[] getIntArrayProperty​(java.lang.String name,
                                         int[] defaultValue)
        Gets the value of a property as a int array. Uses same format of getStringArrayProperty(String, String[]).
        Parameters:
        name - the key/name of the property to retrieve
        defaultValue - the default value to use if the existing value is null or no values could be found in the conversion.
        Returns:
        an int array
        See Also:
        getStringArrayProperty(String, String[])
      • addProperties

        public void addProperties​(java.util.Properties prop)
        Add every property of the given Properties to this JProperties.
        Parameters:
        prop - the properties to be added
      • addProperties

        public void addProperties​(JProperties prop)
        Add every property of the given JProperties to this JProperties.
        Parameters:
        prop - the jproperties to be added
      • checkCacheGetProperties

        protected JProperties checkCacheGetProperties​(java.lang.String prefix)
      • putCacheGetProperties

        protected void putCacheGetProperties​(java.lang.String prefix,
                                             JProperties prop)
      • invalidateCacheGetProperties

        public void invalidateCacheGetProperties()
        Invalidate the cache used for getProperties(String) method.
        Since:
        jcms-8.0.2
      • getProperties

        public JProperties getProperties​(java.lang.String prefix)
        Returns a new property set of properties with key matching a given prefix.
        Parameters:
        prefix - the prefix the properties must match to be added to the returned JProperties instance, if null, all properties are added.
        Returns:
        a new property set of properties with key matching a given prefix.
      • getSubProperties

        public java.util.Map<java.lang.String,​java.lang.Object> getSubProperties​(java.lang.String prefix)
        Returns a map of properties built from those properties and having a given prefix.
        Example:
        prop:
        foo.bar.case1.x: value of x for case1
        foo.bar.case1.y: value of y for case1
        foo.bar.case2.x: value of x for case2
        foo.bar.case2.y: value of y for case2
        foo.bar.case2.z.t: value of z for case2

        prop.getSubProperties("foo.bar.") returns a Map with the keys case1 and case2.

        A JProperties is bound to case1 and it contains the properties:
        x: value of x for case1
        y: value of y for case1

        A JProperties is bound to case2 and it contains the properties:
        x: value of x for case2
        y: value of y for case2
        z.t: value of z for case2

        Parameters:
        prefix - the prefix
        Returns:
        a map with string as the key and either String or JProperties as the value.
        Since:
        jcms-5.7.2
      • clearProperties

        public void clearProperties()
        Clear all properties.
      • load

        public void load​(java.io.File file)
                  throws java.io.IOException
        Reads a property file (key and element pairs) from the given File. The file encoding is assumed to be UTF-8.
        Parameters:
        file - the file from which to read properties.
        Throws:
        java.io.IOException - if an error occurred when reading from the input stream.
        java.lang.IllegalArgumentException - if the input stream contains a malformed Unicode escape sequence.
        See Also:
        Properties.load(java.io.InputStream)
      • load

        public void load​(java.io.File file,
                         boolean unprotectSensitiveData)
                  throws java.io.IOException
        Reads a property file (key and element pairs) from the given File. The file encoding is assumed to be UTF-8.
        Parameters:
        file - the file from which to read properties.
        unprotectSensitiveData - true if sensitive data should be unprotected after read
        Throws:
        java.io.IOException - if an error occurred when reading from the input stream.
        java.lang.IllegalArgumentException - if the input stream contains a malformed Unicode escape sequence.
        See Also:
        Properties.load(java.io.InputStream)
      • load

        public void load​(java.io.File file,
                         java.lang.String prefix)
                  throws java.io.IOException
        Reads a property file (key and element pairs) from the given File. The file encoding is assumed to be UTF-8.
        Parameters:
        file - the file from which to read properties.
        prefix - a prefix to use add to all properties' name. if null, no prefix is used.
        Throws:
        java.io.IOException - if an error occurred when reading from the input stream.
        java.lang.IllegalArgumentException - if the input stream contains a malformed Unicode escape sequence.
        See Also:
        Properties.load(java.io.InputStream)
      • load

        public void load​(java.io.File file,
                         java.lang.String prefix,
                         boolean unprotectSensitiveData)
                  throws java.io.IOException
        Reads a property file (key and element pairs) from the given File. The file encoding is assumed to be UTF-8.
        Parameters:
        file - the file from which to read properties.
        prefix - a prefix to use add to all properties' name. if null, no prefix is used.
        unprotectSensitiveData - true if sensitive data should be unprotected after read
        Throws:
        java.io.IOException - if an error occurred when reading from the input stream.
        java.lang.IllegalArgumentException - if the input stream contains a malformed Unicode escape sequence.
        See Also:
        Properties.load(java.io.InputStream)
      • getLoadedFiles

        public java.util.Set<java.io.File> getLoadedFiles()
        Retrieve a set of all that were loaded in this JProperties instance (ordered by the load order)
        Returns:
        a Set, never returns null
        Since:
        JCMS-6735
      • updateAndSave

        public void updateAndSave​(java.io.File file)
                           throws java.io.IOException
        Updates and save properties. The original layout is preserved for existing properties and comments New properties are appended.
        Parameters:
        file - the properties File to read and update.
        Throws:
        java.io.IOException - IOException thrown in method
      • isSensitiveProperty

        public boolean isSensitiveProperty​(java.lang.String key)
        Check if the specified property key is considered to be sensitive and for which values is being concealed or crypted on saved.
        Parameters:
        key - the name of the property being verified
        Returns:
        true if property is sensitive, false otherwise
        Since:
        jcms-10.0.3 / JCMS-7225 (initally introduce as private in jcms-10.0.2 / JCMS-6928)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.util.Hashtable<java.lang.String,​java.lang.String>
      • parse

        public static JProperties parse​(java.lang.String str)
      • parse

        public static JProperties parse​(java.lang.String str,
                                        boolean decodeDoubleBackslashedChar)
      • put

        public V put​(K key,
                     V value)
        Specified by:
        put in interface java.util.Map<K,​V>
        Overrides:
        put in class java.util.Hashtable<K,​V>
      • remove

        public V remove​(java.lang.Object key)
        Specified by:
        remove in interface java.util.Map<K,​V>
        Overrides:
        remove in class java.util.Hashtable<K,​V>
      • clear

        public void clear()
        Specified by:
        clear in interface java.util.Map<K,​V>
        Overrides:
        clear in class java.util.Hashtable<K,​V>
      • getProtectedKeySet

        public java.util.Set<java.lang.String> getProtectedKeySet()
      • addProtectedKeys

        public void addProtectedKeys​(java.util.Collection<java.lang.String> col)