--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.slc.client.ui.dist.commands;
+
+import java.net.URI;
+import java.util.Hashtable;
+
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryFactory;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.nodetype.NodeType;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.ErrorFeedback;
+import org.argeo.jcr.ArgeoJcrConstants;
+import org.argeo.jcr.ArgeoJcrUtils;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.ArgeoTypes;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
+import org.argeo.slc.jcr.SlcNames;
+import org.argeo.slc.repo.RepoConstants;
+import org.argeo.util.security.Keyring;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Connect to a remote repository.
+ */
+public class AddRepository extends AbstractHandler implements ArgeoNames,
+ SlcNames {
+
+ private RepositoryFactory repositoryFactory;
+ private Repository nodeRepository;
+ private Keyring keyring;
+
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ RemoteRepositoryLoginDialog dlg = new RemoteRepositoryLoginDialog(
+ Display.getDefault().getActiveShell());
+ if (dlg.open() == Dialog.OK) {
+ }
+ return null;
+ }
+
+ public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
+ this.repositoryFactory = repositoryFactory;
+ }
+
+ public void setKeyring(Keyring keyring) {
+ this.keyring = keyring;
+ }
+
+ public void setNodeRepository(Repository nodeRepository) {
+ this.nodeRepository = nodeRepository;
+ }
+
+ class RemoteRepositoryLoginDialog extends TitleAreaDialog {
+ private Text name;
+ private Text uri;
+ private Text username;
+ private Text password;
+ private Button saveInKeyring;
+
+ public RemoteRepositoryLoginDialog(Shell parentShell) {
+ super(parentShell);
+ }
+
+ protected Point getInitialSize() {
+ return new Point(600, 400);
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite dialogarea = (Composite) super.createDialogArea(parent);
+ dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
+ true));
+ Composite composite = new Composite(dialogarea, SWT.NONE);
+ composite.setLayout(new GridLayout(2, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
+ false));
+ setMessage("Login to remote repository", IMessageProvider.NONE);
+ name = createLT(composite, "Name", "Argeo.org Java Repository");
+ uri = createLT(composite, "URI",
+ "https://repo.argeo.org/org.argeo.jcr.webapp/remoting/java");
+ username = createLT(composite, "User", "");
+ password = createLP(composite, "Password");
+
+ saveInKeyring = createLC(composite, "Remember password", false);
+ parent.pack();
+ return composite;
+ }
+
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ super.createButtonsForButtonBar(parent);
+ Button test = createButton(parent, 2, "Test", false);
+ test.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent arg0) {
+ testConnection();
+ }
+ });
+ }
+
+ void testConnection() {
+ Session session = null;
+ try {
+ if (uri.getText().startsWith("http")) {// http, https
+ URI checkedUri = new URI(uri.getText());
+ String checkedUriStr = checkedUri.toString();
+ Hashtable<String, String> params = new Hashtable<String, String>();
+ params.put(ArgeoJcrConstants.JCR_REPOSITORY_URI,
+ checkedUriStr);
+ Repository repository = ArgeoJcrUtils.getRepositoryByUri(
+ repositoryFactory, checkedUriStr);
+ if (username.getText().trim().equals("")) {// anonymous
+ session = repository.login();
+ } else {
+ // FIXME use getTextChars() when upgrading to 3.7
+ // see
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=297412
+ char[] pwd = password.getText().toCharArray();
+ SimpleCredentials sc = new SimpleCredentials(
+ username.getText(), pwd);
+ session = repository.login(sc);
+ }
+ } else {// alias
+ Repository repository = ArgeoJcrUtils.getRepositoryByAlias(
+ repositoryFactory, uri.getText());
+ session = repository.login();
+ }
+ MessageDialog.openInformation(getParentShell(), "Success",
+ "Connection to '" + uri.getText() + "' successful");
+ } catch (Exception e) {
+ ErrorFeedback.show(
+ "Connection test failed for " + uri.getText(), e);
+ } finally {
+ JcrUtils.logoutQuietly(session);
+ }
+ }
+
+ @Override
+ protected void okPressed() {
+ try {
+ Session nodeSession = nodeRepository.login();
+ String reposPath = UserJcrUtils.getUserHome(nodeSession)
+ .getPath() + RepoConstants.REPOSITORIES_BASE_PATH;
+
+ Node repos = nodeSession.getNode(reposPath);
+ String repoNodeName = JcrUtils.replaceInvalidChars(name
+ .getText());
+ if (repos.hasNode(repoNodeName))
+ throw new ArgeoException(
+ "There is already a remote repository named "
+ + repoNodeName);
+ Node repoNode = repos.addNode(repoNodeName,
+ ArgeoTypes.ARGEO_REMOTE_REPOSITORY);
+ repoNode.setProperty(ARGEO_URI, uri.getText());
+ repoNode.setProperty(ARGEO_USER_ID, username.getText());
+ repoNode.addMixin(NodeType.MIX_TITLE);
+ repoNode.setProperty(Property.JCR_TITLE, name.getText());
+ nodeSession.save();
+ if (saveInKeyring.getSelection()) {
+ String pwdPath = repoNode.getPath() + '/' + ARGEO_PASSWORD;
+ keyring.set(pwdPath, password.getText().toCharArray());
+ nodeSession.save();
+ }
+ MessageDialog.openInformation(getParentShell(),
+ "Repository Added",
+ "Remote repository " + uri.getText() + "' added");
+
+ super.okPressed();
+ } catch (Exception e) {
+ ErrorFeedback.show("Cannot add remote repository", e);
+ }
+ }
+
+ /** Creates label and text. */
+ protected Text createLT(Composite parent, String label, String initial) {
+ new Label(parent, SWT.NONE).setText(label);
+ Text text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
+ text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ text.setText(initial);
+ return text;
+ }
+
+ /** Creates label and check. */
+ protected Button createLC(Composite parent, String label,
+ Boolean initial) {
+ new Label(parent, SWT.NONE).setText(label);
+ Button check = new Button(parent, SWT.CHECK);
+ check.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ check.setSelection(initial);
+ return check;
+ }
+
+ protected Text createLP(Composite parent, String label) {
+ new Label(parent, SWT.NONE).setText(label);
+ Text text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.BORDER
+ | SWT.PASSWORD);
+ text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ return text;
+ }
+ }
+}
import java.util.Map;
import javax.jcr.Credentials;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Property;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.RepositoryFactory;
import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.nodetype.NodeType;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.eclipse.ui.AbstractTreeContentProvider;
import org.argeo.eclipse.ui.ErrorFeedback;
import org.argeo.eclipse.ui.TreeParent;
+import org.argeo.jcr.ArgeoJcrUtils;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.ArgeoTypes;
import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
+import org.argeo.slc.SlcException;
import org.argeo.slc.client.ui.dist.DistPlugin;
import org.argeo.slc.client.ui.dist.commands.CopyWorkspace;
import org.argeo.slc.client.ui.dist.commands.CreateWorkspace;
import org.argeo.slc.client.ui.dist.editors.DistributionEditorInput;
import org.argeo.slc.client.ui.dist.utils.CommandHelpers;
import org.argeo.slc.jcr.SlcNames;
+import org.argeo.slc.repo.RepoConstants;
+import org.argeo.util.security.Keyring;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
+import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
* Browse and manipulate distributions (like merge, rename, etc.). Only support
* one single repository currently.
*/
-
-public class DistributionsView extends ViewPart implements SlcNames {
- private final static Log log = LogFactory.getLog(DistributionsView.class);
+public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames {
+ // private final static Log log =
+ // LogFactory.getLog(DistributionsView.class);
public final static String ID = DistPlugin.ID + ".distributionsView";
- private Repository repository;
+ private Repository nodeRepository;
private RepositoryFactory repositoryFactory;
+ private Keyring keyring;
private TreeViewer viewer;
- private List<RepositoryElem> repositories = new ArrayList<DistributionsView.RepositoryElem>();
+ // private List<RepositoryElem> repositories = new
+ // ArrayList<DistributionsView.RepositoryElem>();
+
+ // private Session nodeSession = null;
@Override
public void createPartControl(Composite parent) {
TreeViewerColumn col = new TreeViewerColumn(viewer, SWT.NONE);
col.getColumn().setWidth(200);
- col.getColumn().setText("Workspace");
+ // col.getColumn().setText("Workspace");
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
+ if (element instanceof RepoElem)
+ return ((RepoElem) element).getLabel();
return element.toString();
}
});
final Tree table = viewer.getTree();
- table.setHeaderVisible(true);
- table.setLinesVisible(true);
+ table.setHeaderVisible(false);
+ table.setLinesVisible(false);
viewer.setContentProvider(new DistributionsContentProvider());
viewer.addDoubleClickListener(new DistributionsDCL());
viewer.getTree().setMenu(menu);
getSite().registerContextMenu(menuManager, viewer);
- // Initializes repositories
- // TODO make it more generic, with remote repositories etc.
- repositories.add(new RepositoryElem("java", repository, null));
+ Session nodeSession = null;
+ try {
+ nodeSession = nodeRepository.login();
+
+ // make sure base directory is available
+ Node repos = JcrUtils.mkdirs(nodeSession,
+ UserJcrUtils.getUserHome(nodeSession).getPath()
+ + RepoConstants.REPOSITORIES_BASE_PATH);
+ nodeSession.save();
+
+ // register default local java repository
+ String alias = RepoConstants.DEFAULT_JAVA_REPOSITORY_ALIAS;
+ Repository javaRepository = ArgeoJcrUtils.getRepositoryByAlias(
+ repositoryFactory, alias);
+ if (javaRepository != null) {
+ if (!repos.hasNode(alias)) {
+ Node repoNode = repos.addNode(alias,
+ ArgeoTypes.ARGEO_REMOTE_REPOSITORY);
+ repoNode.setProperty(ARGEO_URI, alias);
+ repoNode.addMixin(NodeType.MIX_TITLE);
+ repoNode.setProperty(Property.JCR_TITLE, "vm://" + alias);
+ nodeSession.save();
+ }
+ }
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot register repository", e);
+ } finally {
+ JcrUtils.logoutQuietly(nodeSession);
+ }
+ //
+ // try {
+ // nodeSession = nodeRepository.login();
+ // NodeIterator repos = JcrUtils.mkdirs(
+ // nodeSession,
+ // UserJcrUtils.getUserHome(nodeSession).getPath()
+ // + RepoConstants.REPOSITORIES_BASE_PATH).getNodes();
+ // while (repos.hasNext()) {
+ // Node repository = repos.nextNode();
+ // String label = null;
+ // if (repository.isNodeType(NodeType.MIX_TITLE)) {
+ // label = repository.getProperty(Property.JCR_TITLE)
+ // .getString();
+ // }
+ //
+ // if (repository.isNodeType(ArgeoTypes.ARGEO_REMOTE_REPOSITORY)) {
+ // String uri = repository.getProperty(ARGEO_URI).getString();
+ // Credentials credentials = null;
+ // if (repository.hasProperty(ARGEO_USER_ID)) {
+ // String userId = repository.getProperty(ARGEO_USER_ID)
+ // .getString();
+ // credentials = new SimpleCredentials(userId,
+ // "".toCharArray());
+ // }
+ // Repository remoteRepository = ArgeoJcrUtils
+ // .getRepositoryByUri(repositoryFactory, uri);
+ // if (label == null)
+ // label = repository.getName();
+ // repositories.add(new RepositoryElem(label,
+ // remoteRepository, credentials));
+ // }
+ // }
+ // } catch (RepositoryException e) {
+ // throw new ArgeoException("Cannot read registered repositories", e);
+ // }
// Remote
-// String uri = null;
-// Credentials credentials = null;
-// Repository remoteRepository = null;
-
-// try {
-// uri = "http://dev.argeo.org/org.argeo.jcr.webapp/pub/java";
-// credentials = new GuestCredentials();
-// remoteRepository = ArgeoJcrUtils.getRepositoryByUri(repositoryFactory, uri);
-// repositories.add(new RepositoryElem("anonymous@dev.argeo.org//java",
-// remoteRepository, credentials));
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-
-// uri = "http://localhost:7070/org.argeo.jcr.webapp/pub/java";
-// credentials = new GuestCredentials();
-// remoteRepository = ArgeoJcrUtils.getRepositoryByUri(repositoryFactory, uri);
-// repositories.add(new RepositoryElem("anonymous@localhost//java",
-// remoteRepository, credentials));
-
-// uri = "http://localhost:7070/org.argeo.jcr.webapp/remoting/java";
-// credentials = new SimpleCredentials(System.getProperty("user.name"),
-// "".toCharArray());
-// remoteRepository = ArgeoJcrUtils.getRepositoryByUri(repositoryFactory, uri);
-// repositories.add(new RepositoryElem("@localhost//java",
-// remoteRepository, credentials));
-
- viewer.setInput(getSite());
+ // String uri = null;
+ // Credentials credentials = null;
+ // Repository remoteRepository = null;
+
+ // try {
+ // uri = "http://dev.argeo.org/org.argeo.jcr.webapp/pub/java";
+ // credentials = new GuestCredentials();
+ // remoteRepository =
+ // ArgeoJcrUtils.getRepositoryByUri(repositoryFactory, uri);
+ // repositories.add(new RepositoryElem("anonymous@dev.argeo.org//java",
+ // remoteRepository, credentials));
+ // } catch (Exception e) {
+ // e.printStackTrace();
+ // }
+
+ // uri = "http://localhost:7070/org.argeo.jcr.webapp/pub/java";
+ // credentials = new GuestCredentials();
+ // remoteRepository =
+ // ArgeoJcrUtils.getRepositoryByUri(repositoryFactory, uri);
+ // repositories.add(new RepositoryElem("anonymous@localhost//java",
+ // remoteRepository, credentials));
+
+ // uri = "http://localhost:7070/org.argeo.jcr.webapp/remoting/java";
+ // credentials = new SimpleCredentials(System.getProperty("user.name"),
+ // "".toCharArray());
+ // remoteRepository =
+ // ArgeoJcrUtils.getRepositoryByUri(repositoryFactory, uri);
+ // repositories.add(new RepositoryElem("@localhost//java",
+ // remoteRepository, credentials));
+
+ viewer.setInput(nodeRepository);
}
viewer.setContentProvider(new DistributionsContentProvider());
}
- public void setRepository(Repository repository) {
- this.repository = repository;
+ public void setNodeRepository(Repository repository) {
+ this.nodeRepository = repository;
}
public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
this.repositoryFactory = repositoryFactory;
}
+ public void setKeyring(Keyring keyring) {
+ this.keyring = keyring;
+ }
+
/** Programatically configure the context menu */
protected void contextMenuAboutToShow(IMenuManager menuManager) {
IWorkbenchWindow window = DistPlugin.getDefault().getWorkbench()
// create workspace
CommandHelpers.refreshCommand(menuManager, window,
CreateWorkspace.ID, CreateWorkspace.DEFAULT_LABEL,
- CreateWorkspace.DEFAULT_ICON_PATH,
- tp instanceof RepositoryElem);
+ CreateWorkspace.DEFAULT_ICON_PATH, !isDistribElem);
// Normalize workspace
Map<String, String> params = new HashMap<String, String>();
}
}
- private class DistributionsContentProvider extends
- AbstractTreeContentProvider {
+ private class DistributionsContentProvider implements ITreeContentProvider {
+ Session nodeSession;
+ List<RepoElem> repositories = new ArrayList<RepoElem>();
- public Object[] getElements(Object arg0) {
+ public Object[] getElements(Object input) {
+ Repository nodeRepository = (Repository) input;
+ try {
+ if (nodeSession != null)
+ dispose();
+ nodeSession = nodeRepository.login();
+
+ String reposPath = UserJcrUtils.getUserHome(nodeSession)
+ .getPath() + RepoConstants.REPOSITORIES_BASE_PATH;
+ NodeIterator repos = nodeSession.getNode(reposPath).getNodes();
+ while (repos.hasNext()) {
+ Node repoNode = repos.nextNode();
+ if (repoNode.isNodeType(ArgeoTypes.ARGEO_REMOTE_REPOSITORY)) {
+ repositories.add(new RepoElem(repoNode));
+ }
+ }
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot get base elements", e);
+ }
return repositories.toArray();
}
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof RepoElem) {
+ return ((RepoElem) parentElement).getChildren();
+ } else if (parentElement instanceof DistributionElem) {
+ return ((DistributionElem) parentElement).getChildren();
+ }
+ return null;
+ }
+
+ public Object getParent(Object element) {
+ // TODO register repo elem in distirbution elem?
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ if (element instanceof RepoElem) {
+ return true;
+ } else if (element instanceof DistributionElem) {
+ return false;
+ }
+ return false;
+ }
+
+ public void dispose() {
+ for (RepoElem repoElem : repositories)
+ repoElem.dispose();
+ repositories = new ArrayList<RepoElem>();
+ JcrUtils.logoutQuietly(nodeSession);
+ }
+
}
- /** Wraps a repository **/
- private static class RepositoryElem extends TreeParent {
- // private final Repository repository;
- private Session defaultSession;
+ // private class DistributionsContentProvider extends
+ // AbstractTreeContentProvider {
+ //
+ // public Object[] getElements(Object arg0) {
+ // return repositories.toArray();
+ // }
+ //
+ // }
- public RepositoryElem(String name, Repository repository,
- Credentials credentials) {
- super(name);
+ private class RepoElem {
+ private Node repoNode;
+
+ private Repository repository;
+ private Credentials credentials;
+ private Session defaultSession = null;
+
+ public RepoElem(Node repoNode) {
+ this.repoNode = repoNode;
+ }
+
+ /** Lazily connects to repository */
+ protected void connect() {
+ if (defaultSession != null)
+ return;
+
+ try {
+ if (repoNode.isNodeType(ArgeoTypes.ARGEO_REMOTE_REPOSITORY)) {
+ String uri = repoNode.getProperty(ARGEO_URI).getString();
+ if (uri.startsWith("http")) {// http, https
+ if (repoNode.hasProperty(ARGEO_USER_ID)) {
+ String userId = repoNode.getProperty(ARGEO_USER_ID)
+ .getString();
+ char[] password = keyring.getAsChars(repoNode
+ .getPath() + '/' + ARGEO_PASSWORD);
+ credentials = new SimpleCredentials(userId,
+ password);
+ }
+ repository = ArgeoJcrUtils.getRepositoryByUri(
+ repositoryFactory, uri);
+ } else {// alias
+ String alias = uri;
+ repository = ArgeoJcrUtils.getRepositoryByAlias(
+ repositoryFactory, alias);
+ credentials = null;
+ }
+ defaultSession = repository.login(credentials);
+ }
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot connect to repository "
+ + repoNode, e);
+ }
+ }
+
+ public String getLabel() {
+ try {
+ if (repoNode.isNodeType(NodeType.MIX_TITLE)) {
+ return repoNode.getProperty(Property.JCR_TITLE).getString();
+ } else {
+ return repoNode.getName();
+ }
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot read label of " + repoNode, e);
+ }
+ }
+
+ public String toString() {
+ return repoNode.toString();
+ }
+
+ public Object[] getChildren() {
+ connect();
try {
- defaultSession = repository.login(credentials);
String[] workspaceNames = defaultSession.getWorkspace()
.getAccessibleWorkspaceNames();
+ List<DistributionElem> distributionElems = new ArrayList<DistributionElem>();
for (String workspace : workspaceNames)
- addChild(new DistributionElem(repository, workspace,
- credentials));
+ distributionElems.add(new DistributionElem(repository,
+ workspace, credentials));
+ return distributionElems.toArray();
} catch (RepositoryException e) {
- ErrorFeedback.show("Cannot log to repository", e);
+ throw new SlcException(
+ "Cannot list workspaces for " + repoNode, e);
}
}
- @Override
- public synchronized void dispose() {
- if (log.isTraceEnabled())
- log.trace("Disposing RepositoryElement");
+ public void dispose() {
JcrUtils.logoutQuietly(defaultSession);
- super.dispose();
}
}
+ /** Wraps a repository **/
+ // private static class RepositoryElem extends TreeParent {
+ // // private final Repository repository;
+ // private Session defaultSession;
+ //
+ // public RepositoryElem(String name, Repository repository,
+ // Credentials credentials) {
+ // super(name);
+ // try {
+ // defaultSession = repository.login(credentials);
+ // String[] workspaceNames = defaultSession.getWorkspace()
+ // .getAccessibleWorkspaceNames();
+ // for (String workspace : workspaceNames)
+ // addChild(new DistributionElem(repository, workspace,
+ // credentials));
+ // } catch (RepositoryException e) {
+ // ErrorFeedback.show("Cannot log to repository", e);
+ // }
+ // }
+ //
+ // @Override
+ // public synchronized void dispose() {
+ // if (log.isTraceEnabled())
+ // log.trace("Disposing RepositoryElement");
+ // JcrUtils.logoutQuietly(defaultSession);
+ // super.dispose();
+ // }
+ // }
+
private static class DistributionElem extends TreeParent {
private final String workspaceName;
private final Repository repository;
@Override
public void dispose() {
- for (RepositoryElem re : repositories)
- re.dispose();
+ // for (RepositoryElem re : repositories)
+ // re.dispose();
super.dispose();
}