X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FKernelUtils.java;h=a5362c64e7484686ff64a0c2631d84acdc06b1cd;hb=ed3d525b21f55ed76763381b91c888404487e3e1;hp=e0eb371b1833492008b403d7448e53069c1738f2;hpb=54cba9d97464302cbcfad9d8a57cb23a17bdddb7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java index e0eb371b1..a5362c64e 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java @@ -2,15 +2,18 @@ package org.argeo.cms.internal.kernel; import java.io.File; import java.io.IOException; +import java.io.PrintStream; 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; +import java.security.URIParameter; import java.util.Dictionary; -import java.util.Enumeration; import java.util.Hashtable; import java.util.Properties; +import java.util.TreeMap; import java.util.TreeSet; import javax.jcr.Repository; @@ -19,20 +22,31 @@ import javax.jcr.Session; import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; -import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; +import org.argeo.api.DataModelNamespace; +import org.argeo.api.NodeConstants; import org.argeo.cms.CmsException; -import org.argeo.node.NodeConstants; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; +import org.osgi.util.tracker.ServiceTracker; /** Package utilities */ class KernelUtils implements KernelConstants { final static String OSGI_INSTANCE_AREA = "osgi.instance.area"; final static String OSGI_CONFIGURATION_AREA = "osgi.configuration.area"; + static void setJaasConfiguration(URL jaasConfigurationUrl) { + try { + URIParameter uriParameter = new URIParameter(jaasConfigurationUrl.toURI()); + javax.security.auth.login.Configuration jaasConfiguration = javax.security.auth.login.Configuration + .getInstance("JavaLoginConfig", uriParameter); + javax.security.auth.login.Configuration.setConfiguration(jaasConfiguration); + } catch (Exception e) { + throw new IllegalArgumentException("Cannot set configuration " + jaasConfigurationUrl, e); + } + } + static Dictionary asDictionary(Properties props) { Hashtable hashtable = new Hashtable(); for (Object key : props.keySet()) { @@ -46,7 +60,7 @@ class KernelUtils implements KernelConstants { try { props.load(cl.getResourceAsStream(resource)); } catch (IOException e) { - throw new CmsException("Cannot load " + resource + " from classpath", e); + throw new IllegalArgumentException("Cannot load " + resource + " from classpath", e); } return asDictionary(props); } @@ -58,7 +72,7 @@ class KernelUtils implements KernelConstants { try { return new File(executionDir, relativePath).getCanonicalFile(); } catch (IOException e) { - throw new CmsException("Cannot get canonical file", e); + throw new IllegalArgumentException("Cannot get canonical file", e); } } @@ -73,32 +87,28 @@ class KernelUtils implements KernelConstants { static URI getOsgiInstanceUri(String relativePath) { String osgiInstanceBaseUri = getFrameworkProp(OSGI_INSTANCE_AREA); - return safeUri(osgiInstanceBaseUri + (relativePath != null ? relativePath : "")); + if (osgiInstanceBaseUri != null) + return safeUri(osgiInstanceBaseUri + (relativePath != null ? relativePath : "")); + else + return Paths.get(System.getProperty("user.dir")).toUri(); } - // 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 { return new File(new URI(getBundleContext().getProperty(OSGI_CONFIGURATION_AREA) + relativePath)) .getCanonicalFile(); } catch (Exception e) { - throw new CmsException("Cannot get configuration file for " + relativePath, e); + throw new IllegalArgumentException("Cannot get configuration file for " + relativePath, e); } } static String getFrameworkProp(String key, String def) { - String value = getBundleContext().getProperty(key); + BundleContext bundleContext = Activator.getBundleContext(); + String value; + if (bundleContext != null) + value = bundleContext.getProperty(key); + else + value = System.getProperty(key); if (value == null) return def; return value; @@ -109,29 +119,17 @@ class KernelUtils implements KernelConstants { } // Security - static Subject anonymousLogin() { - Subject subject = new Subject(); - LoginContext lc; - try { - lc = new LoginContext(NodeConstants.LOGIN_CONTEXT_ANONYMOUS, subject); - lc.login(); - return subject; - } catch (LoginException e) { - throw new CmsException("Cannot login as anonymous", e); - } - } - - // HTTP - static void logRequestHeaders(Log log, HttpServletRequest request) { - if (!log.isDebugEnabled()) - return; - for (Enumeration headerNames = request.getHeaderNames(); headerNames.hasMoreElements();) { - String headerName = headerNames.nextElement(); - Object headerValue = request.getHeader(headerName); - log.debug(headerName + ": " + headerValue); - } - log.debug(request.getRequestURI() + "\n"); - } + // static Subject anonymousLogin() { + // Subject subject = new Subject(); + // LoginContext lc; + // try { + // lc = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject); + // lc.login(); + // return subject; + // } catch (LoginException e) { + // throw new CmsException("Cannot login as anonymous", e); + // } + // } static void logFrameworkProperties(Log log) { BundleContext bc = getBundleContext(); @@ -149,6 +147,14 @@ class KernelUtils implements KernelConstants { // log.debug(key + "=" + bc.getProperty(key)); } + static void printSystemProperties(PrintStream out) { + TreeMap display = new TreeMap<>(); + for (Object key : System.getProperties().keySet()) + display.put(key.toString(), System.getProperty(key.toString())); + for (String key : display.keySet()) + out.println(key + "=" + display.get(key)); + } + static Session openAdminSession(Repository repository) { return openAdminSession(repository, null); } @@ -161,7 +167,7 @@ class KernelUtils implements KernelConstants { loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_DATA_ADMIN); loginContext.login(); } catch (LoginException e1) { - throw new CmsException("Could not login as data admin", e1); + throw new IllegalStateException("Could not login as data admin", e1); } finally { Thread.currentThread().setContextClassLoader(currentCl); } @@ -172,42 +178,66 @@ class KernelUtils implements KernelConstants { try { return repository.login(workspaceName); } catch (RepositoryException e) { - throw new CmsException("Cannot open admin session", e); + throw new IllegalStateException("Cannot open admin session", e); } } }); } + static void asyncOpen(ServiceTracker st) { + Runnable run = new Runnable() { + + @Override + public void run() { + st.open(); + } + }; + Activator.getInternalExecutorService().execute(run); +// new Thread(run, "Open service tracker " + st).start(); + } + /** - * @return the {@link BundleContext} of the {@link Bundle} which provided - * this class, never null. - * @throws CmsException - * if the related bundle is not active + * @return the {@link BundleContext} of the {@link Bundle} which provided this + * class, never null. + * @throws CmsException if the related bundle is not active */ - public static BundleContext getBundleContext(Class clzz) { - Bundle bundle = FrameworkUtil.getBundle(clzz); - BundleContext bc = bundle.getBundleContext(); - if (bc == null) - throw new CmsException("Bundle " + bundle.getSymbolicName() + " is not active"); - return bc; +// static BundleContext getBundleContext(Class clzz) { +//// Bundle bundle = FrameworkUtil.getBundle(clzz); +// BundleContext bc = Activator.getBundleContext(); +// if (bc == null) +// throw new CmsException("Bundle " + bundle.getSymbolicName() + " is not active"); +// return bc; +// } + + static BundleContext getBundleContext() { + return Activator.getBundleContext(); } - private static BundleContext getBundleContext() { - return getBundleContext(KernelUtils.class); + static boolean asBoolean(String value) { + if (value == null) + return false; + switch (value) { + case "true": + return true; + case "false": + return false; + default: + throw new IllegalArgumentException( + "Unsupported value for attribute " + DataModelNamespace.ABSTRACT + ": " + value); + } } private static URI safeUri(String uri) { if (uri == null) - throw new CmsException("URI cannot be null"); + throw new IllegalArgumentException("URI cannot be null"); try { return new URI(uri); } catch (URISyntaxException e) { - throw new CmsException("Dadly formatted URI " + uri, e); + throw new IllegalArgumentException("Badly formatted URI " + uri, e); } } - private KernelUtils() { }