Introduce qualified name concept.
authorMathieu Baudier <mbaudier@argeo.org>
Sat, 31 Oct 2020 06:21:16 +0000 (07:21 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Sat, 31 Oct 2020 06:21:16 +0000 (07:21 +0100)
org.argeo.enterprise/src/org/argeo/naming/LdapAttrs.java
org.argeo.enterprise/src/org/argeo/naming/QualifiedName.java [new file with mode: 0644]

index 171b83a0f9e47026d38de41523a50e3e9967b352..dc266998db5cb9d3612f9ae44b53d6a1e87cf0c5 100644 (file)
@@ -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)</a>
  */
-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 (file)
index 0000000..a80e5b5
--- /dev/null
@@ -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();
+       }
+}