class LdapUser implements Serializable {

    private String dn; // Distinguished Name
    private final Map<String, Set<String>> attributes;

    private static final long serialVersionUID = 1L;

    public LdapUser() {
        this(null, null);
    }

    public LdapUser(String dn, Map<String, Set<String>> attrs) {
        this.dn = dn;
        this.attributes = Objects.requireNonNullElseGet(attrs, HashMap::new);
    }

    /**
     * Set attribute value.
     *
     * @param key the key
     * @param value set of values
     * @return the value previously associated with the key
     */
    public Object setAttribute(String key, Set<String> value) {
        return attributes.put(key, value);
    }

    public Set<String> getAttribute(String key) {
        return attributes.get(key);
    }

    public Map<String, Set<String>> getAttributes() {
        return this.attributes;
    }

    public void setDn(String dn) {
        this.dn = dn;
    }

    public String getDn() {
        return dn;
    }

    @Override
    public String toString() {<FILL_FUNCTION_BODY>}
}

        return "LdapUser{dn=" + dn + "; attributes=" + attributes + '}';
    
<no_super_class>