@Override
            public boolean remove(Object o) {

                // The Collection view of an ArbitraryAttributeMap can contain
                // only ArbitraryAttributeModel objects
                if (!(o instanceof ArbitraryAttributeModel))
                    return false;

                // Remove only if key is actually present
                ArbitraryAttributeModel model = (ArbitraryAttributeModel) o;
                if (!ArbitraryAttributeMap.this.containsKey(model.getName()))
                    return false;

                // The attribute should be removed only if the value matches
                String currentValue = ArbitraryAttributeMap.this.get(model.getName());
                if (currentValue == null) {
                    if (model.getValue() != null)
                        return false;
                }
                else if (!currentValue.equals(model.getValue()))
                    return false;

                ArbitraryAttributeMap.this.remove(model.getName());
                return true;

            }
Returns a collection of model objects which mirrors the contents of this
ArbitraryAttributeMap. Each name/value pair within the map is reflected
by a corresponding model object within the returned collection. Removing
a model object from the collection removes the corresponding name/value
pair from the map. Adding a new model object to the collection adds a
corresponding name/value pair to the map. Changes to a model object
within the collection are NOT reflected on the map, however.

@return
    A collection of model objects which mirrors the contents of this
    ArbitraryAttributeMap.
extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ArbitraryAttributeMap.java