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() + RepoConstants
.REPOSITORIES_BASE_PATH
;
51 if (!nodeSession
.itemExists(reposPath
))
52 initializeModel(nodeSession
);
54 NodeIterator repos
= nodeSession
.getNode(reposPath
).getNodes();
55 while (repos
.hasNext()) {
56 Node repoNode
= repos
.nextNode();
57 if (repoNode
.isNodeType(ArgeoTypes
.ARGEO_REMOTE_REPOSITORY
)) {
58 String label
= repoNode
.isNodeType(NodeType
.MIX_TITLE
)
59 ? repoNode
.getProperty(Property
.JCR_TITLE
).getString() : repoNode
.getName();
60 repositories
.add(new RepoElem(repositoryFactory
, keyring
, repoNode
, label
));
63 } catch (RepositoryException e
) {
64 throw new SlcException("Cannot get base elements", e
);
66 return repositories
.toArray();
69 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
73 public Object
[] getChildren(Object parentElement
) {
74 if (parentElement
instanceof TreeParent
)
75 return ((TreeParent
) parentElement
).getChildren();
81 public Object
getParent(Object element
) {
82 if (element
instanceof TreeParent
)
83 return ((TreeParent
) element
).getParent();
88 public boolean hasChildren(Object element
) {
89 if (element
instanceof TreeParent
)
90 return ((TreeParent
) element
).hasChildren();
95 public void dispose() {
96 for (RepoElem repoElem
: repositories
)
98 repositories
= new ArrayList
<RepoElem
>();
99 JcrUtils
.logoutQuietly(nodeSession
);
102 private void initializeModel(Session nodeSession
) {
104 Node homeNode
= NodeUtils
.getUserHome(nodeSession
);
105 if (homeNode
== null) // anonymous
106 throw new SlcException("User must be authenticated.");
108 // make sure base directory is available
109 Node repos
= JcrUtils
.mkdirs(homeNode
, RepoConstants
.REPOSITORIES_BASE_PATH
,null);
110 if (nodeSession
.hasPendingChanges())
113 // register default local java repository
114 String alias
= RepoConstants
.DEFAULT_JAVA_REPOSITORY_ALIAS
;
115 Repository javaRepository
= NodeUtils
.getRepositoryByAlias(repositoryFactory
, alias
);
116 if (javaRepository
!= null) {
117 if (!repos
.hasNode(alias
)) {
118 Node repoNode
= repos
.addNode(alias
, ArgeoTypes
.ARGEO_REMOTE_REPOSITORY
);
119 repoNode
.setProperty(ArgeoNames
.ARGEO_URI
, "vm:///" + alias
);
120 repoNode
.addMixin(NodeType
.MIX_TITLE
);
121 repoNode
.setProperty(Property
.JCR_TITLE
, RepoConstants
.DEFAULT_JAVA_REPOSITORY_LABEL
);
125 } catch (RepositoryException e
) {
126 throw new SlcException("Cannot initialize model", e
);
130 /* DEPENDENCY INJECTION */
131 public void setRepositoryFactory(RepositoryFactory repositoryFactory
) {
132 this.repositoryFactory
= repositoryFactory
;
135 public void setKeyring(Keyring keyring
) {
136 this.keyring
= keyring
;