X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FKernelUtils.java;h=f267933cf5910de37b95213d30bab126c34cf8bd;hb=549ff25baf9371d910065303e22daf49321b517a;hp=1d81409115b9bcba31ae862117c18c2a728df571;hpb=e61a7a2dbff5e17fbf1c6c8bbd7fa687935d2897;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 1d8140911..f267933cf 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 @@ -8,7 +8,6 @@ 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.Hashtable; @@ -16,20 +15,9 @@ import java.util.Properties; import java.util.TreeMap; import java.util.TreeSet; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.security.auth.Subject; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; - -import org.apache.commons.logging.Log; -import org.argeo.cms.CmsException; -import org.argeo.node.DataModelNamespace; -import org.argeo.node.NodeConstants; -import org.osgi.framework.Bundle; +import org.argeo.api.cms.CmsLog; +import org.argeo.cms.osgi.DataModelNamespace; import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; import org.osgi.util.tracker.ServiceTracker; /** Package utilities */ @@ -44,7 +32,7 @@ class KernelUtils implements KernelConstants { .getInstance("JavaLoginConfig", uriParameter); javax.security.auth.login.Configuration.setConfiguration(jaasConfiguration); } catch (Exception e) { - throw new CmsException("Cannot set configuration " + jaasConfigurationUrl, e); + throw new IllegalArgumentException("Cannot set configuration " + jaasConfigurationUrl, e); } } @@ -61,7 +49,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); } @@ -73,7 +61,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); } } @@ -88,32 +76,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; @@ -136,7 +120,7 @@ class KernelUtils implements KernelConstants { // } // } - static void logFrameworkProperties(Log log) { + static void logFrameworkProperties(CmsLog log) { BundleContext bc = getBundleContext(); for (Object sysProp : new TreeSet(System.getProperties().keySet())) { log.debug(sysProp + "=" + bc.getProperty(sysProp.toString())); @@ -160,35 +144,67 @@ class KernelUtils implements KernelConstants { out.println(key + "=" + display.get(key)); } - static Session openAdminSession(Repository repository) { - return openAdminSession(repository, null); - } - - static Session openAdminSession(final Repository repository, final String workspaceName) { - ClassLoader currentCl = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(KernelUtils.class.getClassLoader()); - LoginContext loginContext; - try { - loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_DATA_ADMIN); - loginContext.login(); - } catch (LoginException e1) { - throw new CmsException("Could not login as data admin", e1); - } finally { - Thread.currentThread().setContextClassLoader(currentCl); - } - return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { - - @Override - public Session run() { - try { - return repository.login(workspaceName); - } catch (RepositoryException e) { - throw new CmsException("Cannot open admin session", e); - } - } - - }); - } +// static Session openAdminSession(Repository repository) { +// return openAdminSession(repository, null); +// } +// +// static Session openAdminSession(final Repository repository, final String workspaceName) { +// LoginContext loginContext = loginAsDataAdmin(); +// return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { +// +// @Override +// public Session run() { +// try { +// return repository.login(workspaceName); +// } catch (RepositoryException e) { +// throw new IllegalStateException("Cannot open admin session", e); +// } finally { +// try { +// loginContext.logout(); +// } catch (LoginException e) { +// throw new IllegalStateException(e); +// } +// } +// } +// +// }); +// } +// +// static LoginContext loginAsDataAdmin() { +// ClassLoader currentCl = Thread.currentThread().getContextClassLoader(); +// Thread.currentThread().setContextClassLoader(KernelUtils.class.getClassLoader()); +// LoginContext loginContext; +// try { +// loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_DATA_ADMIN); +// loginContext.login(); +// } catch (LoginException e1) { +// throw new IllegalStateException("Could not login as data admin", e1); +// } finally { +// Thread.currentThread().setContextClassLoader(currentCl); +// } +// return loginContext; +// } + +// static void doAsDataAdmin(Runnable action) { +// LoginContext loginContext = loginAsDataAdmin(); +// Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { +// +// @Override +// public Void run() { +// try { +// action.run(); +// return null; +// } finally { +// try { +// loginContext.logout(); +// } catch (LoginException e) { +// throw new IllegalStateException(e); +// } +// } +// } +// +// }); +// } static void asyncOpen(ServiceTracker st) { Runnable run = new Runnable() { @@ -198,25 +214,12 @@ class KernelUtils implements KernelConstants { st.open(); } }; - 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 - */ - 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; + Activator.getInternalExecutorService().execute(run); +// new Thread(run, "Open service tracker " + st).start(); } static BundleContext getBundleContext() { - return getBundleContext(KernelUtils.class); + return Activator.getBundleContext(); } static boolean asBoolean(String value) { @@ -228,18 +231,18 @@ class KernelUtils implements KernelConstants { case "false": return false; default: - throw new CmsException("Unsupported value for attribute " + DataModelNamespace.ABSTRACT - + ": " + value); + 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); } }