@Override
            public Iterator<ArbitraryAttributeModel> iterator() {

                // Get iterator over all string name/value entries
                final Iterator<Map.Entry<String, String>> iterator = entrySet().iterator();

                // Dynamically translate each string name/value entry into a
                // corresponding attribute model object as iteration continues
                return new Iterator<ArbitraryAttributeModel>() {

                    @Override
                    public boolean hasNext() {
                        return iterator.hasNext();
                    }

                    @Override
                    public ArbitraryAttributeModel next() {
                        Map.Entry<String, String> entry = iterator.next();
                        return new ArbitraryAttributeModel(entry.getKey(),
                                entry.getValue());
                    }

                    @Override
                    public void remove() {
                        iterator.remove();
                    }

                };

            }
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