X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fplugins%2Forg.argeo.jcr.ui.explorer%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fui%2Fexplorer%2Fmodel%2FRemoteRepositoryNode.java;h=5a67f92afef388e4d71a5f389f2b2cbffccb0e09;hb=409b6d70d9c29aa3d7dad8a0d6b17ce8458c108c;hp=b92540610894317bf1ba7c4357684e81a27c66b9;hpb=1d5afdce3e91054f07ddd3c98309c363b4cf1d46;p=lgpl%2Fargeo-commons.git diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RemoteRepositoryNode.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RemoteRepositoryNode.java index b92540610..5a67f92af 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RemoteRepositoryNode.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RemoteRepositoryNode.java @@ -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); + } + } + }