You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2017/07/01 12:10:09 UTC
[36/36] ant-ivyde git commit: Add support for storing securely
credentials (thanks to Alexander Blaas)
Add support for storing securely credentials (thanks to Alexander Blaas)
Project: http://git-wip-us.apache.org/repos/asf/ant-ivyde/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivyde/commit/a3187542
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivyde/tree/a3187542
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivyde/diff/a3187542
Branch: refs/heads/ivyDECredentials-cleaned
Commit: a318754243aa0625bd5f4c4b95b077cea7a9c9bc
Parents: 83a84e6
Author: Nicolas Lalevée <ni...@hibnet.org>
Authored: Wed Jun 14 23:41:15 2017 +0200
Committer: Nicolas Lalevée <ni...@hibnet.org>
Committed: Sat Jul 1 13:28:16 2017 +0200
----------------------------------------------------------------------
org.apache.ivyde.eclipse/META-INF/MANIFEST.MF | 7 +-
org.apache.ivyde.eclipse/plugin.xml | 7 +-
.../apache/ivyde/eclipse/GUIfactoryHelper.java | 85 +++++++
.../ivyde/eclipse/IvyDEsecurityHelper.java | 167 +++++++++++++
.../apache/ivyde/eclipse/cp/SecuritySetup.java | 183 ++++++++++++++
.../ivyde/internal/eclipse/IvyPlugin.java | 16 +-
.../controller/SecuritySetupController.java | 247 +++++++++++++++++++
.../cpcontainer/SecuritySetupContainer.java | 55 +++++
.../eclipse/ui/SecuritySetupEditor.java | 128 ++++++++++
.../ui/components/CustomConfirmationDialog.java | 43 ++++
.../ui/components/SecuritySetupDialog.java | 225 +++++++++++++++++
.../SecuritySetupPreferencePage.java | 91 +++++++
.../eclipse/validator/BaseValidator.java | 58 +++++
.../eclipse/validator/IValidationReaction.java | 25 ++
.../eclipse/validator/impl/HostValidator.java | 43 ++++
.../eclipse/validator/impl/IdValidator.java | 80 ++++++
.../validator/impl/PasswordValidator.java | 36 +++
.../eclipse/validator/impl/RealmValidator.java | 43 ++++
.../validator/impl/UserNameValidator.java | 39 +++
.../reaction/GeneralValidationReaction.java | 60 +++++
.../reaction/NopValidationReaction.java | 34 +++
21 files changed, 1666 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF b/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF
index f354d8e..9113a35 100644
--- a/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF
+++ b/org.apache.ivyde.eclipse/META-INF/MANIFEST.MF
@@ -33,6 +33,11 @@ Require-Bundle: org.apache.xerces;bundle-version="[2.9.0,3.0.0)";resolution:=opt
org.eclipse.debug.core;bundle-version="[3.4.0,4.0.0)",
org.eclipse.jdt.launching;bundle-version="[3.4.0,4.0.0)",
org.eclipse.debug.ui;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.core.variables;bundle-version="[3.2.0,4.0.0)"
+ org.eclipse.core.variables;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.equinox.security;bundle-version="[1.1.100,2.0.0)",
+ org.eclipse.core.databinding;bundle-version="[1.4.1,2.0.0)",
+ org.eclipse.core.databinding.property;bundle-version="[1.4.100,2.0.0)",
+ org.eclipse.core.databinding.beans;bundle-version="[1.2.200,2.0.0)",
+ org.eclipse.jface.databinding;bundle-version="[1.6.0,2.0.0)"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/plugin.xml
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/plugin.xml b/org.apache.ivyde.eclipse/plugin.xml
index 0c08d7e..99903b1 100644
--- a/org.apache.ivyde.eclipse/plugin.xml
+++ b/org.apache.ivyde.eclipse/plugin.xml
@@ -144,6 +144,12 @@
id="org.apache.ivyde.eclipse.ui.preferences.AdvancedSetupPreferencePage"
name="Advanced">
</page>
+ <page
+ category="org.apache.ivyde.eclipse.ui.preferences.IvyPreferencePage"
+ class="org.apache.ivyde.internal.eclipse.ui.preferences.SecuritySetupPreferencePage"
+ id="org.apache.ivyde.eclipse.ui.preferences.SecuritySetupPreferencePage"
+ name="Security">
+ </page>
</extension>
<extension
point="org.eclipse.core.runtime.preferences">
@@ -506,5 +512,4 @@
</describer>
</content-type>
</extension>
-
</plugin>
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/GUIfactoryHelper.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/GUIfactoryHelper.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/GUIfactoryHelper.java
new file mode 100644
index 0000000..70fa1c3
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/GUIfactoryHelper.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.eclipse;
+
+import org.apache.ivyde.eclipse.cp.SecuritySetup;
+import org.apache.ivyde.internal.eclipse.ui.components.CustomConfirmationDialog;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+
+public final class GUIfactoryHelper {
+
+ private static final String SECRET = "******";
+
+ private GUIfactoryHelper() {
+
+ }
+
+ public static ColumnLabelProvider buildHostLabelProvider() {
+ return new ColumnLabelProvider() {
+ @Override
+ public String getText(Object element) {
+ return ((SecuritySetup) element).getHost();
+ }
+ };
+ }
+
+ public static ColumnLabelProvider buildRealmLabelProvider() {
+ return new ColumnLabelProvider() {
+ @Override
+ public String getText(Object element) {
+ return ((SecuritySetup) element).getRealm();
+ }
+ };
+ }
+
+ public static ColumnLabelProvider buildUsernameLabelProvider() {
+ return new ColumnLabelProvider() {
+ @Override
+ public String getText(Object element) {
+ return ((SecuritySetup) element).getUserName();
+ }
+ };
+ }
+
+ public static ColumnLabelProvider buildPwdLabelProvider() {
+ return new ColumnLabelProvider() {
+ @Override
+ public String getText(Object element) {
+ return SECRET;
+ }
+ };
+ }
+
+ public static TableViewerColumn buildTableColumn(TableViewer viewer, int width, String header,
+ ColumnLabelProvider provider) {
+ TableViewerColumn col = new TableViewerColumn(viewer, SWT.NONE);
+ col.getColumn().setWidth(width);
+ col.getColumn().setText(header);
+ col.setLabelProvider(provider);
+ return col;
+ }
+
+ public static CustomConfirmationDialog buildConfirmationDialog(Shell parentShell,
+ String dialogTitle, String dialogMessage) {
+ return new CustomConfirmationDialog(parentShell, dialogTitle, dialogMessage);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDEsecurityHelper.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDEsecurityHelper.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDEsecurityHelper.java
new file mode 100644
index 0000000..b54ece7
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDEsecurityHelper.java
@@ -0,0 +1,167 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.eclipse;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.ivy.util.url.CredentialsStore;
+import org.apache.ivyde.eclipse.cp.SecuritySetup;
+import org.apache.ivyde.internal.eclipse.IvyPlugin;
+import org.eclipse.equinox.security.storage.ISecurePreferences;
+import org.eclipse.equinox.security.storage.SecurePreferencesFactory;
+import org.eclipse.equinox.security.storage.StorageException;
+
+public final class IvyDEsecurityHelper {
+
+ private static final String IVY_DE_CREDENTIALS_BASE_NODE = "org.apache.ivyde.credentials";
+
+ private static final String HOST_KEY = "host";
+
+ private static final String REALM_KEY = "realm";
+
+ private static final String USERNAME_KEY = "username";
+
+ private static final String PASSWORD_KEY = "pwd";
+
+ private IvyDEsecurityHelper() {
+
+ }
+
+ public static void addCredentialsToIvyCredentialStorage(SecuritySetup setup) {
+ CredentialsStore.INSTANCE.addCredentials(setup.getRealm(), setup.getHost(),
+ setup.getUserName(), setup.getPwd());
+ IvyPlugin.logInfo("Credentials " + setup.toString() + " added to ivyDE credential store");
+ }
+
+ public static void cpyCredentialsFromSecureToIvyStorage() {
+ List<SecuritySetup> credentials = getCredentialsFromSecureStore();
+ for (SecuritySetup entry : credentials) {
+ addCredentialsToIvyCredentialStorage(entry);
+ IvyPlugin.logInfo("Credentials " + entry.toString()
+ + " from eclipse secure storage copied to ivyDE credential store");
+ }
+ }
+
+ public static void addCredentialsToSecureStorage(SecuritySetup setup) {
+ ISecurePreferences preferences = SecurePreferencesFactory.getDefault();
+ ISecurePreferences baseNode = preferences.node(IVY_DE_CREDENTIALS_BASE_NODE);
+ ISecurePreferences childNode = baseNode.node(setup.getHost());
+ ISecurePreferences childChildNode = childNode.node(setup.getRealm());
+
+ try {
+ childChildNode.put(HOST_KEY, setup.getHost(), false);
+ childChildNode.put(REALM_KEY, setup.getRealm(), false);
+ childChildNode.put(USERNAME_KEY, setup.getUserName(), true);
+ childChildNode.put(PASSWORD_KEY, setup.getPwd(), true);
+ childChildNode.flush();
+ IvyPlugin.logInfo(
+ "Credentials " + setup.toString() + " added to eclipse secure storage");
+ } catch (StorageException e1) {
+ IvyPlugin.logError(e1.getMessage(), e1);
+ } catch (IOException e) {
+ IvyPlugin.logError(e.getMessage(), e);
+ }
+ }
+
+ public static List<SecuritySetup> getCredentialsFromSecureStore() {
+ ISecurePreferences preferences = SecurePreferencesFactory.getDefault();
+ List<SecuritySetup> setupValues = new ArrayList<SecuritySetup>();
+ if (preferences.nodeExists(IVY_DE_CREDENTIALS_BASE_NODE)) {
+ ISecurePreferences node = preferences.node(IVY_DE_CREDENTIALS_BASE_NODE);
+ String[] childNames = node.childrenNames();
+ for (String childName : childNames) {
+ ISecurePreferences childNode = node.node(childName);
+ String[] childChildNames = childNode.childrenNames();
+ for (String childChildName : childChildNames) {
+ ISecurePreferences childChildNode = childNode.node(childChildName);
+ try {
+ SecuritySetup toAdd = new SecuritySetup(
+ childChildNode.get(HOST_KEY, "localhost"),
+ childChildNode.get(REALM_KEY, "basic"),
+ childChildNode.get(USERNAME_KEY, null),
+ childChildNode.get(PASSWORD_KEY, null));
+ setupValues.add(toAdd);
+ IvyPlugin.logInfo("Credentials " + toAdd.toString()
+ + " loaded from eclipse secure storage");
+ } catch (StorageException e1) {
+ IvyPlugin.logError(e1.getMessage(), e1);
+ }
+ }
+ }
+ }
+ Collections.sort(setupValues);
+ return setupValues;
+ }
+
+ public static void removeCredentials(SecuritySetup setup) {
+ removeCredentialsFromSecureStore(setup);
+ invalidateIvyCredentials(setup);
+ }
+
+ public static boolean hostExistsInSecureStorage(String host, String realm) {
+ ISecurePreferences preferences = SecurePreferencesFactory.getDefault();
+ if (preferences.nodeExists(IVY_DE_CREDENTIALS_BASE_NODE)) {
+ ISecurePreferences node = preferences.node(IVY_DE_CREDENTIALS_BASE_NODE);
+ if (node.nodeExists(host)) {
+ ISecurePreferences childNode = node.node(host);
+ if (childNode.nodeExists(realm)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private static void removeCredentialsFromSecureStore(SecuritySetup setup) {
+ String host = setup.getHost();
+ String realm = setup.getRealm();
+ ISecurePreferences preferences = SecurePreferencesFactory.getDefault();
+ if (preferences.nodeExists(IVY_DE_CREDENTIALS_BASE_NODE)) {
+ ISecurePreferences node = preferences.node(IVY_DE_CREDENTIALS_BASE_NODE);
+ if (node.nodeExists(host)) {
+ ISecurePreferences childNode = node.node(host);
+ if (childNode.nodeExists(realm)) {
+ childNode.node(realm).removeNode();
+ try {
+ node.flush();
+ IvyPlugin.logInfo("Credentials " + setup.toString()
+ + "' removed from eclipse secure storage");
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ IvyPlugin.logError(e.getMessage(), e);
+ }
+ }
+ }
+ }
+ }
+
+ private static void invalidateIvyCredentials(SecuritySetup setup) {
+ // need to invalidate => on credentialStore just add-ops allowed
+ CredentialsStore.INSTANCE.addCredentials(setup.getHost(), setup.getRealm(), null, null);
+ IvyPlugin.logInfo("Credentials " + setup
+ + " invalidated on ivyDE credential store: Removed on next eclipse startup.");
+ }
+
+ public static boolean credentialsInSecureStorage() {
+ return SecurePreferencesFactory.getDefault().nodeExists(IVY_DE_CREDENTIALS_BASE_NODE);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cp/SecuritySetup.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cp/SecuritySetup.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cp/SecuritySetup.java
new file mode 100644
index 0000000..ae8f95b
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cp/SecuritySetup.java
@@ -0,0 +1,183 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.eclipse.cp;
+
+public class SecuritySetup implements Comparable<SecuritySetup> {
+
+ private String id = "";
+
+ private String host = "";
+
+ private String realm = "";
+
+ private String userName = "";
+
+ private String pwd = "";
+
+ public SecuritySetup() {
+
+ }
+
+ /**
+ * @param host
+ * @param realm
+ * @param userName
+ * @param pwd
+ */
+ public SecuritySetup(String host, String realm, String userName, String pwd) {
+ this.id = host + "@" + realm;
+ this.host = host;
+ this.realm = realm;
+ this.userName = userName;
+ this.pwd = pwd;
+ }
+
+ public void setAllValues(SecuritySetup toSet) {
+ this.id = toSet.getHost() + "@" + toSet.getRealm();
+ this.host = toSet.getHost();
+ this.realm = toSet.getRealm();
+ this.userName = toSet.getUserName();
+ this.pwd = toSet.getPwd();
+ }
+
+ /**
+ * @return the id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * @param id
+ * the id to set
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the host
+ */
+ public String getHost() {
+ return host;
+ }
+
+ /**
+ * @param host
+ * the host to set
+ */
+ public void setHost(String host) {
+ this.host = host;
+ }
+
+ /**
+ * @return the realm
+ */
+ public String getRealm() {
+ return realm;
+ }
+
+ /**
+ * @param realm
+ * the realm to set
+ */
+ public void setRealm(String realm) {
+ this.realm = realm;
+ }
+
+ /**
+ * @return the userName
+ */
+ public String getUserName() {
+ return userName;
+ }
+
+ /**
+ * @param userName
+ * the userName to set
+ */
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ /**
+ * @return the pwd
+ */
+ public String getPwd() {
+ return pwd;
+ }
+
+ /**
+ * @param pwd
+ * the pwd to set
+ */
+ public void setPwd(String pwd) {
+ this.pwd = pwd;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((host == null) ? 0 : host.hashCode());
+ result = prime * result + ((realm == null) ? 0 : realm.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ SecuritySetup other = (SecuritySetup) obj;
+ if (host == null) {
+ if (other.host != null)
+ return false;
+ } else if (!host.equals(other.host))
+ return false;
+ if (realm == null) {
+ if (other.realm != null)
+ return false;
+ } else if (!realm.equals(other.realm))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "[storageId: '" + this.host + "@" + this.realm + "', host='" + this.host
+ + "', realm='" + this.realm + "', user='" + this.userName + "', password='******']";
+ }
+
+ public int compareTo(SecuritySetup o) {
+ return this.host.compareTo(o.getHost());
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/IvyPlugin.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/IvyPlugin.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/IvyPlugin.java
index 9ef70d7..3ae72c7 100644
--- a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/IvyPlugin.java
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/IvyPlugin.java
@@ -29,6 +29,7 @@ import java.util.regex.Pattern;
import org.apache.ivy.Ivy;
import org.apache.ivyde.common.ivyfile.IvyFileResourceListener;
+import org.apache.ivyde.eclipse.IvyDEsecurityHelper;
import org.apache.ivyde.eclipse.cp.IvyClasspathContainer;
import org.apache.ivyde.eclipse.cp.IvyClasspathContainerHelper;
import org.apache.ivyde.internal.eclipse.cpcontainer.IvyAttachementManager;
@@ -136,6 +137,13 @@ public class IvyPlugin extends AbstractUIPlugin {
this.bundleContext = context;
logInfo("starting IvyDE plugin");
+ if (IvyDEsecurityHelper.credentialsInSecureStorage()) {
+ IvyDEsecurityHelper.cpyCredentialsFromSecureToIvyStorage();
+ logInfo("Credentials loaded from secure storage");
+ } else {
+ logInfo("No credentials stored in secure storage");
+ }
+
Matcher matcher = IVY_VERSION_PATTERN.matcher(Ivy.getIvyVersion());
if (matcher.matches()) {
ivyVersionMajor = Integer.parseInt(matcher.group(1));
@@ -198,8 +206,8 @@ public class IvyPlugin extends AbstractUIPlugin {
ivyMarkerManager = new IvyMarkerManager();
File stateLocation = getStateLocation().toFile();
- ivyAttachementManager = new IvyAttachementManager(new File(stateLocation,
- "attachements.properties"));
+ ivyAttachementManager = new IvyAttachementManager(
+ new File(stateLocation, "attachements.properties"));
File containersStateDir = new File(stateLocation, "cpstates");
if (!containersStateDir.exists()) {
containersStateDir.mkdirs();
@@ -211,8 +219,8 @@ public class IvyPlugin extends AbstractUIPlugin {
Class.forName("org.apache.ivy.osgi.core.ManifestParser");
osgiAvailable = true;
try {
- Class.forName("org.apache.ivy.osgi.core.BundleInfo").getDeclaredMethod(
- "getClasspath");
+ Class.forName("org.apache.ivy.osgi.core.BundleInfo")
+ .getDeclaredMethod("getClasspath", new Class[] {});
osgiClasspathAvailable = true;
} catch (Exception e) {
osgiClasspathAvailable = false;
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/controller/SecuritySetupController.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/controller/SecuritySetupController.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/controller/SecuritySetupController.java
new file mode 100644
index 0000000..21913dc
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/controller/SecuritySetupController.java
@@ -0,0 +1,247 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.controller;
+
+import org.apache.ivyde.eclipse.GUIfactoryHelper;
+import org.apache.ivyde.eclipse.IvyDEsecurityHelper;
+import org.apache.ivyde.eclipse.cp.SecuritySetup;
+import org.apache.ivyde.internal.eclipse.ui.SecuritySetupEditor;
+import org.apache.ivyde.internal.eclipse.ui.components.SecuritySetupDialog;
+import org.apache.ivyde.internal.eclipse.validator.BaseValidator;
+import org.apache.ivyde.internal.eclipse.validator.IValidationReaction;
+import org.apache.ivyde.internal.eclipse.validator.impl.HostValidator;
+import org.apache.ivyde.internal.eclipse.validator.impl.IdValidator;
+import org.apache.ivyde.internal.eclipse.validator.impl.PasswordValidator;
+import org.apache.ivyde.internal.eclipse.validator.impl.RealmValidator;
+import org.apache.ivyde.internal.eclipse.validator.impl.UserNameValidator;
+import org.apache.ivyde.internal.eclipse.validator.reaction.GeneralValidationReaction;
+import org.apache.ivyde.internal.eclipse.validator.reaction.NopValidationReaction;
+import org.eclipse.core.databinding.AggregateValidationStatus;
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.UpdateValueStrategy;
+import org.eclipse.core.databinding.ValidationStatusProvider;
+import org.eclipse.core.databinding.beans.PojoProperties;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.validation.IValidator;
+import org.eclipse.jface.databinding.fieldassist.ControlDecorationSupport;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Widget;
+
+public class SecuritySetupController {
+
+ private SecuritySetupEditor setupEditorGUI;
+
+ private SecuritySetupDialog addDialog;
+
+ private MessageDialog confirmationDialog;
+
+ private SecuritySetup currentSelection = new SecuritySetup();
+
+ private SecuritySetup currentSelectionOldVal = new SecuritySetup();
+
+ private String selectionHost;
+
+ private String selectionRealm;
+
+ private String selectionUserName;
+
+ private boolean addOperation = true;
+
+ private DataBindingContext ctx = new DataBindingContext();
+
+ /**
+ * @param setupEditorGUI
+ * @param addDialog
+ */
+ public SecuritySetupController(SecuritySetupEditor setupEditorGUI) {
+ this.setupEditorGUI = setupEditorGUI;
+ addDialog = new SecuritySetupDialog(setupEditorGUI.getShell());
+ }
+
+ public void addHandlers() {
+ setupEditorGUI.getAddBtn().addSelectionListener(this.createAddBtnSelectionAdapter());
+ setupEditorGUI.getEditBtn().addSelectionListener(this.createEditBtnSelectionAdapter());
+ setupEditorGUI.getDeleteBtn().addSelectionListener(this.createDelBtnSelectionAdapter());
+ setupEditorGUI.getTableViewer()
+ .addSelectionChangedListener(this.createSelectionChangedListener());
+ }
+
+ private SelectionListener createAddBtnSelectionAdapter() {
+ return new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ addOperation = true;
+ currentSelection = new SecuritySetup();
+ addDialog.create();
+ initDialog();
+ if (addDialog.open() == Window.OK) {
+ IvyDEsecurityHelper.addCredentialsToSecureStorage(currentSelection);
+ IvyDEsecurityHelper.addCredentialsToIvyCredentialStorage(currentSelection);
+ // TODO: using init to reload directly from secure storage or use an
+ // intermediate-container?
+ setupEditorGUI.init(IvyDEsecurityHelper.getCredentialsFromSecureStore());
+ } else {
+ // TODO: do something?
+ }
+ addDialog.close();
+ }
+ };
+ }
+
+ private SelectionListener createEditBtnSelectionAdapter() {
+ return new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ addOperation = false;
+ addDialog.create();
+ initDialog();
+ // initDialog(currentSelection);
+ if (addDialog.open() == Window.OK) {
+ IvyDEsecurityHelper.removeCredentials(
+ new SecuritySetup(selectionHost, selectionRealm, selectionUserName, ""));
+ IvyDEsecurityHelper.addCredentialsToSecureStorage(currentSelection);
+ IvyDEsecurityHelper.addCredentialsToIvyCredentialStorage(currentSelection);
+ // TODO: using init to reload directly from secure storage or use an
+ // intermediate-container?
+ setupEditorGUI.init(IvyDEsecurityHelper.getCredentialsFromSecureStore());
+ setupEditorGUI.getEditBtn().setEnabled(false);
+ setupEditorGUI.getDeleteBtn().setEnabled(false);
+ } else {
+ currentSelection.setAllValues(currentSelectionOldVal);
+ }
+ addDialog.close();
+ }
+ };
+ }
+
+ private SelectionListener createDelBtnSelectionAdapter() {
+ return new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ confirmationDialog = GUIfactoryHelper.buildConfirmationDialog(
+ setupEditorGUI.getShell(), "Confirmation",
+ "Remove selected credentials from secure storage?");
+ if (confirmationDialog.open() == Window.OK) {
+ currentSelection.setHost(selectionHost);
+ currentSelection.setRealm(selectionRealm);
+ IvyDEsecurityHelper.removeCredentials(
+ new SecuritySetup(selectionHost, selectionRealm, selectionUserName, ""));
+ setupEditorGUI.init(IvyDEsecurityHelper.getCredentialsFromSecureStore());
+ setupEditorGUI.getEditBtn().setEnabled(false);
+ setupEditorGUI.getDeleteBtn().setEnabled(false);
+ }
+ confirmationDialog.close();
+ }
+ };
+ }
+
+ private ISelectionChangedListener createSelectionChangedListener() {
+ return new ISelectionChangedListener() {
+ @Override
+ public void selectionChanged(final SelectionChangedEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+ currentSelection = (SecuritySetup) selection.getFirstElement();
+ setupEditorGUI.getEditBtn().setEnabled(true);
+ setupEditorGUI.getDeleteBtn().setEnabled(true);
+ if (currentSelection != null) {
+ selectionHost = currentSelection.getHost();
+ selectionRealm = currentSelection.getRealm();
+ selectionUserName = currentSelection.getUserName();
+ currentSelectionOldVal = new SecuritySetup(selectionHost, selectionRealm,
+ selectionUserName, currentSelection.getPwd());
+ } else {
+ currentSelection = new SecuritySetup();
+ }
+ }
+ };
+ }
+
+ private void createHostDataBinder(String selectedHost, String selectedRealm,
+ boolean isAddOperation) {
+ IValidationReaction generalValidationReaction = new GeneralValidationReaction(
+ this.addDialog.getOkButton(), this.addDialog.getErrorLabel(),
+ this.addDialog.getErrorIcon());
+ IValidationReaction nopValidationReaction = new NopValidationReaction();
+
+ BaseValidator hostValidator = new HostValidator(generalValidationReaction);
+ BaseValidator realmValidator = new RealmValidator(generalValidationReaction);
+ BaseValidator idValidator = new IdValidator(generalValidationReaction, isAddOperation,
+ selectedHost, selectedRealm);
+ BaseValidator userNameValidator = new UserNameValidator(nopValidationReaction);
+ BaseValidator passwordValidator = new PasswordValidator(nopValidationReaction);
+
+ this.addDataBinder(this.addDialog.getIdText(), idValidator, SecuritySetup.class, "id",
+ this.currentSelection, true);
+ this.addDataBinder(this.addDialog.getHostText(), hostValidator, SecuritySetup.class, "host",
+ this.currentSelection, true);
+ this.addDataBinder(this.addDialog.getRealmText(), realmValidator, SecuritySetup.class,
+ "realm", this.currentSelection, true);
+ this.addDataBinder(this.addDialog.getUserNameText(), userNameValidator, SecuritySetup.class,
+ "userName", this.currentSelection, true);
+ this.addDataBinder(this.addDialog.getPwdText(), passwordValidator, SecuritySetup.class,
+ "pwd", this.currentSelection, true);
+ }
+
+ private void addDataBinder(Widget toObserve, IValidator validator, Class<?> observableClass,
+ String propertyName, Object observedProperty, boolean textDecorationEnabled) {
+ IObservableValue textObservable = WidgetProperties.text(SWT.Modify).observe(toObserve);
+ UpdateValueStrategy strategy = new UpdateValueStrategy();
+ strategy.setBeforeSetValidator(validator);
+
+ ValidationStatusProvider binding = this.ctx.bindValue(textObservable,
+ PojoProperties.value(observableClass, propertyName).observe(observedProperty), strategy,
+ null);
+ if (textDecorationEnabled) {
+ ControlDecorationSupport.create(binding, SWT.LEFT);
+ }
+ final IObservableValue errorObservable = WidgetProperties.text()
+ .observe(this.addDialog.getErrorLabel());
+
+ ctx.bindValue(errorObservable, new AggregateValidationStatus(ctx.getBindings(),
+ AggregateValidationStatus.MAX_SEVERITY),
+ null, null);
+
+ }
+
+ private void initDialog() {
+ this.createHostDataBinder(this.selectionHost, this.selectionRealm, this.addOperation);
+
+ addDialog.getHostText().addModifyListener(createModifyListener());
+ addDialog.getRealmText().addModifyListener(createModifyListener());
+ }
+
+ private ModifyListener createModifyListener() {
+ return new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ addDialog.getIdText().setText(
+ addDialog.getHostText().getText() + "@" + addDialog.getRealmText().getText());
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/cpcontainer/SecuritySetupContainer.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/cpcontainer/SecuritySetupContainer.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/cpcontainer/SecuritySetupContainer.java
new file mode 100644
index 0000000..3ee3aac
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/cpcontainer/SecuritySetupContainer.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.cpcontainer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.ivyde.eclipse.cp.SecuritySetup;
+@Deprecated
+//TODO: really needed?
+public final class SecuritySetupContainer {
+
+ public static final SecuritySetupContainer INSTANCE = new SecuritySetupContainer();
+
+ private static List<SecuritySetup> credentials = new ArrayList<SecuritySetup>();
+
+ private SecuritySetupContainer() {
+
+ }
+
+ //test-data
+ static{
+ credentials = new ArrayList<SecuritySetup>();
+ credentials.add(new SecuritySetup("localhost","nexus","admin","secret"));
+ credentials.add(new SecuritySetup("arctis","nexus3","adminArctis","secret"));
+ credentials.add(new SecuritySetup("remote","nexus repo","adminRemote","secret"));
+ }
+
+ public static void addEntry(SecuritySetup entry) {
+ credentials.add(entry);
+ }
+
+ public static void removeEntry(SecuritySetup entry) {
+ credentials.remove(entry);
+ }
+
+ public static List<SecuritySetup> getAllCredentials() {
+ return credentials;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/SecuritySetupEditor.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/SecuritySetupEditor.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/SecuritySetupEditor.java
new file mode 100644
index 0000000..c32b3c7
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/SecuritySetupEditor.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.ui;
+
+import java.util.List;
+
+import org.apache.ivyde.eclipse.GUIfactoryHelper;
+import org.apache.ivyde.eclipse.cp.SecuritySetup;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+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.Group;
+import org.eclipse.swt.widgets.Table;
+
+public class SecuritySetupEditor extends Composite {
+
+ private TableViewer tableViewer;
+ private Group credentialsGroup;
+ private Button addBtn;
+ private Button editBtn;
+ private Button deleteBtn;
+ private Table table;
+
+ public SecuritySetupEditor(Composite parent, int style) {
+ super(parent, style);
+ setLayout(new GridLayout());
+
+ credentialsGroup = new Group(this, style);
+ credentialsGroup.setText("Credentials");
+ credentialsGroup.setLayout(new GridLayout(2, false));
+ credentialsGroup.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false,1,1));
+
+ tableViewer = new TableViewer(credentialsGroup,
+ SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
+
+ GUIfactoryHelper.buildTableColumn(tableViewer, 100, "Host", GUIfactoryHelper.buildHostLabelProvider());
+ GUIfactoryHelper.buildTableColumn(tableViewer, 175, "Realm", GUIfactoryHelper.buildRealmLabelProvider());
+ GUIfactoryHelper.buildTableColumn(tableViewer, 100, "Username", GUIfactoryHelper.buildUsernameLabelProvider());
+ GUIfactoryHelper.buildTableColumn(tableViewer, 100, "Pwd", GUIfactoryHelper.buildPwdLabelProvider());
+
+ // make lines and header visible
+ table = tableViewer.getTable();
+ table.setParent(credentialsGroup);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ GridData tableGD = new GridData(GridData.FILL, GridData.FILL, true, false,1,3);
+ tableGD.heightHint=200;
+ table.setLayoutData(tableGD);
+
+ addBtn = new Button(credentialsGroup, SWT.PUSH);
+ addBtn.setText("Add...");
+ addBtn.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, false, false,1,1));
+
+ editBtn = new Button(credentialsGroup, SWT.PUSH);
+ editBtn.setText("Edit...");
+ editBtn.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, false, false,1,1));
+ editBtn.setEnabled(false);
+
+ deleteBtn = new Button(credentialsGroup, SWT.PUSH);
+ deleteBtn.setText("Remove");
+ deleteBtn.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, false, false,1,1));
+ deleteBtn.setEnabled(false);
+ }
+
+ public void init(List<SecuritySetup> setup) {
+ this.tableViewer.setContentProvider(ArrayContentProvider.getInstance());
+ this.tableViewer.setInput(setup);
+ }
+
+ public void setEnabled(boolean enabled) {
+ super.setEnabled(enabled);
+ credentialsGroup.setEnabled(enabled);
+ addBtn.setEnabled(enabled);
+ editBtn.setEnabled(enabled);
+ deleteBtn.setEnabled(enabled);
+ table.setEnabled(enabled);
+ }
+
+ /**
+ * @return the addBtn
+ */
+ public Button getAddBtn() {
+ return addBtn;
+ }
+
+ /**
+ * @return the editBtn
+ */
+ public Button getEditBtn() {
+ return editBtn;
+ }
+
+ /**
+ * @return the deleteBtn
+ */
+ public Button getDeleteBtn() {
+ return deleteBtn;
+ }
+
+ /**
+ * @return the tableViewer
+ */
+ public TableViewer getTableViewer() {
+ return tableViewer;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/components/CustomConfirmationDialog.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/components/CustomConfirmationDialog.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/components/CustomConfirmationDialog.java
new file mode 100644
index 0000000..7189a79
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/components/CustomConfirmationDialog.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.ui.components;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Shell;
+
+public class CustomConfirmationDialog extends MessageDialog {
+
+ public CustomConfirmationDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage,
+ String dialogMessage, int dialogImageType, int defaultIndex,
+ String[] dialogButtonLabels) {
+ super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType,
+ dialogButtonLabels, defaultIndex);
+ }
+
+ public CustomConfirmationDialog(Shell parentShell, String dialogTitle, String dialogMessage) {
+ super(parentShell, dialogTitle, null, dialogMessage, MessageDialog.CONFIRM,
+ new String[] {"Ok", "Cancel"}, 0);
+ }
+
+ @Override
+ public Point getInitialSize() {
+ return new Point(400, 150);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/components/SecuritySetupDialog.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/components/SecuritySetupDialog.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/components/SecuritySetupDialog.java
new file mode 100644
index 0000000..50c4d4e
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/components/SecuritySetupDialog.java
@@ -0,0 +1,225 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.ui.components;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+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.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class SecuritySetupDialog extends Dialog {
+
+ public static final String TOOLTIP_HOST = "The host";
+
+ public static final String TOOLTIP_REALM = "The realm for authentication";
+
+ public static final String TOOLTIP_USERNAME = "The username";
+
+ public static final String TOOLTIP_PASSWORD = "The password";
+
+ private Text idText;
+
+ private Text hostText;
+
+ private Text realmText;
+
+ private Text userNameText;
+
+ private Text pwdText;
+
+ private Label idLabel;
+
+ private Label hostLabel;
+
+ private Label realmLabel;
+
+ private Label userNameLabel;
+
+ private Label pwdLabel;
+
+ private Label errorLabel;
+
+ private Label errorIcon;
+
+ public SecuritySetupDialog(Shell parentShell) {
+ super(parentShell);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+
+ Composite errorContainer = (Composite) super.createDialogArea(parent);
+ GridLayout errorLayout = new GridLayout(2, false);
+ errorContainer.setLayout(errorLayout);
+
+ errorIcon = new Label(errorContainer, SWT.NONE);
+ errorIcon.setImage(JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_ERROR));
+ // errorIcon.setLayoutData(new GridData(20,20));
+
+ errorLabel = new Label(errorContainer, SWT.NONE);
+ errorLabel.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
+
+ Label separator = new Label(errorContainer, SWT.HORIZONTAL | SWT.SEPARATOR);
+ separator.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false, 2, 1));
+
+ Composite container = (Composite) super.createDialogArea(parent);
+ GridLayout layout = new GridLayout(2, false);
+ // layout.marginRight = 5;
+ // layout.marginLeft = 10;
+ container.setLayout(layout);
+
+ idLabel = new Label(container, SWT.NONE);
+ idLabel.setText("Id:");
+
+ idText = new Text(container, SWT.NONE);
+ idText.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
+ idText.setEditable(false);
+ idText.setEnabled(false);
+
+ hostLabel = new Label(container, SWT.NONE);
+ hostLabel.setText("Host:");
+
+ hostText = new Text(container, SWT.SINGLE | SWT.BORDER);
+ hostText.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
+ hostText.setToolTipText(TOOLTIP_HOST);
+
+ realmLabel = new Label(container, SWT.NONE);
+ realmLabel.setText("Realm:");
+
+ realmText = new Text(container, SWT.SINGLE | SWT.BORDER);
+ realmText.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
+ realmText.setToolTipText(TOOLTIP_REALM);
+
+ userNameLabel = new Label(container, SWT.NONE);
+ userNameLabel.setText("Username:");
+
+ userNameText = new Text(container, SWT.SINGLE | SWT.BORDER);
+ userNameText.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
+ userNameText.setToolTipText(TOOLTIP_USERNAME);
+
+ pwdLabel = new Label(container, SWT.NONE);
+ pwdLabel.setText("Password:");
+
+ pwdText = new Text(container, SWT.PASSWORD | SWT.BORDER);
+ pwdText.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
+ pwdText.setToolTipText(TOOLTIP_PASSWORD);
+
+ return container;
+ }
+
+ // overriding this methods allows you to set the
+ // title of the custom dialog
+ @Override
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ // newShell.setText("Add");
+ }
+
+ @Override
+ protected Point getInitialSize() {
+ return new Point(370, 280);
+ }
+
+ public void setEnabled(boolean enabled) {
+
+ // super.setEnabled(enabled);
+ idLabel.setEnabled(true);
+ idText.setEnabled(true);
+ hostLabel.setEnabled(enabled);
+ hostText.setEnabled(enabled);
+ realmLabel.setEnabled(enabled);
+ realmText.setEnabled(enabled);
+ userNameLabel.setEnabled(enabled);
+ userNameText.setEnabled(enabled);
+ pwdLabel.setEnabled(enabled);
+ pwdText.setEnabled(enabled);
+
+ errorIcon.setEnabled(true);
+ errorLabel.setEnabled(true);
+
+ }
+
+ public Button getOkButton() {
+ return super.getButton(IDialogConstants.OK_ID);
+ }
+
+ @Override
+ protected void okPressed() {
+ // TODO: Do something?
+ super.okPressed();
+ }
+
+ /**
+ * @return the hostText
+ */
+ public Text getHostText() {
+ return hostText;
+ }
+
+ /**
+ * @return the realmText
+ */
+ public Text getRealmText() {
+ return realmText;
+ }
+
+ /**
+ * @return the userNameText
+ */
+ public Text getUserNameText() {
+ return userNameText;
+ }
+
+ /**
+ * @return the pwdText
+ */
+ public Text getPwdText() {
+ return pwdText;
+ }
+
+ /**
+ * @return the idText
+ */
+ public Text getIdText() {
+ return idText;
+ }
+
+ /**
+ * @return the errorLabel
+ */
+ public Label getErrorLabel() {
+ return errorLabel;
+ }
+
+ /**
+ * @return the errorIcon
+ */
+ public Label getErrorIcon() {
+ return errorIcon;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/preferences/SecuritySetupPreferencePage.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/preferences/SecuritySetupPreferencePage.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/preferences/SecuritySetupPreferencePage.java
new file mode 100644
index 0000000..b37407b
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/ui/preferences/SecuritySetupPreferencePage.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.ui.preferences;
+
+import org.apache.ivyde.eclipse.IvyDEsecurityHelper;
+import org.apache.ivyde.eclipse.cp.SecuritySetup;
+import org.apache.ivyde.internal.eclipse.IvyPlugin;
+import org.apache.ivyde.internal.eclipse.controller.SecuritySetupController;
+import org.apache.ivyde.internal.eclipse.ui.SecuritySetupEditor;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class SecuritySetupPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+
+ /** the ID of the preference page */
+ public static final String PEREFERENCE_PAGE_ID = "org.apache.ivyde.eclipse.ui.preferences.SecuritySetupPreferencePage";
+
+ private SecuritySetupEditor securitySetupComposite;
+
+ private SecuritySetupController buttonController;
+
+ public SecuritySetupPreferencePage() {
+ setPreferenceStore(IvyPlugin.getDefault().getPreferenceStore());
+ }
+
+ public void init(IWorkbench workbench) {
+ setPreferenceStore(IvyPlugin.getDefault().getPreferenceStore());
+ }
+
+ protected Control createContents(Composite parent) {
+ securitySetupComposite = new SecuritySetupEditor(parent, SWT.NONE);
+ securitySetupComposite
+ .setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
+
+ buttonController = new SecuritySetupController(securitySetupComposite);
+ buttonController.addHandlers();
+
+ securitySetupComposite.init(IvyDEsecurityHelper.getCredentialsFromSecureStore());
+
+ return securitySetupComposite;
+ }
+
+ /*
+ * NOTE: The table containing the credentials is directly coupled with the eclipse
+ * secure-storage:
+ * - all operations are performed immediately on the secure-storage
+ * - performOk(), performApply() and performDefaults() won't have any additional effects: They just
+ * redo performed operations (for the sake of completeness)
+ */
+
+ @Override
+ public boolean performOk() {
+ // TODO: Do what? => directly coupled with secure-storage
+ IvyDEsecurityHelper.cpyCredentialsFromSecureToIvyStorage();
+ return true;
+ }
+
+ @Override
+ protected void performApply() {
+ // TODO: Do what? => directly coupled with secure-storage
+ IvyDEsecurityHelper.cpyCredentialsFromSecureToIvyStorage();
+ super.performApply();
+ }
+
+ @Override
+ protected void performDefaults() {
+ // TODO: Do nothing? => directly coupled with secure-storage...
+ securitySetupComposite.init(IvyDEsecurityHelper.getCredentialsFromSecureStore());
+ super.performDefaults();
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/BaseValidator.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/BaseValidator.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/BaseValidator.java
new file mode 100644
index 0000000..b1c87bd
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/BaseValidator.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.validator;
+
+import org.eclipse.core.databinding.validation.IValidator;
+import org.eclipse.core.runtime.IStatus;
+
+public abstract class BaseValidator implements IValidator {
+
+ private IValidationReaction reaction;
+
+ private IStatus validationStatus;
+
+ public static final String EMPTY_ERROR = "The property '$entry' cannot be empty";
+
+ public static final String EXISTING_ENTRY_ERROR = "An entry with that host and realm already exists";
+
+ public static final String VALID_MESSAGE = "Valid ivy credentials: Press 'OK' to save them";
+
+ public abstract boolean doValidation(Object validatedObject);
+
+ @Override
+ public IStatus validate(Object value) {
+ if (doValidation(value)) {
+ this.reaction.ok();
+ } else {
+ this.reaction.error();
+ }
+ return this.validationStatus;
+ }
+
+ /**
+ * @param exclusion
+ * @param reaction
+ */
+ public BaseValidator(IValidationReaction reaction) {
+ this.reaction = reaction;
+ }
+
+ public void setValidationStatus(IStatus validationStatus) {
+ this.validationStatus = validationStatus;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/IValidationReaction.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/IValidationReaction.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/IValidationReaction.java
new file mode 100644
index 0000000..94d2204
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/IValidationReaction.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.validator;
+
+public interface IValidationReaction {
+
+ public void ok();
+
+ public void error();
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/HostValidator.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/HostValidator.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/HostValidator.java
new file mode 100644
index 0000000..6d476d8
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/HostValidator.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.validator.impl;
+
+import org.apache.ivyde.internal.eclipse.validator.BaseValidator;
+import org.apache.ivyde.internal.eclipse.validator.IValidationReaction;
+import org.eclipse.core.databinding.validation.ValidationStatus;
+import org.eclipse.core.runtime.IStatus;
+
+public class HostValidator extends BaseValidator {
+
+ /**
+ * @param reaction
+ */
+ public HostValidator(IValidationReaction reaction) {
+ super(reaction);
+ }
+
+ @Override
+ public boolean doValidation(Object validatedObject) {
+ String host = (String) validatedObject;
+ boolean valid = !host.equals("");
+ IStatus validationStatus = valid ? ValidationStatus.ok()
+ : ValidationStatus.error(EMPTY_ERROR.replace("$entry", "Host"));
+ super.setValidationStatus(validationStatus);
+ return !host.equals("");
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/IdValidator.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/IdValidator.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/IdValidator.java
new file mode 100644
index 0000000..6a5cdf9
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/IdValidator.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.validator.impl;
+
+import org.apache.ivyde.eclipse.IvyDEsecurityHelper;
+import org.apache.ivyde.internal.eclipse.validator.BaseValidator;
+import org.apache.ivyde.internal.eclipse.validator.IValidationReaction;
+import org.eclipse.core.databinding.validation.ValidationStatus;
+import org.eclipse.core.runtime.IStatus;
+
+public class IdValidator extends BaseValidator {
+
+ private boolean isAddOperation;
+
+ private String prevHostVal;
+
+ private String prevRealmVal;
+
+ /**
+ * @param reaction
+ * @param isAddOperation
+ * @param prevHostVal
+ * @param prevRealmVal
+ */
+ public IdValidator(IValidationReaction reaction, boolean isAddOperation, String prevHostVal,
+ String prevRealmVal) {
+ super(reaction);
+ this.isAddOperation = isAddOperation;
+ this.prevHostVal = prevHostVal;
+ this.prevRealmVal = prevRealmVal;
+ }
+
+ @Override
+ public boolean doValidation(Object validatedObject) {
+ String id = (String) validatedObject;
+ String[] hostRealm = id.split("@");
+ boolean valid = true;
+ String message = VALID_MESSAGE;
+ IStatus validationStatus;
+ if (id.equals("") || id.equals("@")) {
+ message = "Properties 'Host' and 'Realm' cannot be empty";
+ valid = false;
+ } else if (id.indexOf("@") == 0) {
+ message = EMPTY_ERROR.replace("$entry", "Host");
+ valid = false;
+ } else if (id.indexOf("@") == id.length() - 1) {
+ message = EMPTY_ERROR.replace("$entry", "Realm");
+ valid = false;
+ } else if (!isAddOperation && prevHostVal.equals(hostRealm[0])
+ && prevRealmVal.equals(hostRealm[1])) {
+ valid = true;
+ } else if (IvyDEsecurityHelper.hostExistsInSecureStorage(hostRealm[0], hostRealm[1])) {
+ message = EXISTING_ENTRY_ERROR;
+ valid = false;
+ }
+
+ if (valid) {
+ validationStatus = ValidationStatus.info(message);
+ } else {
+ validationStatus = ValidationStatus.error(message);
+ }
+ super.setValidationStatus(validationStatus);
+ return valid;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/PasswordValidator.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/PasswordValidator.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/PasswordValidator.java
new file mode 100644
index 0000000..88d18df
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/PasswordValidator.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.validator.impl;
+
+import org.apache.ivyde.internal.eclipse.validator.BaseValidator;
+import org.apache.ivyde.internal.eclipse.validator.IValidationReaction;
+import org.eclipse.core.databinding.validation.ValidationStatus;
+
+public class PasswordValidator extends BaseValidator {
+
+ public PasswordValidator(IValidationReaction reaction) {
+ super(reaction);
+ }
+
+ @Override
+ public boolean doValidation(Object validatedObject) {
+ // TODO Validation here?
+ super.setValidationStatus(ValidationStatus.ok());
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/RealmValidator.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/RealmValidator.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/RealmValidator.java
new file mode 100644
index 0000000..4dcfd67
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/RealmValidator.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.validator.impl;
+
+import org.apache.ivyde.internal.eclipse.validator.BaseValidator;
+import org.apache.ivyde.internal.eclipse.validator.IValidationReaction;
+import org.eclipse.core.databinding.validation.ValidationStatus;
+import org.eclipse.core.runtime.IStatus;
+
+public class RealmValidator extends BaseValidator {
+
+ /**
+ * @param reaction
+ */
+ public RealmValidator(IValidationReaction reaction) {
+ super(reaction);
+ }
+
+ @Override
+ public boolean doValidation(Object validatedObject) {
+ String realm = (String) validatedObject;
+ boolean valid = !realm.equals("");
+ IStatus validationStatus = valid ? ValidationStatus.ok()
+ : ValidationStatus.error(EMPTY_ERROR.replace("$entry", "Realm"));
+ super.setValidationStatus(validationStatus);
+ return !realm.equals("");
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/UserNameValidator.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/UserNameValidator.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/UserNameValidator.java
new file mode 100644
index 0000000..5d9c4c4
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/impl/UserNameValidator.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.validator.impl;
+
+import org.apache.ivyde.internal.eclipse.validator.BaseValidator;
+import org.apache.ivyde.internal.eclipse.validator.IValidationReaction;
+import org.eclipse.core.databinding.validation.ValidationStatus;
+
+public class UserNameValidator extends BaseValidator {
+
+ /**
+ * @param reaction
+ */
+ public UserNameValidator(IValidationReaction reaction) {
+ super(reaction);
+ }
+
+ @Override
+ public boolean doValidation(Object validatedObject) {
+ // TODO Validation here?
+ super.setValidationStatus(ValidationStatus.ok());
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/reaction/GeneralValidationReaction.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/reaction/GeneralValidationReaction.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/reaction/GeneralValidationReaction.java
new file mode 100644
index 0000000..0020bdf
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/reaction/GeneralValidationReaction.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.validator.reaction;
+
+import org.apache.ivyde.internal.eclipse.validator.IValidationReaction;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Label;
+
+public class GeneralValidationReaction implements IValidationReaction {
+
+ private Button okButton;
+
+ private Label errorLabel;
+
+ private Label errorIcon;
+
+ @Override
+ public void ok() {
+ this.okButton.setEnabled(true);
+ // this.errorIcon.setVisible(false);
+ // this.errorLabel.setVisible(false);
+ this.errorIcon.setImage(JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_INFO));
+ }
+
+ /**
+ * @param okButton
+ * @param errorLabel
+ * @param errorIcon
+ */
+ public GeneralValidationReaction(Button okButton, Label errorLabel, Label errorIcon) {
+ this.okButton = okButton;
+ this.errorLabel = errorLabel;
+ this.errorIcon = errorIcon;
+ }
+
+ @Override
+ public void error() {
+ this.okButton.setEnabled(false);
+ this.errorIcon.setImage(JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_ERROR));
+ // this.errorLabel.setText("Insert credentials");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ant-ivyde/blob/a3187542/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/reaction/NopValidationReaction.java
----------------------------------------------------------------------
diff --git a/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/reaction/NopValidationReaction.java b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/reaction/NopValidationReaction.java
new file mode 100644
index 0000000..9bf63af
--- /dev/null
+++ b/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/validator/reaction/NopValidationReaction.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.ivyde.internal.eclipse.validator.reaction;
+
+import org.apache.ivyde.internal.eclipse.validator.IValidationReaction;
+
+public class NopValidationReaction implements IValidationReaction {
+
+ @Override
+ public void ok() {
+ // Do nothing ;-)
+ }
+
+ @Override
+ public void error() {
+ // Do nothing ;-)
+ }
+
+}