]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/model/RemoteRepositoryElem.java
Major refactoring of Argeo CMS UI
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / jcr / model / RemoteRepositoryElem.java
1 package org.argeo.cms.ui.jcr.model;
2
3 import java.util.Arrays;
4
5 import javax.jcr.Node;
6 import javax.jcr.Repository;
7 import javax.jcr.RepositoryException;
8 import javax.jcr.RepositoryFactory;
9 import javax.jcr.Session;
10 import javax.jcr.SimpleCredentials;
11
12 import org.argeo.api.security.Keyring;
13 import org.argeo.cms.ArgeoNames;
14 import org.argeo.cms.jcr.CmsJcrUtils;
15 import org.argeo.eclipse.ui.EclipseUiException;
16 import org.argeo.eclipse.ui.TreeParent;
17
18 /** Root of a remote repository */
19 public class RemoteRepositoryElem extends RepositoryElem {
20 private final Keyring keyring;
21 /**
22 * A session of the logged in user on the default workspace of the node
23 * repository.
24 */
25 private final Session userSession;
26 private final String remoteNodePath;
27
28 private final RepositoryFactory repositoryFactory;
29 private final String uri;
30
31 public RemoteRepositoryElem(String alias, RepositoryFactory repositoryFactory, String uri, TreeParent parent,
32 Session userSession, Keyring keyring, String remoteNodePath) {
33 super(alias, null, parent);
34 this.repositoryFactory = repositoryFactory;
35 this.uri = uri;
36 this.keyring = keyring;
37 this.userSession = userSession;
38 this.remoteNodePath = remoteNodePath;
39 }
40
41 @Override
42 protected Session repositoryLogin(String workspaceName) throws RepositoryException {
43 Node remoteRepository = userSession.getNode(remoteNodePath);
44 String userID = remoteRepository.getProperty(ArgeoNames.ARGEO_USER_ID).getString();
45 if (userID.trim().equals("")) {
46 return getRepository().login(workspaceName);
47 } else {
48 String pwdPath = remoteRepository.getPath() + '/' + ArgeoNames.ARGEO_PASSWORD;
49 char[] password = keyring.getAsChars(pwdPath);
50 try {
51 SimpleCredentials credentials = new SimpleCredentials(userID, password);
52 return getRepository().login(credentials, workspaceName);
53 } finally {
54 Arrays.fill(password, 0, password.length, ' ');
55 }
56 }
57 }
58
59 @Override
60 public Repository getRepository() {
61 if (repository == null)
62 repository = CmsJcrUtils.getRepositoryByUri(repositoryFactory, uri);
63 return super.getRepository();
64 }
65
66 public void remove() {
67 try {
68 Node remoteNode = userSession.getNode(remoteNodePath);
69 remoteNode.remove();
70 remoteNode.getSession().save();
71 } catch (RepositoryException e) {
72 throw new EclipseUiException("Cannot remove " + remoteNodePath, e);
73 }
74 }
75
76 }