Massive package refactoring
[lgpl/argeo-commons.git] / org.argeo.api.cms / src / org / argeo / api / cms / directory / HierarchyUnit.java
diff --git a/org.argeo.api.cms/src/org/argeo/api/cms/directory/HierarchyUnit.java b/org.argeo.api.cms/src/org/argeo/api/cms/directory/HierarchyUnit.java
new file mode 100644 (file)
index 0000000..04593d9
--- /dev/null
@@ -0,0 +1,42 @@
+package org.argeo.api.cms.directory;
+
+import java.util.Dictionary;
+import java.util.Locale;
+
+/** A unit within the high-level organisational structure of a directory. */
+public interface HierarchyUnit {
+       /** Name to use in paths. */
+       String getHierarchyUnitName();
+
+       /** Name to use in UI. */
+       String getHierarchyUnitLabel(Locale locale);
+
+       /**
+        * The parent {@link HierarchyUnit}, or <code>null</code> if a
+        * {@link Directory}.
+        */
+       HierarchyUnit getParent();
+
+       /** Direct children {@link HierarchyUnit}s. */
+       Iterable<HierarchyUnit> getDirectHierarchyUnits(boolean functionalOnly);
+
+       /**
+        * Whether this is an arbitrary named and placed {@link HierarchyUnit}.
+        * 
+        * @return <code>true</code> if functional, <code>false</code> is technical
+        *         (e.g. People, Groups, etc.)
+        */
+       boolean isFunctional();
+
+       /**
+        * The base of this organisational unit within the hierarchy. This would
+        * typically be an LDAP base DN.
+        */
+       String getBase();
+
+       /** The related {@link Directory}. */
+       Directory getDirectory();
+
+       /** Its metadata (typically LDAP attributes). */
+       Dictionary<String, Object> getProperties();
+}