public static void setProperty( String name, List<String> values )
    {
        if ( properties == null )
        {
            if ( isSetupMode() )
            {
                return;
            }
            properties = JiveProperties.getInstance();
        }

        final List<String> existing = getProperties( name );
        if ( existing != null && existing.equals( values ) )
        {
            // no change.
            return;
        }

        properties.remove( name );
        if ( values != null )
        {
            int i = 1;
            for ( final String value : values )
            {
                if ( value != null && !value.isEmpty() )
                {
                    final String childName = name + "." + String.format("%05d", i++ );
                    properties.put( childName, value );
                }
            }

            // When no non-null, non-empty values are stored, store one to denote an empty collection.
            if ( i == 1 )
            {
                properties.put( name + ".00001", "" );
            }

            // The put's above will have generated events for each child property. Now, generate an event for the parent.
            final Map<String, Object> params = new HashMap<>();
            params.put("value", values);
            PropertyEventDispatcher.dispatchEvent(name, PropertyEventDispatcher.EventType.property_set, params);
        }
    }
Sets a Jive property with a list of values. If the property doesn't already exists, a new one will be created.
Empty or null values in the collection are ignored.

Each value is stored as a direct child property of the property name provided as an argument to this method. When
this method is used, all previous children of the property will be deleted.

When the provided value is null, any previously stored collection will be removed. If it is an empty collection
(or a collection that consists of null and empty values onlu), it is stored as an empty collection
(represented by a child property that has an empty value).

The naming convention used by this method to define child properties is subject to change, and should not be
depended on.

This method differs from {@link #setProperties(Map)}, which is used to set multiple properties. This method sets
one property with multiple values.

@param name   the name of the property being set.
@param values the values of the property.
xmppserver/src/main/java/org/jivesoftware/util/JiveGlobals.java