1 package org
.argeo
.cms
.ui
.jcr
.model
;
6 import javax
.jcr
.NodeIterator
;
7 import javax
.jcr
.Repository
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.RepositoryFactory
;
10 import javax
.jcr
.Session
;
12 import org
.argeo
.cms
.ArgeoNames
;
13 import org
.argeo
.cms
.jcr
.CmsJcrUtils
;
14 import org
.argeo
.cms
.security
.Keyring
;
15 import org
.argeo
.cms
.ui
.jcr
.RepositoryRegister
;
16 import org
.argeo
.cms
.ux
.widgets
.TreeParent
;
17 import org
.argeo
.eclipse
.ui
.EclipseUiException
;
18 import org
.argeo
.eclipse
.ui
.dialogs
.ErrorFeedback
;
21 * UI Tree component that implements the Argeo abstraction of a
22 * {@link RepositoryFactory} that enable a user to "mount" various repositories
23 * in a single Tree like View. It is usually meant to be at the root of the UI
24 * Tree and thus {@link #getParent()} method will return null.
26 * The {@link RepositoryFactory} is injected at instantiation time and must be
27 * use get or register new {@link Repository} objects upon which a reference is
31 public class RepositoriesElem
extends TreeParent
implements ArgeoNames
{
32 private final RepositoryRegister repositoryRegister
;
33 private final RepositoryFactory repositoryFactory
;
36 * A session of the logged in user on the default workspace of the node
39 private final Session userSession
;
40 private final Keyring keyring
;
42 public RepositoriesElem(String name
, RepositoryRegister repositoryRegister
, RepositoryFactory repositoryFactory
,
43 TreeParent parent
, Session userSession
, Keyring keyring
) {
45 this.repositoryRegister
= repositoryRegister
;
46 this.repositoryFactory
= repositoryFactory
;
47 this.userSession
= userSession
;
48 this.keyring
= keyring
;
52 * Override normal behavior to initialize the various repositories only at
56 public synchronized Object
[] getChildren() {
58 return super.getChildren();
60 // initialize current object
61 Map
<String
, Repository
> refRepos
= repositoryRegister
.getRepositories();
62 for (String name
: refRepos
.keySet()) {
63 Repository repository
= refRepos
.get(name
);
64 // if (repository instanceof MaintainedRepository)
65 // super.addChild(new MaintainedRepositoryElem(name,
66 // repository, this));
68 super.addChild(new RepositoryElem(name
, repository
, this));
72 if (keyring
!= null) {
74 addRemoteRepositories(keyring
);
75 } catch (RepositoryException e
) {
76 throw new EclipseUiException("Cannot browse remote repositories", e
);
79 return super.getChildren();
83 protected void addRemoteRepositories(Keyring jcrKeyring
) throws RepositoryException
{
84 Node userHome
= CmsJcrUtils
.getUserHome(userSession
);
85 if (userHome
!= null && userHome
.hasNode(ARGEO_REMOTE
)) {
86 NodeIterator it
= userHome
.getNode(ARGEO_REMOTE
).getNodes();
87 while (it
.hasNext()) {
88 Node remoteNode
= it
.nextNode();
89 String uri
= remoteNode
.getProperty(ARGEO_URI
).getString();
91 RemoteRepositoryElem remoteRepositoryNode
= new RemoteRepositoryElem(remoteNode
.getName(),
92 repositoryFactory
, uri
, this, userSession
, jcrKeyring
, remoteNode
.getPath());
93 super.addChild(remoteRepositoryNode
);
94 } catch (Exception e
) {
95 ErrorFeedback
.show("Cannot add remote repository " + remoteNode
, e
);
101 public void registerNewRepository(String alias
, Repository repository
) {
102 // TODO: implement this
103 // Create a new RepositoryNode Object
105 // super.addChild(new RepositoriesNode(...));
108 /** Returns the {@link RepositoryRegister} wrapped by this object. */
109 public RepositoryRegister
getRepositoryRegister() {
110 return repositoryRegister
;