scope="prototype">
</bean>
- <bean id="addRepository" class="org.argeo.slc.client.ui.dist.commands.AddRepository">
+ <bean id="registerRepository" class="org.argeo.slc.client.ui.dist.commands.RegisterRepository">
<property name="repositoryFactory" ref="repositoryFactory" />
<property name="nodeRepository" ref="nodeRepository" />
<property name="keyring" ref="keyring" />
</commandParameter>
</command>
<command
- id="org.argeo.slc.client.ui.dist.addRepository"
+ id="org.argeo.slc.client.ui.dist.registerRepository"
defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
name="Add Repository">
</command>
<menuContribution
locationURI="toolbar:org.argeo.slc.client.ui.dist.distributionsView">
<command
- commandId="org.argeo.slc.client.ui.dist.addRepository"
- icon="icons/addItem.gif"
- label="Add repository"
- tooltip="Add a repository">
+ commandId="org.argeo.slc.client.ui.dist.registerRepository"
+ icon="icons/addRepo.gif"
+ label="Register repository"
+ tooltip="Register a remote repository">
</command>
<command
commandId="org.argeo.slc.client.ui.dist.refreshDistributionsView"
/** Shared icons. */
public class DistImages {
+
public final static Image IMG_ARTIFACT_BASE = DistPlugin
.getImageDescriptor("icons/artifactBase.gif").createImage();
public final static Image IMG_ARTIFACT_VERSION_BASE = DistPlugin
public final static Image IMG_FILE = DistPlugin.getImageDescriptor(
"icons/file.gif").createImage();
- /** Icons to handle check boxes */
+ /* WORKSPACES */
+ public final static Image IMG_WKSP = DistPlugin.getImageDescriptor(
+ "icons/distribution_perspective.gif").createImage();
+
+ /* REPOSITORIES */
+ public final static Image IMG_REPO = DistPlugin.getImageDescriptor(
+ "icons/repo.gif").createImage();
+ public final static Image IMG_REPO_READONLY = DistPlugin
+ .getImageDescriptor("icons/repoReadOnly.gif").createImage();
+ public final static Image IMG_ADD_REPO = DistPlugin.getImageDescriptor(
+ "icons/addRepo.gif").createImage();
+ public final static Image IMG_REMOVE_REPO = DistPlugin.getImageDescriptor(
+ "icons/artifactBase.gif").createImage();
+ public final static Image IMG_FETCH_REPO = DistPlugin.getImageDescriptor(
+ "icons/fetchRepo.png").createImage();
+
+ /* CHECK BOXES */
public final static Image CHECKED = DistPlugin.getImageDescriptor(
"icons/checked.gif").createImage();
public final static Image UNCHECKED = DistPlugin.getImageDescriptor(
+++ /dev/null
-/*
- * 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.
- * 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.client.ui.dist.DistPlugin;
-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 {
-
- public final static String ID = DistPlugin.ID + ".addRepository";
- public final static String DEFAULT_LABEL = "Register a repository";
- public final static String DEFAULT_ICON_PATH = "icons/addItem.gif";
-
- 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", "Example Java Repository");
- uri = createLT(composite, "URI",
- "https://example.com/data/jcr/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() {
- Session nodeSession = null;
- try {
- 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);
- } finally {
- JcrUtils.logoutQuietly(nodeSession);
- }
- }
-
- /** 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 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.InputDialog;
import org.eclipse.ui.IWorkbenchWindow;
InputDialog inputDialog = new InputDialog(iww.getShell(),
"New workspace", "Choose a name for the workspace to create",
"", null);
- inputDialog.open();
+ int result = inputDialog.open();
+
+ // Canceled by user
+ if (result == Dialog.CANCEL)
+ return null;
+
String workspaceName = inputDialog.getValue();
Session session = null;
try {
--- /dev/null
+/*
+ * 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.
+ * 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 javax.jcr.Repository;
+import javax.jcr.RepositoryFactory;
+
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.slc.client.ui.dist.DistPlugin;
+import org.argeo.slc.client.ui.dist.utils.CommandHelpers;
+import org.argeo.slc.client.ui.dist.wizards.RegisterRepoWizard;
+import org.argeo.slc.jcr.SlcNames;
+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.wizard.WizardDialog;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Connect to a remote repository.
+ */
+public class RegisterRepository extends AbstractHandler implements ArgeoNames,
+ SlcNames {
+
+ public final static String ID = DistPlugin.ID + ".registerRepository";
+ public final static String DEFAULT_LABEL = "Register a repository";
+ public final static String DEFAULT_ICON_PATH = "icons/addRepo.gif";
+
+ /* DEPENDENCY INJECTION */
+ private RepositoryFactory repositoryFactory;
+ private Repository nodeRepository;
+ private Keyring keyring;
+
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ RegisterRepoWizard wizard = new RegisterRepoWizard(keyring,
+ repositoryFactory, nodeRepository);
+ WizardDialog dialog = new WizardDialog(
+ HandlerUtil.getActiveShell(event), wizard);
+ int result = dialog.open();
+ if (result == Dialog.OK)
+ CommandHelpers.callCommand(RefreshDistributionsView.ID);
+
+ // 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", "Example Java Repository");
+ // uri = createLT(composite, "URI",
+ // "https://example.com/data/jcr/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() {
+ // Session nodeSession = null;
+ // try {
+ // 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);
+ // } finally {
+ // JcrUtils.logoutQuietly(nodeSession);
+ // }
+ // }
+ //
+ // /** 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 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.wizard.WizardDialog;
import org.eclipse.ui.handlers.HandlerUtil;
public final static String ID = DistPlugin.ID + ".repoSyncCommand";
public final static String PARAM_TARGET_REPO = "targetRepoPath";
- public final static String DEFAULT_LABEL = "Fetch ...";
- public final static String DEFAULT_ICON_PATH = "icons/addItem.gif";
+ public final static String DEFAULT_LABEL = "Fetch...";
+ public final static String DEFAULT_ICON_PATH = "icons/fetchRepo.png";
// DEPENDENCY INJECTION
private Keyring keyring;
private RepositoryFactory repositoryFactory;
private Repository nodeRepository;
- private Session currSession;
public Object execute(ExecutionEvent event) throws ExecutionException {
+ Session currSession = null;
try {
- currSession = nodeRepository.login();
// Target Repository
String targetRepoPath = event.getParameter(PARAM_TARGET_REPO);
+ currSession = nodeRepository.login();
Node targetRepoNode = currSession.getNode(targetRepoPath);
FetchWizard wizard = new FetchWizard(keyring, repositoryFactory,
nodeRepository);
wizard.setTargetRepoNode(targetRepoNode);
-
WizardDialog dialog = new WizardDialog(
HandlerUtil.getActiveShell(event), wizard);
- dialog.open();
- CommandHelpers.callCommand(RefreshDistributionsView.ID);
+
+ int result = dialog.open();
+ if (result == Dialog.OK)
+ CommandHelpers.callCommand(RefreshDistributionsView.ID);
return null;
} catch (RepositoryException e) {
throw new SlcException("Unexpected error while fetching data", e);
import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
import org.argeo.slc.client.ui.dist.DistImages;
import org.argeo.slc.client.ui.dist.utils.DistUiHelpers;
*/
public class ArtifactDetailsPage extends FormPage implements SlcNames, SlcTypes {
- private final static Log log = LogFactory.getLog(ArtifactDetailsPage.class);
+ // private final static Log log =
+ // LogFactory.getLog(ArtifactDetailsPage.class);
// Main business Objects
private Node currentNode;
--- /dev/null
+package org.argeo.slc.client.ui.dist.utils;
+
+import org.argeo.eclipse.ui.TreeParent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+
+/**
+ * Enable comparison of two names with form org.argeo.slc-1.2.x
+ */
+
+public class ArtifactNamesComparator extends ViewerComparator {
+
+ @Override
+ public int category(Object element) {
+ if (element instanceof String) {
+ int lastInd = ((String) element).lastIndexOf('-');
+ if (lastInd > 0)
+ return 10;
+ }
+ // unvalid names always last
+ return 5;
+ }
+
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ int cat1 = category(e1);
+ int cat2 = category(e2);
+
+ if (cat1 != cat2) {
+ return cat1 - cat2;
+ }
+
+ int result = 0;
+
+ String s1, s2;
+
+ if (e1 instanceof TreeParent) {
+ s1 = ((TreeParent) e1).getName();
+ s2 = ((TreeParent) e2).getName();
+ } else {
+ s1 = e1.toString();
+ s2 = e2.toString();
+ }
+
+
+ int i1 = s1.lastIndexOf('-');
+ int i2 = s2.lastIndexOf('-');
+
+
+ // Specific cases, unvalid Strings
+ if (i1 <0)
+ if (i2 <0)
+ return s1.compareTo(s2);
+ else
+ return 1;
+ else
+ if (i2 <0)
+ return -1;
+
+ String aPref = s1.substring(0, s1.lastIndexOf('-'));
+ String aSuf = s1.substring(s1.lastIndexOf('-'));
+
+ String bPref = s2.substring(0, s2.lastIndexOf('-'));
+ String bSuf = s2.substring(s2.lastIndexOf('-'));
+
+ result = aPref.compareTo(bPref);
+ if (result != 0)
+ return result;
+ else
+ return bSuf.compareTo(aSuf);
+
+ }
+}
\ No newline at end of file
import javax.jcr.Value;
import javax.jcr.query.Row;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.GenericTableComparator;
import org.argeo.slc.client.ui.dist.DistConstants;
*/
public class ArtifactsTableConfigurer implements SlcNames, SlcTypes,
DistConstants {
- private final static Log log = LogFactory
- .getLog(ArtifactsTableConfigurer.class);
+ // private final static Log log = LogFactory
+ // .getLog(ArtifactsTableConfigurer.class);
// Used in the comparator to be able to retrieve the value from a row
// knowing the corresponding column index.
private Map<Integer, String> indexToName = new HashMap<Integer, String>();
import javax.jcr.nodetype.NodeType;
import javax.jcr.query.Row;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.jcr.utils.JcrFileProvider;
import org.argeo.eclipse.ui.specific.FileHandler;
public class GenericDoubleClickListener implements IDoubleClickListener,
SlcTypes, SlcNames, DistConstants {
- private final static Log log = LogFactory
- .getLog(GenericDoubleClickListener.class);
+ // private final static Log log = LogFactory
+ // .getLog(GenericDoubleClickListener.class);
- private TreeViewer viewer;
+ //private TreeViewer viewer;
private JcrFileProvider jfp;
private FileHandler fileHandler;
public GenericDoubleClickListener(TreeViewer viewer) {
- this.viewer = viewer;
+ // this.viewer = viewer;
jfp = new JcrFileProvider();
fileHandler = new FileHandler(jfp);
}
import org.argeo.jcr.JcrUtils;
import org.argeo.jcr.UserJcrUtils;
import org.argeo.slc.SlcException;
+import org.argeo.slc.client.ui.dist.DistImages;
import org.argeo.slc.client.ui.dist.DistPlugin;
-import org.argeo.slc.client.ui.dist.commands.AddRepository;
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.commands.DeleteWorkspace;
import org.argeo.slc.client.ui.dist.commands.ManageWorkspaceAuth;
import org.argeo.slc.client.ui.dist.commands.NormalizeDistribution;
+import org.argeo.slc.client.ui.dist.commands.RegisterRepository;
import org.argeo.slc.client.ui.dist.commands.RepoSyncCommand;
import org.argeo.slc.client.ui.dist.commands.UnregisterRemoteRepo;
import org.argeo.slc.client.ui.dist.editors.DistributionEditor;
import org.argeo.slc.client.ui.dist.editors.DistributionEditorInput;
+import org.argeo.slc.client.ui.dist.utils.ArtifactNamesComparator;
import org.argeo.slc.client.ui.dist.utils.CommandHelpers;
import org.argeo.slc.jcr.SlcNames;
import org.argeo.slc.repo.RepoConstants;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
return ((RepoElem) element).getLabel();
return element.toString();
}
+
+ @Override
+ public Image getImage(Object element) {
+ if (element instanceof RepoElem)
+ return DistImages.IMG_REPO;
+ else if (element instanceof DistributionElem) {
+ return DistImages.IMG_WKSP;
+ }
+ return null;
+ }
});
final Tree table = viewer.getTree();
viewer.setContentProvider(new DistributionsContentProvider());
viewer.addDoubleClickListener(new DistributionsDCL());
+ viewer.setComparator(new ArtifactNamesComparator());
+ log.debug("Comparator set ");
+
// Enable selection retrieving from outside the view
getSite().setSelectionProvider(viewer);
// Register a remote repository
CommandHelpers.refreshCommand(menuManager, window,
- AddRepository.ID, AddRepository.DEFAULT_LABEL,
- AddRepository.DEFAULT_ICON_PATH, !isDistribElem
+ RegisterRepository.ID,
+ RegisterRepository.DEFAULT_LABEL,
+ RegisterRepository.DEFAULT_ICON_PATH, !isDistribElem
&& singleElement);
// Unregister a remote repository
}
public Object getParent(Object element) {
- // TODO register repo elem in distirbution elem?
+ // TODO register repo elem in distribution elem?
return null;
}
.getAccessibleWorkspaceNames();
List<DistributionElem> distributionElems = new ArrayList<DistributionElem>();
for (String workspaceName : workspaceNames) {
- Node workspaceNode = repoNode.hasNode(workspaceName) ? repoNode
- .getNode(workspaceName) : repoNode
- .addNode(workspaceName);
- repoNode.getSession().save();
- distributionElems.add(new DistributionElem(this,
- workspaceNode));
- // FIXME remove deleted workspaces
+ // filter technical workspaces
+ // FIXME: rely on a more robust rule than just wksp name
+ if (workspaceName.lastIndexOf('-') > 0) {
+ Node workspaceNode = repoNode.hasNode(workspaceName) ? repoNode
+ .getNode(workspaceName) : repoNode
+ .addNode(workspaceName);
+ repoNode.getSession().save();
+ distributionElems.add(new DistributionElem(this,
+ workspaceNode));
+ // FIXME remove deleted workspaces
+ }
}
return distributionElems.toArray();
} catch (RepositoryException e) {
package org.argeo.slc.client.ui.dist.wizards;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.argeo.jcr.JcrUtils;
import org.argeo.jcr.UserJcrUtils;
import org.argeo.slc.SlcException;
-import org.argeo.slc.client.ui.dist.DistImages;
import org.argeo.slc.client.ui.dist.DistPlugin;
import org.argeo.slc.client.ui.dist.PrivilegedJob;
+import org.argeo.slc.client.ui.dist.utils.ArtifactNamesComparator;
import org.argeo.slc.client.ui.dist.utils.ViewerUtils;
import org.argeo.slc.repo.RepoConstants;
import org.argeo.slc.repo.RepoSync;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.CheckboxCellEditor;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
*/
public class FetchWizard extends Wizard {
+ // private final static Log log = LogFactory.getLog(FetchWizard.class);
+
// Business objects
private Keyring keyring;
private RepositoryFactory repositoryFactory;
private Session currSession;
-
- // Caches the workspace list
- private List<String> wkspToSync = new ArrayList<String>();
-
- private TableViewer wkspViewer;
-
private Node targetRepoNode, sourceRepoNode;
// This page widget
private DefineModelPage page;
+ private CheckboxTableViewer wkspViewer;
public FetchWizard(Keyring keyring, RepositoryFactory repositoryFactory,
Repository nodeRepository) {
@Override
public void dispose() {
+ super.dispose();
JcrUtils.logoutQuietly(currSession);
}
try {
page = new DefineModelPage();
addPage(page);
- setWindowTitle("Fetch ...");
+ setWindowTitle("Fetch...");
} catch (Exception e) {
throw new SlcException("Cannot add page to wizard ", e);
}
Credentials sourceCredentials = RepoUtils.getRepositoryCredentials(
keyring, sourceRepoNode);
- String msg = "Your are about to fetch data from repository: \n\t"
+ String msg;
+
+ // no workspace has been chosen, we return
+ if (wkspViewer.getCheckedElements().length == 0) {
+ msg = "No workspace has been chosen, and thus no fetch has been done.";
+ MessageDialog.openWarning(DistPlugin.getDefault()
+ .getWorkbench().getDisplay().getActiveShell(),
+ "Warning", msg);
+ return true;
+ }
+
+ msg = "Your are about to fetch data from repository: \n\t"
+ sourceRepoUri + "\ninto target repository: \n\t"
+ targetRepoUri + "\nDo you really want to proceed ?";
repoSync.setTargetRepoUri(targetRepoUri);
repoSync.setSourceRepoUri(sourceRepoUri);
- // / Specify workspaces to synchronise
- if (wkspToSync != null && wkspToSync.size() > 0)
- repoSync.setSourceWkspList(wkspToSync);
-
+ // Specify workspaces to synchronise
+ List<String> wksps = new ArrayList<String>();
+ for (Object obj : wkspViewer.getCheckedElements()) {
+ wksps.add((String) obj);
+ }
+ repoSync.setSourceWkspList(wksps);
FetchJob job = new FetchJob(repoSync);
job.setUser(true);
job.schedule();
gd.verticalAlignment = SWT.FILL;
wkspTable.setLayoutData(gd);
wkspTable.setLayout(new GridLayout(1, false));
- addFilesTablePart(wkspTable);
+ addWkspTablePart(wkspTable);
+
+ // Choose source repo
+ final Button selectAllBtn = new Button(composite, SWT.CHECK);
+ selectAllBtn.setText("Select/Unselect all");
+
+ selectAllBtn.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ wkspViewer.setAllChecked(selectAllBtn.getSelection());
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
chooseSourceRepoCmb.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
});
// initialize to first avalaible repo
- chooseSourceRepoCmb.select(0);
-
+ if (chooseSourceRepoCmb.getItemCount() > 0)
+ chooseSourceRepoCmb.select(0);
// Compulsory
setControl(composite);
}
}
// Create the workspaces table
- private void addFilesTablePart(Composite parent) {
+ private void addWkspTablePart(Composite parent) {
- final Table table = new Table(parent, SWT.NONE | SWT.H_SCROLL
- | SWT.V_SCROLL | SWT.BORDER);
+ Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL
+ | SWT.BORDER | SWT.CHECK);
table.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true));
table.setLinesVisible(true);
table.setHeaderVisible(true);
- wkspViewer = new TableViewer(table);
-
- // CHECKBOX COLUMN
- TableViewerColumn column = ViewerUtils.createTableViewerColumn(
- wkspViewer, "", SWT.NONE, 20);
- column.setLabelProvider(new ColumnLabelProvider() {
- public String getText(Object element) {
- return null;
- }
-
- public Image getImage(Object element) {
- return wkspToSync.contains(element) ? DistImages.CHECKED
- : DistImages.UNCHECKED;
- }
- });
- column.setEditingSupport(new CheckboxEditingSupport(wkspViewer));
- // add select all option
- column.getColumn().addSelectionListener(new SelectionListener() {
- public void widgetSelected(SelectionEvent e) {
- if (wkspToSync.size() > 0)
- wkspToSync = new ArrayList<String>();
- else {
- String[] elements = (String[]) ((IStructuredContentProvider) wkspViewer
- .getContentProvider()).getElements(null);
- wkspToSync = Arrays.asList(elements);
- }
- wkspViewer.refresh();
- }
-
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- });
+ wkspViewer = new CheckboxTableViewer(table);
// WORKSPACES COLUMN
- column = ViewerUtils.createTableViewerColumn(wkspViewer,
- "Workspaces", SWT.NONE, 400);
+ TableViewerColumn column = ViewerUtils.createTableViewerColumn(
+ wkspViewer, "Workspaces", SWT.NONE, 400);
column.setLabelProvider(new ColumnLabelProvider());
wkspViewer.setContentProvider(new IStructuredContentProvider() {
public void inputChanged(Viewer viewer, Object oldInput,
Object newInput) {
- // update current used repository
- currSourceRepo = RepoUtils.getRepository(repositoryFactory,
- keyring, (Node) newInput);
- currSourceCred = RepoUtils.getRepositoryCredentials(
- keyring, (Node) newInput);
- // reset workspace list
- wkspToSync = new ArrayList<String>();
+ if (newInput != null && newInput instanceof Node) {
+ // update current used repository
+ currSourceRepo = RepoUtils.getRepository(
+ repositoryFactory, keyring, (Node) newInput);
+ currSourceCred = RepoUtils.getRepositoryCredentials(
+ keyring, (Node) newInput);
+ // reset workspace list
+ wkspViewer.setAllChecked(false);
+ }
}
public void dispose() {
Session session = null;
try {
session = currSourceRepo.login(currSourceCred);
- return session.getWorkspace()
- .getAccessibleWorkspaceNames();
+ List<String> result = new ArrayList<String>();
+ // remove unvalid elements
+ for (String name : session.getWorkspace()
+ .getAccessibleWorkspaceNames())
+ if (name.lastIndexOf('-') > 0)
+ result.add(name);
+ return result.toArray();
} catch (RepositoryException e) {
throw new SlcException(
"Unexpected error while initializing fetch wizard",
} finally {
JcrUtils.logoutQuietly(session);
}
-
}
});
- }
-
- /** Select which file to import by editing a checkbox */
- protected class CheckboxEditingSupport extends EditingSupport {
+ wkspViewer.setComparator(new ArtifactNamesComparator());
- private final TableViewer viewer;
-
- public CheckboxEditingSupport(TableViewer viewer) {
- super(viewer);
- this.viewer = viewer;
- }
-
- @Override
- protected boolean canEdit(Object element) {
- return true;
- }
-
- @Override
- protected CellEditor getCellEditor(Object element) {
- return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
- }
-
- @Override
- protected Object getValue(Object element) {
- return wkspToSync.contains(element);
- }
-
- @Override
- protected void setValue(Object element, Object value) {
- if ((Boolean) value && !wkspToSync.contains(element))
- wkspToSync.add((String) element);
- else if (!(Boolean) value && wkspToSync.contains(element))
- wkspToSync.remove(element);
- viewer.refresh();
- }
}
}
public void setSourceRepoNode(Node sourceRepoNode) {
this.sourceRepoNode = sourceRepoNode;
}
-
- // private class FetchJob extends Job {
- // private RepoSync repoSync;
- // private final Authentication authentication;
- // private Subject subject;
- //
- // public FetchJob(RepoSync repoSync) {
- // super("Fetch");
- // this.repoSync = repoSync;
- // authentication = SecurityContextHolder.getContext()
- // .getAuthentication();
- // subject = Subject.getSubject(AccessController.getContext());
- // }
- //
- // @Override
- // protected IStatus run(final IProgressMonitor progressMonitor) {
- // PrivilegedAction<IStatus> privilegedAction = new
- // PrivilegedAction<IStatus>() {
- // public IStatus run() {
- // try {
- // // SecurityContextHolder.setContext(securityContext);
- // SecurityContextHolder.getContext().setAuthentication(
- // authentication);
- // ArgeoMonitor monitor = new EclipseArgeoMonitor(
- // progressMonitor);
- // repoSync.setMonitor(monitor);
- // repoSync.run();
- // } catch (Exception e) {
- // return new Status(IStatus.ERROR, DistPlugin.ID,
- // "Cannot fetch repository", e);
- // }
- // return Status.OK_STATUS;
- // }
- //
- // };
- // return Subject.doAs(subject, privilegedAction);
- // }
- // }
}
\ No newline at end of file
--- /dev/null
+/*
+ * 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.
+ * 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.wizards;
+
+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.SlcException;
+import org.argeo.slc.repo.RepoConstants;
+import org.argeo.util.security.Keyring;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+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.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ *
+ * Registers a new remote repository in the current Node.
+ *
+ */
+public class RegisterRepoWizard extends Wizard {
+
+ // Business objects
+ private Keyring keyring;
+ private RepositoryFactory repositoryFactory;
+ private Repository nodeRepository;
+
+ // Pages
+ private DefineModelPage page;
+
+ // Widgets of model page
+ private Text name;
+ private Text uri;
+ private Text username;
+ private Text password;
+ private Button saveInKeyring;
+
+ // Default values
+ private final static String DEFAULT_NAME = "Argeo public Repository";
+ private final static String DEFAULT_URI = "https://repo.argeo.org/data/pub/java";
+ private final static String DEFAULT_USER_NAME = "anonymous";
+ private final static boolean DEFAULT_ANONYMOUS = true;
+
+ public RegisterRepoWizard(Keyring keyring,
+ RepositoryFactory repositoryFactory, Repository nodeRepository) {
+ super();
+ this.keyring = keyring;
+ this.repositoryFactory = repositoryFactory;
+ this.nodeRepository = nodeRepository;
+ }
+
+ @Override
+ public void addPages() {
+ try {
+ page = new DefineModelPage();
+ addPage(page);
+ setWindowTitle("Register a new remote repository");
+ } catch (Exception e) {
+ throw new SlcException("Cannot add page to wizard ", e);
+ }
+ }
+
+ @Override
+ public boolean performFinish() {
+ if (!canFinish())
+ return false;
+
+ Session nodeSession = null;
+ try {
+ 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(ArgeoNames.ARGEO_URI, uri.getText());
+ repoNode.setProperty(ArgeoNames.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() + '/'
+ + ArgeoNames.ARGEO_PASSWORD;
+ keyring.set(pwdPath, password.getText().toCharArray());
+ nodeSession.save();
+ }
+ MessageDialog.openInformation(getShell(), "Repository Added",
+ "Remote repository " + uri.getText() + "' added");
+ } catch (Exception e) {
+ ErrorFeedback.show("Cannot add remote repository", e);
+ } finally {
+ JcrUtils.logoutQuietly(nodeSession);
+ }
+ return true;
+ }
+
+ private class DefineModelPage extends WizardPage {
+
+ public DefineModelPage() {
+ super("Main");
+ setTitle("Fill information to register a repository");
+ }
+
+ public void createControl(Composite parent) {
+
+ // main layout
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(2, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
+ false));
+
+ // Create various fields
+ // setMessage("Login to remote repository", IMessageProvider.NONE);
+ name = createLT(composite, "Name", DEFAULT_NAME);
+ uri = createLT(composite, "URI", DEFAULT_URI);
+
+ final Button anonymousLogin = createLC(composite,
+ "log as anonymous", true);
+ anonymousLogin.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ if (anonymousLogin.getSelection()) {
+ username.setText(DEFAULT_USER_NAME);
+ password.setText("");
+ username.setEnabled(false);
+ password.setEnabled(false);
+ } else {
+ username.setText("");
+ password.setText("");
+ username.setEnabled(true);
+ password.setEnabled(true);
+ }
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+
+ username = createLT(composite, "User", DEFAULT_USER_NAME);
+ password = createLP(composite, "Password");
+ saveInKeyring = createLC(composite, "Remember password", false);
+
+ if (DEFAULT_ANONYMOUS) {
+ username.setEnabled(false);
+ password.setEnabled(false);
+ }
+
+ Button test = createButton(parent, "Test");
+ test.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent arg0) {
+ testConnection();
+ }
+ });
+
+ // Compulsory
+ setControl(composite);
+ }
+
+ /** 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.TOP, 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;
+ }
+
+ /** Creates a button with a label. */
+ protected Button createButton(Composite parent, String label) {
+ Button button = new Button(parent, SWT.PUSH);
+ button.setText(label);
+ button.setFont(JFaceResources.getDialogFont());
+ setButtonLayoutData(button);
+ return button;
+ }
+
+ /** Creates label and password field */
+ 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;
+ }
+
+ }
+
+ 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(getShell(), "Success",
+ "Connection to '" + uri.getText() + "' successful");
+ } catch (Exception e) {
+ ErrorFeedback
+ .show("Connection test failed for " + uri.getText(), e);
+ } finally {
+ JcrUtils.logoutQuietly(session);
+ }
+ }
+}
\ No newline at end of file