Adapt to MS Windows
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / runtime / DeployedContentRepository.java
index 6392fdaf3534fd5eab61df9f8a2270fa860cb73b..bb1f6112a927616caec811bb98d61321fc7319ea 100644 (file)
@@ -1,30 +1,58 @@
 package org.argeo.cms.internal.runtime;
 
+import java.io.IOException;
+import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.Map;
 
-import org.argeo.api.acr.spi.ContentProvider;
-import org.argeo.api.cms.CmsConstants;
-import org.argeo.api.cms.CmsState;
+import org.argeo.api.cms.CmsLog;
+import org.argeo.api.cms.directory.CmsUserManager;
 import org.argeo.cms.acr.CmsContentRepository;
+import org.argeo.cms.acr.directory.DirectoryContentProvider;
 import org.argeo.cms.acr.fs.FsContentProvider;
-import org.argeo.util.LangUtils;
+import org.argeo.cms.util.OS;
 
 public class DeployedContentRepository extends CmsContentRepository {
-       private final static String ROOT_XML = "root.xml";
-       private final static String ACR_MOUNT_PATH = "acr.mount.path";
+       private final static String ROOT_XML = OS.LOCAL.isMSWindows() ? "cr%3Aroot.xml" : "cr:root.xml";
 
-       private CmsState cmsState;
+       private final static CmsLog log = CmsLog.getLog(DeployedContentRepository.class);
+
+       private CmsUserManager userManager;
 
        @Override
        public void start() {
-               super.start();
-               Path rootXml = KernelUtils.getOsgiInstancePath(KernelConstants.DIR_NODE).resolve(ROOT_XML);
-               initRootContentProvider(rootXml);
+               long begin = System.currentTimeMillis();
+               try {
+                       super.start();
+                       // FIXME does not work on Windows
+                       //Path rootXml = KernelUtils.getOsgiInstancePath(ROOT_XML);
+                       initRootContentProvider(null);
+
+//             Path srvPath = KernelUtils.getOsgiInstancePath(CmsConstants.SRV_WORKSPACE);
+//             FsContentProvider srvContentProvider = new FsContentProvider("/" + CmsConstants.SRV_WORKSPACE, srvPath, false);
+//             addProvider(srvContentProvider);
+
+                       // run dir
+                       Path runDirPath = KernelUtils.getOsgiInstancePath(CmsContentRepository.RUN_BASE);
+                       if (runDirPath != null) {
+                               Files.createDirectories(runDirPath);
+                               FsContentProvider runContentProvider = new FsContentProvider(CmsContentRepository.RUN_BASE, runDirPath);
+                               addProvider(runContentProvider);
+                       }
+
+                       // users
+                       DirectoryContentProvider directoryContentProvider = new DirectoryContentProvider(
+                                       CmsContentRepository.DIRECTORY_BASE, userManager);
+                       addProvider(directoryContentProvider);
 
-               Path srvPath = KernelUtils.getOsgiInstancePath(CmsConstants.SRV_WORKSPACE);
-               FsContentProvider srvContentProvider = new FsContentProvider(srvPath, false);
-               addProvider("/" + CmsConstants.SRV_WORKSPACE, srvContentProvider);
+                       // remote
+//                     DavContentProvider davContentProvider = new DavContentProvider("/srv",
+//                                     URI.create("http://localhost/unstable/a2/"));
+//                     addProvider(davContentProvider);
+               } catch (IOException e) {
+                       throw new IllegalStateException("Cannot start content repository", e);
+               }
+               long duration = System.currentTimeMillis() - begin;
+               log.debug(() -> "CMS content repository available (initialisation took " + duration + " ms)");
        }
 
        @Override
@@ -32,16 +60,8 @@ public class DeployedContentRepository extends CmsContentRepository {
                super.stop();
        }
 
-       public void addContentProvider(ContentProvider provider, Map<String, Object> properties) {
-               String base = LangUtils.get(properties, ACR_MOUNT_PATH);
-               addProvider(base, provider);
-       }
-
-       public void removeContentProvider(ContentProvider provider, Map<String, Object> properties) {
-       }
-
-       public void setCmsState(CmsState cmsState) {
-               this.cmsState = cmsState;
+       public void setUserManager(CmsUserManager userManager) {
+               this.userManager = userManager;
        }
 
 }