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
.JcrUtils
;
17 import org
.argeo
.node
.ArgeoNames
;
18 import org
.argeo
.node
.ArgeoTypes
;
19 import org
.argeo
.node
.NodeUtils
;
20 import org
.argeo
.node
.security
.Keyring
;
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
.eclipse
.jface
.viewers
.ITreeContentProvider
;
25 import org
.eclipse
.jface
.viewers
.Viewer
;
28 * Enables browsing in local and remote SLC software repositories. Keyring and
29 * repository factory must be injected
31 public class DistTreeContentProvider
implements ITreeContentProvider
{
32 private static final long serialVersionUID
= -7640840211717811421L;
34 /* DEPENDENCY INJECTION */
35 private RepositoryFactory repositoryFactory
;
36 private Keyring keyring
;
39 private Session nodeSession
;
40 List
<RepoElem
> repositories
= new ArrayList
<RepoElem
>();
42 public Object
[] getElements(Object input
) {
43 Repository nodeRepository
= (Repository
) input
;
45 if (nodeSession
!= null)
47 nodeSession
= nodeRepository
.login();
49 String reposPath
= NodeUtils
.getUserHome(nodeSession
).getPath()
50 + RepoConstants
.REPOSITORIES_BASE_PATH
;
52 if (!nodeSession
.itemExists(reposPath
))
53 initializeModel(nodeSession
);
55 NodeIterator repos
= nodeSession
.getNode(reposPath
).getNodes();
56 while (repos
.hasNext()) {
57 Node repoNode
= repos
.nextNode();
58 if (repoNode
.isNodeType(ArgeoTypes
.ARGEO_REMOTE_REPOSITORY
)) {
59 String label
= repoNode
.isNodeType(NodeType
.MIX_TITLE
) ? repoNode
60 .getProperty(Property
.JCR_TITLE
).getString()
62 repositories
.add(new RepoElem(repositoryFactory
, keyring
,
66 } catch (RepositoryException e
) {
67 throw new SlcException("Cannot get base elements", e
);
69 return repositories
.toArray();
72 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
76 public Object
[] getChildren(Object parentElement
) {
77 if (parentElement
instanceof TreeParent
)
78 return ((TreeParent
) parentElement
).getChildren();
84 public Object
getParent(Object element
) {
85 if (element
instanceof TreeParent
)
86 return ((TreeParent
) element
).getParent();
91 public boolean hasChildren(Object element
) {
92 if (element
instanceof TreeParent
)
93 return ((TreeParent
) element
).hasChildren();
98 public void dispose() {
99 for (RepoElem repoElem
: repositories
)
101 repositories
= new ArrayList
<RepoElem
>();
102 JcrUtils
.logoutQuietly(nodeSession
);
105 private void initializeModel(Session nodeSession
) {
107 Node homeNode
= NodeUtils
.getUserHome(nodeSession
);
108 if (homeNode
== null) // anonymous
109 throw new SlcException("User must be authenticated.");
111 // make sure base directory is available
112 Node repos
= JcrUtils
.mkdirs(nodeSession
, homeNode
.getPath()
113 + RepoConstants
.REPOSITORIES_BASE_PATH
);
114 if (nodeSession
.hasPendingChanges())
117 // register default local java repository
118 String alias
= RepoConstants
.DEFAULT_JAVA_REPOSITORY_ALIAS
;
119 Repository javaRepository
= NodeUtils
.getRepositoryByAlias(
120 repositoryFactory
, alias
);
121 if (javaRepository
!= null) {
122 if (!repos
.hasNode(alias
)) {
123 Node repoNode
= repos
.addNode(alias
,
124 ArgeoTypes
.ARGEO_REMOTE_REPOSITORY
);
125 repoNode
.setProperty(ArgeoNames
.ARGEO_URI
, "vm:///" + alias
);
126 repoNode
.addMixin(NodeType
.MIX_TITLE
);
127 repoNode
.setProperty(Property
.JCR_TITLE
,
128 RepoConstants
.DEFAULT_JAVA_REPOSITORY_LABEL
);
132 } catch (RepositoryException e
) {
133 throw new SlcException("Cannot initialize model", e
);
137 /* DEPENDENCY INJECTION */
138 public void setRepositoryFactory(RepositoryFactory repositoryFactory
) {
139 this.repositoryFactory
= repositoryFactory
;
142 public void setKeyring(Keyring keyring
) {
143 this.keyring
= keyring
;