From afd31256550ee8fe257a43558cfd07dfcf2e5c04 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sat, 31 Oct 2020 07:21:16 +0100 Subject: [PATCH] Introduce qualified name concept. --- .../src/org/argeo/naming/LdapAttrs.java | 22 +++++++++++--- .../src/org/argeo/naming/QualifiedName.java | 30 +++++++++++++++++++ 2 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 org.argeo.enterprise/src/org/argeo/naming/QualifiedName.java diff --git a/org.argeo.enterprise/src/org/argeo/naming/LdapAttrs.java b/org.argeo.enterprise/src/org/argeo/naming/LdapAttrs.java index 171b83a0f..dc266998d 100644 --- a/org.argeo.enterprise/src/org/argeo/naming/LdapAttrs.java +++ b/org.argeo.enterprise/src/org/argeo/naming/LdapAttrs.java @@ -7,7 +7,7 @@ package org.argeo.naming; * "https://github.com/krb5/krb5/blob/master/src/plugins/kdb/ldap/libkdb_ldap/kerberos.schema">Kerberos * LDAP (partial) */ -public enum LdapAttrs implements SpecifiedName { +public enum LdapAttrs implements SpecifiedName, QualifiedName { /** */ uid("0.9.2342.19200300.100.1.1", "RFC 4519"), /** */ @@ -288,7 +288,7 @@ public enum LdapAttrs implements SpecifiedName { public final static String DN = "dn"; - private final static String LDAP_ = "ldap:"; +// private final static String LDAP_ = "ldap:"; private final String oid, spec; @@ -307,8 +307,22 @@ public enum LdapAttrs implements SpecifiedName { return spec; } - public String property() { - return new StringBuilder(LDAP_).append(name()).toString(); + @Override + public String getPrefix() { + return prefix(); + } + + public static String prefix() { + return "ldap"; + } + + @Override + public String getNamespace() { + return namespace(); + } + + public static String namespace() { + return "http://www.argeo.org/ns/ldap"; } @Override diff --git a/org.argeo.enterprise/src/org/argeo/naming/QualifiedName.java b/org.argeo.enterprise/src/org/argeo/naming/QualifiedName.java new file mode 100644 index 000000000..a80e5b5f4 --- /dev/null +++ b/org.argeo.enterprise/src/org/argeo/naming/QualifiedName.java @@ -0,0 +1,30 @@ +package org.argeo.naming; + +/** Can be applied to {@link Enum}s in order to generate prefixed names. */ +public interface QualifiedName { + String name(); + + default String getPrefix() { + return null; + } + + default String getNamespace() { + return null; + } + + default String property() { + return qualified(); + } + + default String qualified() { + String prefix = getPrefix(); + return prefix != null ? prefix + ":" + name() : name(); + } + + default String withNamespace() { + String namespace = getNamespace(); + if (namespace == null) + throw new UnsupportedOperationException("No namespace is specified for " + getClass()); + return "{" + namespace + "}" + name(); + } +} -- 2.30.2