1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.argeo.cms.ui.jcr.model;
17
18 import java.util.Map;
19
20 import javax.jcr.Node;
21 import javax.jcr.NodeIterator;
22 import javax.jcr.Repository;
23 import javax.jcr.RepositoryException;
24 import javax.jcr.RepositoryFactory;
25 import javax.jcr.Session;
26
27 import org.argeo.api.NodeUtils;
28 import org.argeo.api.security.Keyring;
29 import org.argeo.cms.ArgeoNames;
30 import org.argeo.cms.ui.jcr.RepositoryRegister;
31 import org.argeo.eclipse.ui.EclipseUiException;
32 import org.argeo.eclipse.ui.TreeParent;
33 import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
34
35
36
37
38
39
40
41
42
43
44
45
46 public class RepositoriesElem extends TreeParent implements ArgeoNames {
47 private final RepositoryRegister repositoryRegister;
48 private final RepositoryFactory repositoryFactory;
49
50
51
52
53
54 private final Session userSession;
55 private final Keyring keyring;
56
57 public RepositoriesElem(String name, RepositoryRegister repositoryRegister, RepositoryFactory repositoryFactory,
58 TreeParent parent, Session userSession, Keyring keyring) {
59 super(name);
60 this.repositoryRegister = repositoryRegister;
61 this.repositoryFactory = repositoryFactory;
62 this.userSession = userSession;
63 this.keyring = keyring;
64 }
65
66
67
68
69
70 @Override
71 public synchronized Object[] getChildren() {
72 if (isLoaded()) {
73 return super.getChildren();
74 } else {
75
76 Map<String, Repository> refRepos = repositoryRegister.getRepositories();
77 for (String name : refRepos.keySet()) {
78 Repository repository = refRepos.get(name);
79
80
81
82
83 super.addChild(new RepositoryElem(name, repository, this));
84 }
85
86
87 if (keyring != null) {
88 try {
89 addRemoteRepositories(keyring);
90 } catch (RepositoryException e) {
91 throw new EclipseUiException("Cannot browse remote repositories", e);
92 }
93 }
94 return super.getChildren();
95 }
96 }
97
98 protected void addRemoteRepositories(Keyring jcrKeyring) throws RepositoryException {
99 Node userHome = NodeUtils.getUserHome(userSession);
100 if (userHome != null && userHome.hasNode(ARGEO_REMOTE)) {
101 NodeIterator it = userHome.getNode(ARGEO_REMOTE).getNodes();
102 while (it.hasNext()) {
103 Node remoteNode = it.nextNode();
104 String uri = remoteNode.getProperty(ARGEO_URI).getString();
105 try {
106 RemoteRepositoryElem remoteRepositoryNode = new RemoteRepositoryElem(remoteNode.getName(),
107 repositoryFactory, uri, this, userSession, jcrKeyring, remoteNode.getPath());
108 super.addChild(remoteRepositoryNode);
109 } catch (Exception e) {
110 ErrorFeedback.show("Cannot add remote repository " + remoteNode, e);
111 }
112 }
113 }
114 }
115
116 public void registerNewRepository(String alias, Repository repository) {
117
118
119
120
121 }
122
123
124 public RepositoryRegister getRepositoryRegister() {
125 return repositoryRegister;
126 }
127 }