From: Mathieu Baudier Date: Wed, 12 Jan 2011 12:49:20 +0000 (+0000) Subject: Improve JCR X-Git-Tag: argeo-commons-2.1.30~1540 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=833d3535cdc4b3c1d9dca4743a346acc232ba67d;p=lgpl%2Fargeo-commons.git Improve JCR git-svn-id: https://svn.argeo.org/commons/trunk@4009 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/ArgeoException.java b/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/ArgeoException.java index 563a680b1..a90c16a0f 100644 --- a/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/ArgeoException.java +++ b/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/ArgeoException.java @@ -16,19 +16,24 @@ package org.argeo; +/** Argeo Commons specific exception. */ public class ArgeoException extends RuntimeException { private static final long serialVersionUID = 1L; + /** Creates an exception with a message. */ public ArgeoException(String message) { super(message); } - public ArgeoException(Throwable cause) { - super(cause); + /** Creates an exception with a message and a root cause. */ + public ArgeoException(String message, Throwable e) { + super(message, e); } - public ArgeoException(String message, Throwable cause) { - super(message, cause); + /** @deprecated use {@link #ArgeoException(String, Throwable)} instead. */ + @Deprecated + public ArgeoException(Throwable cause) { + super(cause); } } diff --git a/security/runtime/org.argeo.security.core/pom.xml b/security/runtime/org.argeo.security.core/pom.xml index 37c7390ec..8f370aaa7 100644 --- a/security/runtime/org.argeo.security.core/pom.xml +++ b/security/runtime/org.argeo.security.core/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 org.argeo.commons.security @@ -56,18 +57,16 @@ - + org.apache.commons com.springsource.org.apache.commons.lang - org.argeo.dep.osgi - org.argeo.dep.osgi.springframework.ldap + org.argeo.dep.osgi + org.argeo.dep.osgi.springframework.ldap org.springframework @@ -92,7 +91,7 @@ com.springsource.slf4j.log4j - + org.codehaus.jackson com.springsource.org.codehaus.jackson.mapper diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java index ef96b3595..83c144c8c 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java @@ -18,6 +18,8 @@ package org.argeo.server.jackrabbit; import java.io.File; import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; import javax.jcr.Credentials; import javax.jcr.LoginException; @@ -31,9 +33,11 @@ import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.jackrabbit.commons.NamespaceHelper; import org.apache.jackrabbit.core.RepositoryImpl; import org.apache.jackrabbit.core.TransientRepository; import org.apache.jackrabbit.core.config.RepositoryConfig; +import org.argeo.ArgeoException; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.io.Resource; @@ -53,6 +57,9 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, private Repository repository; + /** Namespaces to register: key is prefix, value namespace */ + private Map namespaces = new HashMap(); + public void afterPropertiesSet() throws Exception { if (inMemory && homeDirectory.exists()) { FileUtils.deleteDirectory(homeDirectory); @@ -108,23 +115,40 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, } public Session login() throws LoginException, RepositoryException { - return repository.login(); + Session session = repository.login(); + processNewSession(session); + return session; } public Session login(Credentials credentials, String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - return repository.login(credentials, workspaceName); + Session session = repository.login(credentials, workspaceName); + processNewSession(session); + return session; } public Session login(Credentials credentials) throws LoginException, RepositoryException { - return repository.login(credentials); + Session session = repository.login(credentials); + processNewSession(session); + return session; } public Session login(String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - return repository.login(workspaceName); + Session session = repository.login(workspaceName); + processNewSession(session); + return session; + } + + protected void processNewSession(Session session) { + try { + NamespaceHelper namespaceHelper = new NamespaceHelper(session); + namespaceHelper.registerNamespaces(namespaces); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot process new session", e); + } } public boolean isStandardDescriptor(String key) { @@ -156,4 +180,8 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, this.inMemory = inMemory; } + public void setNamespaces(Map namespaces) { + this.namespaces = namespaces; + } + } diff --git a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java index b89a2845c..4e197d5fb 100644 --- a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java +++ b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java @@ -90,7 +90,14 @@ public class JcrUtils { return dateAsPath(cal, false); } - /** The provided data as a path ('/' at the end, not the beginning) */ + /** + * The provided data as a path ('/' at the end, not the beginning) + * + * @param cal + * the date + * @param addHour + * whether to add hour as well + */ public static String dateAsPath(Calendar cal, Boolean addHour) { StringBuffer buf = new StringBuffer(14); buf.append('Y').append(cal.get(Calendar.YEAR));// 5 diff --git a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/ThreadBoundJcrSessionFactory.java b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/ThreadBoundJcrSessionFactory.java index b94b9bf16..ed2857ad5 100644 --- a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/ThreadBoundJcrSessionFactory.java +++ b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/ThreadBoundJcrSessionFactory.java @@ -34,6 +34,7 @@ import org.argeo.ArgeoException; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.FactoryBean; +/** Proxy JCR sessions and attach them to calling threads. */ public class ThreadBoundJcrSessionFactory implements FactoryBean, DisposableBean { private final static Log log = LogFactory @@ -47,6 +48,9 @@ public class ThreadBoundJcrSessionFactory implements FactoryBean, private boolean destroying = false; private final Session proxiedSession; + private String defaultUsername = "demo"; + private String defaultPassword = "demo"; + public ThreadBoundJcrSessionFactory() { Class[] interfaces = { Session.class }; proxiedSession = (Session) Proxy.newProxyInstance(getClass() @@ -79,8 +83,8 @@ public class ThreadBoundJcrSessionFactory implements FactoryBean, protected Session login() { try { - SimpleCredentials sc = new SimpleCredentials("demo", "demo" - .toCharArray()); + SimpleCredentials sc = new SimpleCredentials(defaultUsername, + defaultPassword.toCharArray()); Session sess = repository.login(sc); if (log.isTraceEnabled()) log.trace("Log in to JCR session " + sess + "; userId=" @@ -121,4 +125,12 @@ public class ThreadBoundJcrSessionFactory implements FactoryBean, this.repository = repository; } + public void setDefaultUsername(String defaultUsername) { + this.defaultUsername = defaultUsername; + } + + public void setDefaultPassword(String defaultPassword) { + this.defaultPassword = defaultPassword; + } + }