import org.argeo.api.acr.Content;
import org.argeo.api.acr.ContentRepository;
import org.argeo.api.acr.ContentSession;
-import org.argeo.api.acr.CrName;
+import org.argeo.api.acr.DName;
import org.argeo.api.cms.CmsAuth;
-import org.argeo.cms.CmsUserManager;
-import org.argeo.osgi.useradmin.UserDirectory;
-import org.argeo.util.CurrentSubject;
+import org.argeo.api.cms.directory.CmsDirectory;
+import org.argeo.api.cms.directory.CmsUserManager;
+import org.argeo.api.cms.directory.HierarchyUnit;
+import org.argeo.api.cms.directory.UserDirectory;
+import org.argeo.cms.util.CurrentSubject;
import org.osgi.service.useradmin.Role;
/** Utilities and routines around {@link Content}. */
// }
public static final char SLASH = '/';
+ public static final String SLASH_STRING = Character.toString(SLASH);
public static final String ROOT_SLASH = "" + SLASH;
public static final String EMPTY = "";
throw new IllegalArgumentException("Path " + path + " contains //");
}
+ /*
+ * DIRECTORY
+ */
+
public static Content roleToContent(CmsUserManager userManager, ContentSession contentSession, Role role) {
UserDirectory userDirectory = userManager.getDirectory(role);
- String path = CmsContentRepository.DIRECTORY_BASE + SLASH + userDirectory.getName() + SLASH
- + userDirectory.getRolePath(role);
+ String path = directoryPath(userDirectory) + userDirectory.getRolePath(role);
+ Content content = contentSession.get(path);
+ return content;
+ }
+
+ public static Content hierarchyUnitToContent(ContentSession contentSession, HierarchyUnit hierarchyUnit) {
+ CmsDirectory directory = hierarchyUnit.getDirectory();
+ StringJoiner relativePath = new StringJoiner(SLASH_STRING);
+ buildHierarchyUnitPath(hierarchyUnit, relativePath);
+ String path = directoryPath(directory) + relativePath.toString();
Content content = contentSession.get(path);
return content;
}
+ /** The path to this {@link CmsDirectory}. Ends with a /. */
+ private static String directoryPath(CmsDirectory directory) {
+ return CmsContentRepository.DIRECTORY_BASE + SLASH + directory.getName() + SLASH;
+ }
+
+ /** Recursively build a relative path of a {@link HierarchyUnit}. */
+ private static void buildHierarchyUnitPath(HierarchyUnit current, StringJoiner relativePath) {
+ if (current.getParent() == null) // directory
+ return;
+ buildHierarchyUnitPath(current.getParent(), relativePath);
+ relativePath.add(current.getHierarchyUnitName());
+ }
+
/*
* CONSUMER UTILS
*/
public static Content createCollections(ContentSession session, String path) {
if (session.exists(path)) {
Content content = session.get(path);
- if (!content.isContentClass(CrName.collection.qName())) {
+ if (!content.isContentClass(DName.collection.qName())) {
throw new IllegalStateException("Content " + path + " already exists, but is not a collection");
} else {
return content;
} else {
String[] parentPath = getParentPath(path);
Content parent = createCollections(session, parentPath[0]);
- Content content = parent.add(parentPath[1], CrName.collection.qName());
+ Content content = parent.add(parentPath[1], DName.collection.qName());
return content;
}
}