1 package org
.argeo
.slc
.client
.ui
.dist
.controllers
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.NodeIterator
;
8 import javax
.jcr
.Property
;
9 import javax
.jcr
.Repository
;
10 import javax
.jcr
.RepositoryException
;
11 import javax
.jcr
.RepositoryFactory
;
12 import javax
.jcr
.Session
;
13 import javax
.jcr
.nodetype
.NodeType
;
15 import org
.argeo
.jcr
.ArgeoJcrUtils
;
16 import org
.argeo
.jcr
.ArgeoNames
;
17 import org
.argeo
.jcr
.ArgeoTypes
;
18 import org
.argeo
.jcr
.JcrUtils
;
19 import org
.argeo
.jcr
.UserJcrUtils
;
20 import org
.argeo
.slc
.SlcException
;
21 import org
.argeo
.slc
.client
.ui
.dist
.model
.DistParentElem
;
22 import org
.argeo
.slc
.client
.ui
.dist
.model
.RepoElem
;
23 import org
.argeo
.slc
.client
.ui
.dist
.model
.WorkspaceElem
;
24 import org
.argeo
.slc
.repo
.RepoConstants
;
25 import org
.argeo
.util
.security
.Keyring
;
26 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
27 import org
.eclipse
.jface
.viewers
.Viewer
;
30 * Enables browsing in local and remote slc distribution repositories. Keyring
31 * and repository factory must be injected
33 public class DistTreeContentProvider
implements ITreeContentProvider
{
34 private Session nodeSession
;
35 List
<RepoElem
> repositories
= new ArrayList
<RepoElem
>();
37 private RepositoryFactory repositoryFactory
;
38 private Keyring keyring
;
40 public Object
[] getElements(Object input
) {
41 Repository nodeRepository
= (Repository
) input
;
43 if (nodeSession
!= null)
45 nodeSession
= nodeRepository
.login();
47 String reposPath
= UserJcrUtils
.getUserHome(nodeSession
).getPath()
48 + RepoConstants
.REPOSITORIES_BASE_PATH
;
50 if (!nodeSession
.itemExists(reposPath
))
51 initializeModel(nodeSession
);
53 NodeIterator repos
= nodeSession
.getNode(reposPath
).getNodes();
54 while (repos
.hasNext()) {
55 Node repoNode
= repos
.nextNode();
56 if (repoNode
.isNodeType(ArgeoTypes
.ARGEO_REMOTE_REPOSITORY
))
57 repositories
.add(new RepoElem(repoNode
, repositoryFactory
,
60 } catch (RepositoryException e
) {
61 throw new SlcException("Cannot get base elements", e
);
63 return repositories
.toArray();
66 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
69 public Object
[] getChildren(Object parentElement
) {
70 if (parentElement
instanceof DistParentElem
) {
71 return ((DistParentElem
) parentElement
).getChildren();
72 } else if (parentElement
instanceof WorkspaceElem
) {
73 return ((WorkspaceElem
) parentElement
).getChildren();
78 public Object
getParent(Object element
) {
79 // TODO register repo elem in distribution elem?
83 public boolean hasChildren(Object element
) {
84 if (element
instanceof WorkspaceElem
)
86 else if (element
instanceof DistParentElem
)
92 public void dispose() {
93 for (RepoElem repoElem
: repositories
)
95 repositories
= new ArrayList
<RepoElem
>();
96 JcrUtils
.logoutQuietly(nodeSession
);
99 private void initializeModel(Session nodeSession
) {
102 Node homeNode
= UserJcrUtils
.getUserHome(nodeSession
);
103 if (homeNode
== null) // anonymous
104 throw new SlcException("User must be authenticated.");
106 // make sure base directory is available
107 Node repos
= JcrUtils
.mkdirs(nodeSession
, homeNode
.getPath()
108 + RepoConstants
.REPOSITORIES_BASE_PATH
);
111 // register default local java repository
112 String alias
= RepoConstants
.DEFAULT_JAVA_REPOSITORY_ALIAS
;
113 Repository javaRepository
= ArgeoJcrUtils
.getRepositoryByAlias(
114 repositoryFactory
, alias
);
115 if (javaRepository
!= null) {
116 if (!repos
.hasNode(alias
)) {
117 Node repoNode
= repos
.addNode(alias
,
118 ArgeoTypes
.ARGEO_REMOTE_REPOSITORY
);
119 repoNode
.setProperty(ArgeoNames
.ARGEO_URI
, "vm:///" + alias
);
120 repoNode
.addMixin(NodeType
.MIX_TITLE
);
121 repoNode
.setProperty(Property
.JCR_TITLE
,
122 RepoConstants
.DEFAULT_JAVA_REPOSITORY_LABEL
);
126 } catch (RepositoryException e
) {
127 throw new SlcException("Cannot initialize model", e
);
132 * DEPENDENCY INJECTION
134 public void setRepositoryFactory(RepositoryFactory repositoryFactory
) {
135 this.repositoryFactory
= repositoryFactory
;
138 public void setKeyring(Keyring keyring
) {
139 this.keyring
= keyring
;