- @SuppressWarnings("unchecked")
- @Override
- public <A> Optional<A> get(QName key, Class<A> clss) {
- String attrName = key.getLocalPart();
- Object value = role.getProperties().get(attrName);
- if (value == null)
- return Optional.empty();
- // TODO deal with type and multiple
- return Optional.of((A) value);
- }
-
- @Override
- protected Iterable<QName> keys() {
- Set<QName> keys = new TreeSet<>(NamespaceUtils.QNAME_COMPARATOR);
- keys: for (Enumeration<String> it = role.getProperties().keys(); it.hasMoreElements();) {
- String key = it.nextElement();
- if (key.equalsIgnoreCase(LdapAttrs.objectClass.name()))
- continue keys;
- ContentName name = new ContentName(CrName.LDAP_NAMESPACE_URI, key, provider);
- keys.add(name);
- }
- return keys;
- }
-
- @Override
- public List<QName> getTypes() {
- List<QName> contentClasses = new ArrayList<>();
- keys: for (Enumeration<String> it = role.getProperties().keys(); it.hasMoreElements();) {
- String key = it.nextElement();
- if (key.equalsIgnoreCase(LdapAttrs.objectClass.name())) {
- String[] objectClasses = role.getProperties().get(key).toString().split("\\n");
- objectClasses: for (String objectClass : objectClasses) {
- if (LdapObjs.top.name().equalsIgnoreCase(objectClass))
- continue objectClasses;
- contentClasses.add(new ContentName(CrName.LDAP_NAMESPACE_URI, objectClass, provider));
- }
- break keys;
- }
- }
- return contentClasses;
- }
-
- @Override
- public Object put(QName key, Object value) {
- Object previous = get(key);
- // TODO deal with typing
- role.getProperties().put(key.getLocalPart(), value);
- return previous;
- }
-
- @Override
- protected void removeAttr(QName key) {
- role.getProperties().remove(key.getLocalPart());
- }
-