@Override
    public <Type> Collection<Type> getPropertyCollection(
            GuacamoleProperty<Type> property, Type defaultValue)
            throws GuacamoleException {
        
        /* Pull the given property as a string. */
        StringGuacamoleProperty stringProperty = new StringGuacamoleProperty() {
            
            @Override
            public String getName() { return property.getName(); }
            
        };
        
        /* Check the value and return the default if null. */
        String stringValue = getProperty(stringProperty);
        if (stringValue == null)
            return Collections.singletonList(defaultValue);
        
        /* Parse the string and return the collection. */
        return property.parseValueCollection(stringValue);
        
    }
Creates a new DefaultEnvironment that provides default implementations
for functions that may not be implemented by the given Environment
implementation. The versions provided by DefaultEnvironment must still
be manually called by actual <code>public default</code> functions on
Environment to have any effect.

@param environment
    The environment that may not provide implementations for all
    functions defined by the Environment interface.
guacamole-ext/src/main/java/org/apache/guacamole/environment/DefaultEnvironment.java