]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java
Remove deprecated APIs
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / KernelUtils.java
index 49f8c20a50be2580e8751683224a9fea25d367cb..909b1faff1722dc284e7a34d682ef2e4e6834f86 100644 (file)
@@ -2,8 +2,10 @@ package org.argeo.cms.internal.kernel;
 
 import java.io.File;
 import java.io.IOException;
+import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URL;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.security.PrivilegedAction;
@@ -13,6 +15,7 @@ import java.util.Hashtable;
 import java.util.Properties;
 import java.util.TreeSet;
 
+import javax.jcr.Node;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -23,15 +26,15 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.logging.Log;
 import org.argeo.cms.CmsException;
-import org.argeo.cms.auth.AuthConstants;
+import org.argeo.node.NodeConstants;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
 
 /** Package utilities */
 class KernelUtils implements KernelConstants {
-       private final static String OSGI_INSTANCE_AREA = "osgi.instance.area";
-       private final static String OSGI_CONFIGURATION_AREA = "osgi.configuration.area";
+       final static String OSGI_INSTANCE_AREA = "osgi.instance.area";
+       final static String OSGI_CONFIGURATION_AREA = "osgi.configuration.area";
 
        static Dictionary<String, ?> asDictionary(Properties props) {
                Hashtable<String, Object> hashtable = new Hashtable<String, Object>();
@@ -73,19 +76,20 @@ class KernelUtils implements KernelConstants {
 
        static URI getOsgiInstanceUri(String relativePath) {
                String osgiInstanceBaseUri = getFrameworkProp(OSGI_INSTANCE_AREA);
-                       return safeUri(osgiInstanceBaseUri + (relativePath != null ? relativePath : ""));
+               return safeUri(osgiInstanceBaseUri + (relativePath != null ? relativePath : ""));
        }
 
-//     static String getOsgiInstancePath(String relativePath) {
-//             try {
-//                     if (relativePath == null)
-//                             return getOsgiInstanceDir().getCanonicalPath();
-//                     else
-//                             return new File(getOsgiInstanceDir(), relativePath).getCanonicalPath();
-//             } catch (IOException e) {
-//                     throw new CmsException("Cannot get instance path for " + relativePath, e);
-//             }
-//     }
+       // static String getOsgiInstancePath(String relativePath) {
+       // try {
+       // if (relativePath == null)
+       // return getOsgiInstanceDir().getCanonicalPath();
+       // else
+       // return new File(getOsgiInstanceDir(), relativePath).getCanonicalPath();
+       // } catch (IOException e) {
+       // throw new CmsException("Cannot get instance path for " + relativePath,
+       // e);
+       // }
+       // }
 
        static File getOsgiConfigurationFile(String relativePath) {
                try {
@@ -112,7 +116,7 @@ class KernelUtils implements KernelConstants {
                Subject subject = new Subject();
                LoginContext lc;
                try {
-                       lc = new LoginContext(AuthConstants.LOGIN_CONTEXT_ANONYMOUS, subject);
+                       lc = new LoginContext(NodeConstants.LOGIN_CONTEXT_ANONYMOUS, subject);
                        lc.login();
                        return subject;
                } catch (LoginException e) {
@@ -157,7 +161,7 @@ class KernelUtils implements KernelConstants {
                Thread.currentThread().setContextClassLoader(KernelUtils.class.getClassLoader());
                LoginContext loginContext;
                try {
-                       loginContext = new LoginContext(AuthConstants.LOGIN_CONTEXT_DATA_ADMIN);
+                       loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_DATA_ADMIN);
                        loginContext.login();
                } catch (LoginException e1) {
                        throw new CmsException("Could not login as data admin", e1);
@@ -195,17 +199,78 @@ class KernelUtils implements KernelConstants {
        private static BundleContext getBundleContext() {
                return getBundleContext(KernelUtils.class);
        }
-       
-       private static URI safeUri(String uri){
-               if(uri==null)
+
+       private static URI safeUri(String uri) {
+               if (uri == null)
                        throw new CmsException("URI cannot be null");
                try {
                        return new URI(uri);
                } catch (URISyntaxException e) {
-                       throw new CmsException("Dadly formatted URI "+uri, e);
+                       throw new CmsException("Dadly formatted URI " + uri, e);
+               }
+       }
+
+       // DATA
+       public static StringBuilder getServerBaseUrl(HttpServletRequest request) {
+               try {
+                       URL url = new URL(request.getRequestURL().toString());
+                       StringBuilder buf = new StringBuilder();
+                       buf.append(url.getProtocol()).append("://").append(url.getHost());
+                       if (url.getPort() != -1)
+                               buf.append(':').append(url.getPort());
+                       return buf;
+               } catch (MalformedURLException e) {
+                       throw new CmsException("Cannot extract server base URL from " + request.getRequestURL(), e);
+               }
+       }
+
+       public static String getDataUrl(Node node, HttpServletRequest request) throws RepositoryException {
+               try {
+                       StringBuilder buf = getServerBaseUrl(request);
+                       buf.append(getDataPath(node));
+                       return new URL(buf.toString()).toString();
+               } catch (MalformedURLException e) {
+                       throw new CmsException("Cannot build data URL for " + node, e);
                }
        }
 
+       public static String getDataPath(Node node) throws RepositoryException {
+               assert node != null;
+               String userId = node.getSession().getUserID();
+//             if (log.isTraceEnabled())
+//                     log.trace(userId + " : " + node.getPath());
+               StringBuilder buf = new StringBuilder();
+               boolean isAnonymous = userId.equalsIgnoreCase(NodeConstants.ROLE_ANONYMOUS);
+               if (isAnonymous)
+                       buf.append(WEBDAV_PUBLIC);
+               else
+                       buf.append(WEBDAV_PRIVATE);
+               Session session = node.getSession();
+               Repository repository = session.getRepository();
+               String cn;
+               if (repository.isSingleValueDescriptor(NodeConstants.CN)) {
+                       cn = repository.getDescriptor(NodeConstants.CN);
+               } else {
+//                     log.warn("No cn defined in repository, using " + NodeConstants.NODE);
+                       cn = NodeConstants.NODE;
+               }
+               return buf.append('/').append(cn).append('/').append(session.getWorkspace().getName()).append(node.getPath())
+                               .toString();
+       }
+
+       public static String getCanonicalUrl(Node node, HttpServletRequest request) throws RepositoryException {
+               try {
+                       StringBuilder buf = getServerBaseUrl(request);
+                       buf.append('/').append('!').append(node.getPath());
+                       return new URL(buf.toString()).toString();
+               } catch (MalformedURLException e) {
+                       throw new CmsException("Cannot build data URL for " + node, e);
+               }
+               // return request.getRequestURL().append('!').append(node.getPath())
+               // .toString();
+       }
+
+       
        private KernelUtils() {
 
        }