X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fserver%2Fjackrabbit%2FJackrabbitContainer.java;h=6ec6065a542b7f2f3d8f422b9c6bfb9c7bef3609;hb=fea161ce3d77b81ae6ee0a7895f7bd64b4cb618e;hp=87738a5cdc5dbb2b589652b502f6988136561488;hpb=9ecac0dc0810a3cabf8eb75951f1b7a3c149ae94;p=lgpl%2Fargeo-commons.git 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 87738a5cd..6ec6065a5 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 @@ -77,6 +77,8 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, /** Namespaces to register: key is prefix, value namespace */ private Map namespaces = new HashMap(); + private Boolean autocreateWorkspaces = false; + public void afterPropertiesSet() throws Exception { // Load cnds as resources for (String resUrl : cndFiles) { @@ -158,7 +160,15 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, public Session login(Credentials credentials, String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - Session session = repository.login(credentials, workspaceName); + Session session; + try { + session = repository.login(credentials, workspaceName); + } catch (NoSuchWorkspaceException e) { + if (autocreateWorkspaces) + session = createWorkspaceAndLogsIn(credentials, workspaceName); + else + throw e; + } processNewSession(session); return session; } @@ -172,7 +182,15 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, public Session login(String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - Session session = repository.login(workspaceName); + Session session; + try { + session = repository.login(workspaceName); + } catch (NoSuchWorkspaceException e) { + if (autocreateWorkspaces) + session = createWorkspaceAndLogsIn(null, workspaceName); + else + throw e; + } processNewSession(session); return session; } @@ -190,6 +208,20 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, } } + /** + * Logs in to the default workspace, creates the required workspace, logs + * out, logs in to the required workspace. + */ + protected Session createWorkspaceAndLogsIn(Credentials credentials, + String workspaceName) throws RepositoryException { + if (workspaceName == null) + throw new ArgeoException("No workspace specified."); + Session session = repository.login(credentials); + session.getWorkspace().createWorkspace(workspaceName); + session.logout(); + return repository.login(credentials, workspaceName); + } + public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; }