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
.eclipse
.ui
.TreeParent
;
16 import org
.argeo
.jcr
.ArgeoJcrUtils
;
17 import org
.argeo
.jcr
.ArgeoNames
;
18 import org
.argeo
.jcr
.ArgeoTypes
;
19 import org
.argeo
.jcr
.JcrUtils
;
20 import org
.argeo
.jcr
.UserJcrUtils
;
21 import org
.argeo
.slc
.SlcException
;
22 import org
.argeo
.slc
.client
.ui
.dist
.model
.RepoElem
;
23 import org
.argeo
.slc
.repo
.RepoConstants
;
24 import org
.argeo
.util
.security
.Keyring
;
25 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
26 import org
.eclipse
.jface
.viewers
.Viewer
;
29 * Enables browsing in local and remote SLC software repositories. Keyring and
30 * repository factory must be injected
32 public class DistTreeContentProvider
implements ITreeContentProvider
{
33 private Session nodeSession
;
34 List
<RepoElem
> repositories
= new ArrayList
<RepoElem
>();
36 /* DEPENDENCY INJECTION */
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 String label
= repoNode
.isNodeType(NodeType
.MIX_TITLE
) ? repoNode
58 .getProperty(Property
.JCR_TITLE
).getString()
60 repositories
.add(new RepoElem(repositoryFactory
, keyring
,
64 } catch (RepositoryException e
) {
65 throw new SlcException("Cannot get base elements", e
);
67 return repositories
.toArray();
70 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
74 public Object
[] getChildren(Object parentElement
) {
75 if (parentElement
instanceof TreeParent
)
76 return ((TreeParent
) parentElement
).getChildren();
82 public Object
getParent(Object element
) {
83 if (element
instanceof TreeParent
)
84 return ((TreeParent
) element
).getParent();
89 public boolean hasChildren(Object element
) {
90 if (element
instanceof TreeParent
)
91 return ((TreeParent
) element
).hasChildren();
96 public void dispose() {
97 for (RepoElem repoElem
: repositories
)
99 repositories
= new ArrayList
<RepoElem
>();
100 JcrUtils
.logoutQuietly(nodeSession
);
103 private void initializeModel(Session nodeSession
) {
106 Node homeNode
= UserJcrUtils
.getUserHome(nodeSession
);
107 if (homeNode
== null) // anonymous
108 throw new SlcException("User must be authenticated.");
110 // make sure base directory is available
111 Node repos
= JcrUtils
.mkdirs(nodeSession
, homeNode
.getPath()
112 + RepoConstants
.REPOSITORIES_BASE_PATH
);
115 // register default local java repository
116 String alias
= RepoConstants
.DEFAULT_JAVA_REPOSITORY_ALIAS
;
117 Repository javaRepository
= ArgeoJcrUtils
.getRepositoryByAlias(
118 repositoryFactory
, alias
);
119 if (javaRepository
!= null) {
120 if (!repos
.hasNode(alias
)) {
121 Node repoNode
= repos
.addNode(alias
,
122 ArgeoTypes
.ARGEO_REMOTE_REPOSITORY
);
123 repoNode
.setProperty(ArgeoNames
.ARGEO_URI
, "vm:///" + alias
);
124 repoNode
.addMixin(NodeType
.MIX_TITLE
);
125 repoNode
.setProperty(Property
.JCR_TITLE
,
126 RepoConstants
.DEFAULT_JAVA_REPOSITORY_LABEL
);
130 } catch (RepositoryException e
) {
131 throw new SlcException("Cannot initialize model", e
);
135 /* DEPENDENCY INJECTION */
136 public void setRepositoryFactory(RepositoryFactory repositoryFactory
) {
137 this.repositoryFactory
= repositoryFactory
;
140 public void setKeyring(Keyring keyring
) {
141 this.keyring
= keyring
;