1 package org
.argeo
.slc
.client
.ui
.dist
.controllers
;
3 import javax
.jcr
.Credentials
;
4 import javax
.jcr
.NoSuchWorkspaceException
;
6 import javax
.jcr
.Repository
;
7 import javax
.jcr
.RepositoryException
;
8 import javax
.jcr
.RepositoryFactory
;
9 import javax
.jcr
.Session
;
11 import org
.argeo
.jcr
.JcrUtils
;
12 import org
.argeo
.slc
.SlcException
;
13 import org
.argeo
.slc
.repo
.RepoUtils
;
14 import org
.argeo
.util
.security
.Keyring
;
17 * Provide shortcuts to retrieve sessions, repositories and workspaces that are
18 * persisted in the current user node using path only.
20 public class DistSessionFactory
{
22 /* DEPENDENCY INJECTION */
23 private RepositoryFactory repositoryFactory
;
24 private Keyring keyring
;
25 private Repository nodeRepository
;
28 * Returns a new session on the given workspace. This session *must* be
29 * disposed by the caller. If the workspace does not exist and
30 * createIfNeeded==true, tries to create it
33 public Session
getSessionFromWorkspacePath(String path
,
34 boolean createIfNeeded
) {
35 Session nodeSession
= null;
37 nodeSession
= nodeRepository
.login();
38 Node localWksp
= nodeSession
.getNode(path
);
39 Repository repository
= RepoUtils
.getRepository(repositoryFactory
,
40 keyring
, localWksp
.getParent());
41 Credentials credentials
= RepoUtils
.getRepositoryCredentials(
42 keyring
, localWksp
.getParent());
44 String wkspName
= JcrUtils
.lastPathElement(path
);
45 Session session
= null;
47 session
= repository
.login(credentials
, wkspName
);
48 } catch (NoSuchWorkspaceException e
) {
50 Session defaultSession
= repository
.login(credentials
);
52 defaultSession
.getWorkspace().createWorkspace(wkspName
);
53 } catch (Exception e1
) {
54 throw new SlcException("Cannot create new workspace "
57 JcrUtils
.logoutQuietly(defaultSession
);
59 session
= repository
.login(credentials
, wkspName
);
61 throw new SlcException("Workspace" + wkspName
62 + "does not exists and should not be created", e
);
65 } catch (RepositoryException e
) {
66 throw new SlcException("cannot create session" + " for workspace "
69 JcrUtils
.logoutQuietly(nodeSession
);
74 * DEPENDENCY INJECTION
76 public void setRepositoryFactory(RepositoryFactory repositoryFactory
) {
77 this.repositoryFactory
= repositoryFactory
;
80 public void setKeyring(Keyring keyring
) {
81 this.keyring
= keyring
;
84 public void setRepository(Repository nodeRepository
) {
85 this.nodeRepository
= nodeRepository
;