From: Mathieu Baudier Date: Thu, 23 Jun 2022 08:22:55 +0000 (+0200) Subject: Improve naming. Fix Argeo namespace base. X-Git-Tag: v2.3.10~168 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=55d1a78150b6be0004f6bcb28703bcdd6daf55a1;p=lgpl%2Fargeo-commons.git Improve naming. Fix Argeo namespace base. --- diff --git a/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/app/AcrContentTreeView.java b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/app/AcrContentTreeView.java index cfae59b49..9d7b83ab1 100644 --- a/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/app/AcrContentTreeView.java +++ b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/app/AcrContentTreeView.java @@ -85,7 +85,7 @@ public class AcrContentTreeView extends Composite { @Override protected int getItemCount() { - data = new ArrayList<>(selected.getTypes()); + data = new ArrayList<>(selected.getContentClasses()); return data.size(); } }; diff --git a/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java index af4c68aac..8fd4065ad 100644 --- a/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java +++ b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java @@ -89,7 +89,8 @@ public class SwtTabularPart implements TabularPart { Object data = getData(row); item.setData(data); String text = data != null ? column.getText(data) : ""; - item.setText(i, text); + if (text != null) + item.setText(i, text); CmsIcon icon = column.getIcon(data); if (icon != null) { Image image = theme.getSmallIcon(icon); diff --git a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContent.java b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContent.java index 41672a0e9..ad90b2df7 100644 --- a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContent.java +++ b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContent.java @@ -291,7 +291,7 @@ public class JcrContent extends AbstractContent { * TYPING */ @Override - public List getTypes() { + public List getContentClasses() { try { // Node node = getJcrNode(); // List res = new ArrayList<>(); diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/Content.java b/org.argeo.api.acr/src/org/argeo/api/acr/Content.java index cd03b16a8..0fdc14fe3 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/Content.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/Content.java @@ -92,7 +92,27 @@ public interface Content extends Iterable, Map { /* * TYPING */ - List getTypes(); + List getContentClasses(); + + /** AND */ + default boolean isContentClass(QName... contentClass) { + List contentClasses = getContentClasses(); + for (QName cClass : contentClass) { + if (!contentClasses.contains(cClass)) + return false; + } + return true; + } + + /** OR */ + default boolean hasContentClass(QName... contentClass) { + List contentClasses = getContentClasses(); + for (QName cClass : contentClass) { + if (contentClasses.contains(cClass)) + return true; + } + return false; + } /* * DEFAULT METHODS @@ -112,9 +132,21 @@ public interface Content extends Iterable, Map { /* * CONVENIENCE METHODS */ -// default String attr(String key) { -// return get(key, String.class); -// } + default String attr(String key) { + Object obj = get(key); + if (obj == null) + return null; + return obj.toString(); + + } + + default String attr(QName key) { + Object obj = get(key); + if (obj == null) + return null; + return obj.toString(); + + } // // default String attr(Object key) { // return key != null ? attr(key.toString()) : attr(null); diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/ContentName.java b/org.argeo.api.acr/src/org/argeo/api/acr/ContentName.java index a3f6d9010..fdeb60776 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/ContentName.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/ContentName.java @@ -84,7 +84,7 @@ public class ContentName extends QName { @Override public String toString() { - return toPrefixedString(); + return toQNameString(); } @Override diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/CrName.java b/org.argeo.api.acr/src/org/argeo/api/acr/CrName.java index f79c47446..f8ef602db 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/CrName.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/CrName.java @@ -33,14 +33,14 @@ public enum CrName implements ContentNameSupplier { // ; - public final static String CR_NAMESPACE_URI = "http://argeo.org/ns/cr"; + public final static String CR_NAMESPACE_URI = "http://www.argeo.org/ns/cr"; public final static String CR_DEFAULT_PREFIX = "cr"; - public final static String LDAP_NAMESPACE_URI = "http://argeo.org/ns/ldap"; + public final static String LDAP_NAMESPACE_URI = "http://www.argeo.org/ns/ldap"; public final static String LDAP_DEFAULT_PREFIX = "ldap"; - public final static String ROLE_NAMESPACE_URI = "http://argeo.org/ns/role"; + public final static String ROLE_NAMESPACE_URI = "http://www.argeo.org/ns/role"; public final static String ROLE_DEFAULT_PREFIX = "role"; private final ContentName value; diff --git a/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java b/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java index c8ba7311d..2703af035 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java @@ -133,7 +133,7 @@ public abstract class AbstractContent extends AbstractMap impleme */ @Override - public List getTypes() { + public List getContentClasses() { return new ArrayList<>(); } diff --git a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentTypes.java b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentTypes.java index 4c1f82a25..67c206304 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentTypes.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentTypes.java @@ -4,8 +4,10 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Objects; +import org.argeo.api.acr.CrName; + public enum CmsContentTypes { - CR_2("cr", "http://argeo.org/ns/cr", "cr.xsd", null), + CR_2(CrName.CR_DEFAULT_PREFIX, CrName.CR_NAMESPACE_URI, "cr.xsd", null), // XSD_2001("xs", "http://www.w3.org/2001/XMLSchema", "XMLSchema.xsd", "http://www.w3.org/2001/XMLSchema.xsd"), // @@ -13,12 +15,14 @@ public enum CmsContentTypes { // XLINK_1999("xlink", "http://www.w3.org/1999/xlink", "xlink.xsd", "http://www.w3.org/XML/2008/06/xlink.xsd"), // - XSLT_2_0("xsl", "http://www.w3.org/1999/XSL/Transform", "schema-for-xslt20.xsd", "https://www.w3.org/2007/schema-for-xslt20.xsd"), + XSLT_2_0("xsl", "http://www.w3.org/1999/XSL/Transform", "schema-for-xslt20.xsd", + "https://www.w3.org/2007/schema-for-xslt20.xsd"), // SVG_1_1("svg", "http://www.w3.org/2000/svg", "SVG.xsd", "https://raw.githubusercontent.com/oreillymedia/HTMLBook/master/schema/svg/SVG.xsd"), // - DOCBOOK_5_0_1("dbk","http://docbook.org/ns/docbook","docbook.xsd","http://docbook.org/xml/5.0.1/xsd/docbook.xsd"), + DOCBOOK_5_0_1("dbk", "http://docbook.org/ns/docbook", "docbook.xsd", + "http://docbook.org/xml/5.0.1/xsd/docbook.xsd"), // XML_EVENTS_2001("ev", "http://www.w3.org/2001/xml-events", "xml-events-attribs-1.xsd", "http://www.w3.org/MarkUp/SCHEMA/xml-events-attribs-1.xsd"), diff --git a/org.argeo.cms/src/org/argeo/cms/acr/directory/AbstractDirectoryContent.java b/org.argeo.cms/src/org/argeo/cms/acr/directory/AbstractDirectoryContent.java index 62148b9af..a14ada79a 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/directory/AbstractDirectoryContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/directory/AbstractDirectoryContent.java @@ -57,7 +57,7 @@ abstract class AbstractDirectoryContent extends AbstractContent { } @Override - public List getTypes() { + public List getContentClasses() { Dictionary properties = doGetProperties(); List contentClasses = new ArrayList<>(); String objectClass = properties.get(LdapAttrs.objectClass.name()).toString(); diff --git a/org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java b/org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java index 9c1a480ba..0ec025ced 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java @@ -66,8 +66,8 @@ class HierarchyUnitContent extends AbstractDirectoryContent { * TYPING */ @Override - public List getTypes() { - List contentClasses = super.getTypes(); + public List getContentClasses() { + List contentClasses = super.getContentClasses(); contentClasses.add(CrName.COLLECTION.get()); return contentClasses; } diff --git a/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java b/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java index d0df8845f..bbd77b221 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java @@ -305,7 +305,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { */ @Override - public List getTypes() { + public List getContentClasses() { List res = new ArrayList<>(); if (Files.isDirectory(path)) res.add(CrName.COLLECTION.get()); diff --git a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java index 15dfe291b..d2b5188f5 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContent.java @@ -278,7 +278,7 @@ public class DomContent extends AbstractContent implements ProvidedContent { * TYPING */ @Override - public List getTypes() { + public List getContentClasses() { List res = new ArrayList<>(); res.add(getName()); return res; diff --git a/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsUserManagerImpl.java b/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsUserManagerImpl.java index 7db3cdc4c..6e2c6c435 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsUserManagerImpl.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsUserManagerImpl.java @@ -34,9 +34,9 @@ import org.argeo.cms.auth.UserAdminUtils; import org.argeo.osgi.useradmin.TokenUtils; import org.argeo.osgi.useradmin.UserDirectory; import org.argeo.util.directory.DirectoryConf; +import org.argeo.util.directory.ldap.SharedSecret; import org.argeo.util.naming.LdapAttrs; import org.argeo.util.naming.NamingUtils; -import org.argeo.util.naming.SharedSecret; import org.argeo.util.transaction.WorkTransaction; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.useradmin.Authorization; diff --git a/org.argeo.util/src/org/argeo/util/directory/ldap/DefaultLdapEntry.java b/org.argeo.util/src/org/argeo/util/directory/ldap/DefaultLdapEntry.java index 8eff66900..4212c5f55 100644 --- a/org.argeo.util/src/org/argeo/util/directory/ldap/DefaultLdapEntry.java +++ b/org.argeo.util/src/org/argeo/util/directory/ldap/DefaultLdapEntry.java @@ -25,7 +25,6 @@ import javax.naming.ldap.LdapName; import org.argeo.util.directory.DirectoryDigestUtils; import org.argeo.util.naming.LdapAttrs; import org.argeo.util.naming.LdapObjs; -import org.argeo.util.naming.SharedSecret; /** An entry in an LDAP (or LDIF) directory. */ public class DefaultLdapEntry implements LdapEntry { diff --git a/org.argeo.util/src/org/argeo/util/directory/ldap/SharedSecret.java b/org.argeo.util/src/org/argeo/util/directory/ldap/SharedSecret.java new file mode 100644 index 000000000..eaab167e8 --- /dev/null +++ b/org.argeo.util/src/org/argeo/util/directory/ldap/SharedSecret.java @@ -0,0 +1,48 @@ +package org.argeo.util.directory.ldap; + +import java.time.Instant; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; + +import org.argeo.util.naming.NamingUtils; + +public class SharedSecret extends AuthPassword { + public final static String X_SHARED_SECRET = "X-SharedSecret"; + private final Instant expiry; + + public SharedSecret(String authInfo, String authValue) { + super(authInfo, authValue); + expiry = null; + } + + public SharedSecret(AuthPassword authPassword) { + super(authPassword); + String authInfo = getAuthInfo(); + if (authInfo.length() == 16) { + expiry = NamingUtils.ldapDateToInstant(authInfo); + } else { + expiry = null; + } + } + + public SharedSecret(ZonedDateTime expiryTimestamp, String value) { + super(NamingUtils.instantToLdapDate(expiryTimestamp), value); + expiry = expiryTimestamp.withZoneSameInstant(ZoneOffset.UTC).toInstant(); + } + + public SharedSecret(int hours, String value) { + this(ZonedDateTime.now().plusHours(hours), value); + } + + @Override + protected String getExpectedAuthScheme() { + return X_SHARED_SECRET; + } + + public boolean isExpired() { + if (expiry == null) + return false; + return expiry.isBefore(Instant.now()); + } + +} diff --git a/org.argeo.util/src/org/argeo/util/naming/LdapAttrs.java b/org.argeo.util/src/org/argeo/util/naming/LdapAttrs.java index 43cfe03b4..5253579e4 100644 --- a/org.argeo.util/src/org/argeo/util/naming/LdapAttrs.java +++ b/org.argeo.util/src/org/argeo/util/naming/LdapAttrs.java @@ -9,7 +9,7 @@ import java.util.function.Supplier; * "https://github.com/krb5/krb5/blob/master/src/plugins/kdb/ldap/libkdb_ldap/kerberos.schema">Kerberos * LDAP (partial) */ -public enum LdapAttrs implements SpecifiedName, Supplier { +public enum LdapAttrs implements SpecifiedName, Supplier, QNamed { /** */ uid("0.9.2342.19200300.100.1.1", "RFC 4519"), /** */ @@ -309,14 +309,6 @@ public enum LdapAttrs implements SpecifiedName, Supplier { return spec; } - public String getPrefix() { - return prefix(); - } - - public static String prefix() { - return "ldap"; - } - @Deprecated public String property() { return get(); @@ -328,16 +320,18 @@ public enum LdapAttrs implements SpecifiedName, Supplier { } public String get() { - String prefix = getPrefix(); + String prefix = getDefaultPrefix(); return prefix != null ? prefix + ":" + name() : name(); } - public String getNamespace() { - return namespace(); + @Override + public String getDefaultPrefix() { + return LdapObjs.LDAP_DEFAULT_PREFIX; } - public static String namespace() { - return "http://www.argeo.org/ns/ldap"; + @Override + public String getNamespace() { + return LdapObjs.LDAP_NAMESPACE_URI; } @Override diff --git a/org.argeo.util/src/org/argeo/util/naming/LdapObjs.java b/org.argeo.util/src/org/argeo/util/naming/LdapObjs.java index c616d1491..6dcb3e9eb 100644 --- a/org.argeo.util/src/org/argeo/util/naming/LdapObjs.java +++ b/org.argeo.util/src/org/argeo/util/naming/LdapObjs.java @@ -5,7 +5,7 @@ package org.argeo.util.naming; * https://www.ldap.com/ldap- * oid-reference */ -public enum LdapObjs implements SpecifiedName { +public enum LdapObjs implements SpecifiedName, QNamed { account("0.9.2342.19200300.100.4.5", "RFC 4524"), /** */ document("0.9.2342.19200300.100.4.6", "RFC 4524"), @@ -91,7 +91,12 @@ public enum LdapObjs implements SpecifiedName { /** */ referral("2.16.840.1.113730.3.2.6", "RFC 3296"); - private final static String LDAP_ = "ldap:"; + /** MUST be equal to ContentRepository LDAP namespace. */ + final static String LDAP_NAMESPACE_URI = "http://www.argeo.org/ns/ldap"; + /** MUST be equal to ContentRepository LDAP prefix. */ + final static String LDAP_DEFAULT_PREFIX = "ldap"; + + private final static String LDAP_ = LDAP_DEFAULT_PREFIX + ":"; private final String oid, spec; private LdapObjs(String oid, String spec) { @@ -111,4 +116,14 @@ public enum LdapObjs implements SpecifiedName { return new StringBuilder(LDAP_).append(name()).toString(); } + @Override + public String getDefaultPrefix() { + return LdapObjs.LDAP_DEFAULT_PREFIX; + } + + @Override + public String getNamespace() { + return LdapObjs.LDAP_NAMESPACE_URI; + } + } diff --git a/org.argeo.util/src/org/argeo/util/naming/QNamed.java b/org.argeo.util/src/org/argeo/util/naming/QNamed.java new file mode 100644 index 000000000..9eac3607a --- /dev/null +++ b/org.argeo.util/src/org/argeo/util/naming/QNamed.java @@ -0,0 +1,36 @@ +package org.argeo.util.naming; + +import javax.xml.namespace.QName; + +/** A (possibly) qualified name. To be used in enums. */ +public interface QNamed { + String name(); + + default QName qName() { + return new DisplayQName(getNamespace(), name(), getDefaultPrefix()); + } + + String getNamespace(); + + String getDefaultPrefix(); + + static class DisplayQName extends QName { + private static final long serialVersionUID = 2376484886212253123L; + + public DisplayQName(String namespaceURI, String localPart, String prefix) { + super(namespaceURI, localPart, prefix); + } + + public DisplayQName(String localPart) { + super(localPart); + } + + @Override + public String toString() { + String prefix = getPrefix(); + assert prefix != null; + return "".equals(prefix) ? getLocalPart() : prefix + ":" + getLocalPart(); + } + + } +} diff --git a/org.argeo.util/src/org/argeo/util/naming/SharedSecret.java b/org.argeo.util/src/org/argeo/util/naming/SharedSecret.java deleted file mode 100644 index 7661d4c51..000000000 --- a/org.argeo.util/src/org/argeo/util/naming/SharedSecret.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.argeo.util.naming; - -import java.time.Instant; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; - -import org.argeo.util.directory.ldap.AuthPassword; - -public class SharedSecret extends AuthPassword { - public final static String X_SHARED_SECRET = "X-SharedSecret"; - private final Instant expiry; - - public SharedSecret(String authInfo, String authValue) { - super(authInfo, authValue); - expiry = null; - } - - public SharedSecret(AuthPassword authPassword) { - super(authPassword); - String authInfo = getAuthInfo(); - if (authInfo.length() == 16) { - expiry = NamingUtils.ldapDateToInstant(authInfo); - } else { - expiry = null; - } - } - - public SharedSecret(ZonedDateTime expiryTimestamp, String value) { - super(NamingUtils.instantToLdapDate(expiryTimestamp), value); - expiry = expiryTimestamp.withZoneSameInstant(ZoneOffset.UTC).toInstant(); - } - - public SharedSecret(int hours, String value) { - this(ZonedDateTime.now().plusHours(hours), value); - } - - @Override - protected String getExpectedAuthScheme() { - return X_SHARED_SECRET; - } - - public boolean isExpired() { - if (expiry == null) - return false; - return expiry.isBefore(Instant.now()); - } - -} diff --git a/rap/org.argeo.cms.ui.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java b/rap/org.argeo.cms.ui.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java index be1f30eb1..a909dbdd7 100644 --- a/rap/org.argeo.cms.ui.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java +++ b/rap/org.argeo.cms.ui.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java @@ -1,6 +1,6 @@ package org.argeo.cms.web; -import static org.argeo.util.naming.SharedSecret.X_SHARED_SECRET; +import static org.argeo.util.directory.ldap.SharedSecret.X_SHARED_SECRET; import java.io.IOException; import java.security.PrivilegedAction; @@ -35,7 +35,7 @@ import org.argeo.cms.swt.CmsSwtUtils; import org.argeo.eclipse.ui.specific.UiContext; import org.argeo.jcr.JcrUtils; import org.argeo.util.directory.ldap.AuthPassword; -import org.argeo.util.naming.SharedSecret; +import org.argeo.util.directory.ldap.SharedSecret; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.application.AbstractEntryPoint; import org.eclipse.rap.rwt.client.WebClient;