X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Fplugins%2Forg.argeo.jcr.ui.explorer%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fui%2Fexplorer%2Fcommands%2FAddRemoteRepository.java;h=e41edfca875163fa11fdd3353442e08f0e0fd1f2;hb=3a3d316af102ba410d1d9e6de349d0c8f7ac044f;hp=6b5dfa8b0c490bafaa37059d6b38098b7e9e962b;hpb=a093e5c849e70bbc754fa4462dbb6c2b59979973;p=lgpl%2Fargeo-commons.git diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java index 6b5dfa8b0..e41edfca8 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2012 Mathieu Baudier + * Copyright (C) 2007-2012 Argeo GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,12 +26,14 @@ import javax.jcr.SimpleCredentials; import org.argeo.ArgeoException; import org.argeo.eclipse.ui.ErrorFeedback; +import org.argeo.eclipse.ui.utils.CommandUtils; import org.argeo.jcr.ArgeoJcrConstants; import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.ArgeoTypes; import org.argeo.jcr.JcrUtils; -import org.argeo.jcr.security.JcrKeyring; +import org.argeo.jcr.UserJcrUtils; import org.argeo.jcr.ui.explorer.JcrExplorerConstants; +import org.argeo.util.security.Keyring; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -52,7 +54,6 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; -import org.osgi.framework.BundleContext; /** * Connect to a remote repository and, if successful publish it as an OSGi @@ -62,37 +63,15 @@ public class AddRemoteRepository extends AbstractHandler implements JcrExplorerConstants, ArgeoNames { private RepositoryFactory repositoryFactory; - private BundleContext bundleContext; - - private JcrKeyring keyring; + private Repository nodeRepository; + private Keyring keyring; public Object execute(ExecutionEvent event) throws ExecutionException { - String uri = null; - if (event.getParameters().containsKey(PARAM_REPOSITORY_URI)) { - // FIXME remove this - uri = event.getParameter(PARAM_REPOSITORY_URI); - if (uri == null) - return null; - - try { - Hashtable params = new Hashtable(); - params.put(ArgeoJcrConstants.JCR_REPOSITORY_URI, uri); - // by default we use the URI as alias - params.put(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS, uri); - Repository repository = repositoryFactory.getRepository(params); - bundleContext.registerService(Repository.class.getName(), - repository, params); - } catch (Exception e) { - ErrorFeedback.show("Cannot add remote repository " + uri, e); - } - } else { - RemoteRepositoryLoginDialog dlg = new RemoteRepositoryLoginDialog( - Display.getDefault().getActiveShell()); - if (dlg.open() == Dialog.OK) { - // uri = dlg.getUri(); - } + RemoteRepositoryLoginDialog dlg = new RemoteRepositoryLoginDialog( + Display.getDefault().getActiveShell()); + if (dlg.open() == Dialog.OK) { + CommandUtils.callCommand(Refresh.ID); } - return null; } @@ -100,12 +79,12 @@ public class AddRemoteRepository extends AbstractHandler implements this.repositoryFactory = repositoryFactory; } - public void setBundleContext(BundleContext bundleContext) { - this.bundleContext = bundleContext; + public void setKeyring(Keyring keyring) { + this.keyring = keyring; } - public void setKeyring(JcrKeyring keyring) { - this.keyring = keyring; + public void setNodeRepository(Repository nodeRepository) { + this.nodeRepository = nodeRepository; } class RemoteRepositoryLoginDialog extends TitleAreaDialog { @@ -134,7 +113,7 @@ public class AddRemoteRepository extends AbstractHandler implements setMessage("Login to remote repository", IMessageProvider.NONE); name = createLT(composite, "Name", "remoteRepository"); uri = createLT(composite, "URI", - "http://localhost:7070/org.argeo.jcr.webapp/remoting/node"); + "http://localhost:7070/data/jcr/node"); username = createLT(composite, "User", ""); password = createLP(composite, "Password"); @@ -162,9 +141,6 @@ public class AddRemoteRepository extends AbstractHandler implements Hashtable params = new Hashtable(); params.put(ArgeoJcrConstants.JCR_REPOSITORY_URI, checkedUriStr); - // by default we use the URI as alias - params.put(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS, - checkedUriStr); Repository repository = repositoryFactory.getRepository(params); if (username.getText().trim().equals("")) {// anonymous session = repository.login(); @@ -188,14 +164,10 @@ public class AddRemoteRepository extends AbstractHandler implements @Override protected void okPressed() { + Session nodeSession = null; try { - Session nodeSession = keyring.getSession(); - Node home = JcrUtils.getUserHome(nodeSession); - - // FIXME better deal with non existing home dir - if (home == null) - home = JcrUtils.createUserHomeIfNeeded(nodeSession, - nodeSession.getUserID()); + nodeSession = nodeRepository.login(); + Node home = UserJcrUtils.getUserHome(nodeSession); Node remote = home.hasNode(ARGEO_REMOTE) ? home .getNode(ARGEO_REMOTE) : home.addNode(ARGEO_REMOTE); @@ -207,11 +179,13 @@ public class AddRemoteRepository extends AbstractHandler implements ArgeoTypes.ARGEO_REMOTE_REPOSITORY); remoteRepository.setProperty(ARGEO_URI, uri.getText()); remoteRepository.setProperty(ARGEO_USER_ID, username.getText()); - Node pwd = remoteRepository.addNode(ARGEO_PASSWORD); - pwd.getSession().save(); - if (saveInKeyring.getSelection()) - keyring.set(pwd.getPath(), password.getText().toCharArray()); - keyring.getSession().save(); + nodeSession.save(); + if (saveInKeyring.getSelection()) { + String pwdPath = remoteRepository.getPath() + '/' + + ARGEO_PASSWORD; + keyring.set(pwdPath, password.getText().toCharArray()); + } + nodeSession.save(); MessageDialog.openInformation( getParentShell(), "Repository Added", @@ -221,6 +195,8 @@ public class AddRemoteRepository extends AbstractHandler implements super.okPressed(); } catch (Exception e) { ErrorFeedback.show("Cannot add remote repository", e); + } finally { + JcrUtils.logoutQuietly(nodeSession); } }