]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RemoteRepositoryNode.java
Connect later to remote repository in JCR explorer
[lgpl/argeo-commons.git] / server / plugins / org.argeo.jcr.ui.explorer / src / main / java / org / argeo / jcr / ui / explorer / model / RemoteRepositoryNode.java
index b92540610894317bf1ba7c4357684e81a27c66b9..5a67f92afef388e4d71a5f389f2b2cbffccb0e09 100644 (file)
@@ -20,33 +20,50 @@ import java.util.Arrays;
 import javax.jcr.Node;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
+import javax.jcr.RepositoryFactory;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
 
+import org.argeo.ArgeoException;
 import org.argeo.eclipse.ui.TreeParent;
+import org.argeo.jcr.ArgeoJcrUtils;
 import org.argeo.jcr.ArgeoNames;
-import org.argeo.jcr.security.JcrKeyring;
+import org.argeo.util.security.Keyring;
 
 /** Root of a remote repository */
 public class RemoteRepositoryNode extends RepositoryNode {
-       private JcrKeyring jcrKeyring;
-       private String remoteNodePath;
+       private final Keyring keyring;
+       /**
+        * A session of the logged in user on the default workspace of the node
+        * repository.
+        */
+       private final Session userSession;
+       private final String remoteNodePath;
 
-       public RemoteRepositoryNode(String alias, Repository repository,
-                       TreeParent parent, JcrKeyring jcrKeyring, String remoteNodePath) {
-               super(alias, repository, parent);
-               this.jcrKeyring = jcrKeyring;
+       private final RepositoryFactory repositoryFactory;
+       private final String uri;
+
+       public RemoteRepositoryNode(String alias,
+                       RepositoryFactory repositoryFactory, String uri, TreeParent parent,
+                       Session userSession, Keyring keyring, String remoteNodePath) {
+               super(alias, null, parent);
+               this.repositoryFactory = repositoryFactory;
+               this.uri = uri;
+               this.keyring = keyring;
+               this.userSession = userSession;
                this.remoteNodePath = remoteNodePath;
        }
 
        @Override
        protected Session repositoryLogin(String workspaceName)
                        throws RepositoryException {
-               Node remoteNode = jcrKeyring.getSession().getNode(remoteNodePath);
-               String userID = remoteNode.getProperty(ArgeoNames.ARGEO_USER_ID)
+               Node remoteRepository = userSession.getNode(remoteNodePath);
+               String userID = remoteRepository.getProperty(ArgeoNames.ARGEO_USER_ID)
                                .getString();
-               char[] password = jcrKeyring.getAsChars(remoteNodePath + "/"
-                               + ArgeoNames.ARGEO_PASSWORD);
+               String pwdPath = remoteRepository.getPath() + '/'
+                               + ArgeoNames.ARGEO_PASSWORD;
+               char[] password = keyring.getAsChars(pwdPath);
+
                try {
                        SimpleCredentials credentials = new SimpleCredentials(userID,
                                        password);
@@ -56,4 +73,22 @@ public class RemoteRepositoryNode extends RepositoryNode {
                }
        }
 
+       @Override
+       public Repository getRepository() {
+               if (repository == null)
+                       repository = ArgeoJcrUtils.getRepositoryByUri(repositoryFactory,
+                                       uri);
+               return super.getRepository();
+       }
+
+       public void remove() {
+               try {
+                       Node remoteNode = userSession.getNode(remoteNodePath);
+                       remoteNode.remove();
+                       remoteNode.getSession().save();
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot remove " + remoteNodePath, e);
+               }
+       }
+
 }