[jbosstools-commits] JBoss Tools SVN: r41805 - branches/jbosstools-3.3.x/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Fri Jun 8 07:18:41 EDT 2012


Author: adietish
Date: 2012-06-08 07:18:39 -0400 (Fri, 08 Jun 2012)
New Revision: 41805

Modified:
   branches/jbosstools-3.3.x/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/ProjectAndServerAdapterSettingsWizardPage.java
   branches/jbosstools-3.3.x/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/ProjectAndServerAdapterSettingsWizardPageModel.java
Log:
[JBIDE-12134] moved validation from model to UI and implemented a MultiValidator in the way it is implemented in all other pages

Modified: branches/jbosstools-3.3.x/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/ProjectAndServerAdapterSettingsWizardPage.java
===================================================================
--- branches/jbosstools-3.3.x/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/ProjectAndServerAdapterSettingsWizardPage.java	2012-06-08 02:01:57 UTC (rev 41804)
+++ branches/jbosstools-3.3.x/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/ProjectAndServerAdapterSettingsWizardPage.java	2012-06-08 11:18:39 UTC (rev 41805)
@@ -15,12 +15,14 @@
 
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.validation.MultiValidator;
-import org.eclipse.core.databinding.validation.ValidationStatus;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.databinding.fieldassist.ControlDecorationSupport;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
 import org.eclipse.jface.databinding.swt.WidgetProperties;
@@ -33,6 +35,7 @@
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jgit.util.StringUtils;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -46,6 +49,7 @@
 import org.eclipse.ui.dialogs.WorkingSetGroup;
 import org.jboss.tools.common.ui.databinding.InvertingBooleanConverter;
 import org.jboss.tools.common.ui.databinding.ValueBindingBuilder;
+import org.jboss.tools.openshift.express.internal.ui.OpenShiftUIActivator;
 
 /**
  * @author Andre Dietisheim
@@ -146,10 +150,10 @@
 		ValueBindingBuilder.bind(WidgetProperties.enabled().observe(browseProjectsButton))
 				.notUpdating(newProjectObservable).converting(new InvertingBooleanConverter()).in(dbc);
 
-		final IObservableValue existingProjectValidityObservable = BeanProperties.value(
-				ProjectAndServerAdapterSettingsWizardPageModel.PROPERTY_EXISTING_PROJECT_VALIDITY).observe(pageModel);
-		final UseExistingOpenProjectValidator existingProjectValidator = new UseExistingOpenProjectValidator(
-				existingProjectValidityObservable);
+		final IObservableValue applicationNameModelObservable = BeanProperties.value(
+				GitCloningSettingsWizardPageModel.PROPERTY_APPLICATION_NAME).observe(pageModel);
+		final UseExistingOpenProjectValidator existingProjectValidator = 
+				new UseExistingOpenProjectValidator(applicationNameModelObservable, newProjectObservable, projectNameModelObservable);
 		dbc.addValidationStatusProvider(existingProjectValidator);
 		ControlDecorationSupport.create(existingProjectValidator, SWT.LEFT | SWT.TOP);
 
@@ -255,27 +259,60 @@
 
 	class UseExistingOpenProjectValidator extends MultiValidator {
 
-		private final IObservableValue existingProjectValidityObservable;
+		private final IObservableValue applicationNameObservable;
+		private final IObservableValue newProjectObservable;
+		private final IObservableValue projectNameObservable;
 
-		public UseExistingOpenProjectValidator(IObservableValue existingProjectValidityObservable) {
-			this.existingProjectValidityObservable = existingProjectValidityObservable;
+		public UseExistingOpenProjectValidator(IObservableValue applicationNameObservable, IObservableValue newProjectObservable, IObservableValue projectNameObservable) {
+			this.applicationNameObservable = applicationNameObservable;
+			this.newProjectObservable = newProjectObservable;
+			this.projectNameObservable = projectNameObservable;
 		}
 
 		@Override
-		protected IStatus validate() {
-			final IStatus existingProjectValidityStatus = (IStatus) existingProjectValidityObservable.getValue();
-
-			if (existingProjectValidityStatus == null) {
-				return ValidationStatus.ok();
+		public IStatus validate() {
+			IStatus status = Status.OK_STATUS;
+			final String projectName = (String) projectNameObservable.getValue();
+			final Boolean isNewProject = (Boolean) newProjectObservable.getValue();
+			if (isNewProject) {
+				final String applicationName = (String) applicationNameObservable.getValue();
+				if (StringUtils.isEmptyOrNull(applicationName)) {
+					status = OpenShiftUIActivator.createErrorStatus("You have to choose an application name");
+				} else {
+					final IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(applicationName);
+					if(project.exists()) {
+						status = OpenShiftUIActivator.createErrorStatus(
+								NLS.bind("A project named {0} already exists in the workspace.", applicationName));
+					}
+				}
+			} else {
+				if (projectName == null || projectName.isEmpty()) {
+					status = OpenShiftUIActivator.createErrorStatus("Select an open project in the workspace.");
+				} else {
+					final IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+					if (!project.exists()) {
+						status = OpenShiftUIActivator.createErrorStatus(
+								NLS.bind("The project {0} does not exist in your workspace.", projectName));
+					} else if (!project.isOpen()) {
+						status = OpenShiftUIActivator.createErrorStatus(
+								NLS.bind("The project {0} is not open.", projectName));
+					}
+				}
 			}
-			return existingProjectValidityStatus;
+			return status;
 		}
+
+		@Override
+		public IObservableList getTargets() {
+			WritableList targets = new WritableList();
+			targets.add(projectNameObservable);
+			return targets;
+		}
 	}
 
 	@Override
 	protected void onPageActivated(DataBindingContext dbc) {
 		setPageTitle();
-		pageModel.validateExistingProject();
 	}
 
 	private void setPageTitle() {

Modified: branches/jbosstools-3.3.x/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/ProjectAndServerAdapterSettingsWizardPageModel.java
===================================================================
--- branches/jbosstools-3.3.x/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/ProjectAndServerAdapterSettingsWizardPageModel.java	2012-06-08 02:01:57 UTC (rev 41804)
+++ branches/jbosstools-3.3.x/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/ProjectAndServerAdapterSettingsWizardPageModel.java	2012-06-08 11:18:39 UTC (rev 41805)
@@ -10,13 +10,10 @@
  ******************************************************************************/
 package org.jboss.tools.openshift.express.internal.ui.wizard;
 
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
 import org.jboss.tools.common.ui.databinding.ObservableUIPojo;
-import org.jboss.tools.openshift.express.internal.ui.OpenShiftUIActivator;
 
 /**
  * @author Andre Dietisheim
@@ -25,6 +22,8 @@
  */
 public class ProjectAndServerAdapterSettingsWizardPageModel extends ObservableUIPojo {
 
+	public static final String PROPERTY_APPLICATION_NAME = "applicationName";
+
 	/** whether this is a new project or not. */
 	public static final String PROPERTY_IS_NEW_PROJECT = "newProject";
 
@@ -34,24 +33,32 @@
 	/** whether this a server adapter should be created, or not. */
 	public static final String PROPERTY_CREATE_SERVER_ADAPTER = "createServerAdapter";
 
-	/** Whether the existing project is a valid one or not. */
-	public static final String PROPERTY_EXISTING_PROJECT_VALIDITY = "existingProjectValidity";
-
 	private IOpenShiftExpressWizardModel wizardModel;
 
-	private IStatus existingProjectValidity;
-
 	public ProjectAndServerAdapterSettingsWizardPageModel(IOpenShiftExpressWizardModel wizardModel) {
 		this.wizardModel = wizardModel;
 		setNewProject(true);
+		wizardModel.addPropertyChangeListener(IOpenShiftExpressWizardModel.APPLICATION_NAME, onWizardApplicationNameChanged());
 	}
 
+	/**
+	 * Listener to propagate the application name changes from the underlying WizardModel into this WizardPageModel, so that properties can be affected here, too.
+	 * @return
+	 */
+	private PropertyChangeListener onWizardApplicationNameChanged() {
+		return new PropertyChangeListener() {
+			@Override
+			public void propertyChange(PropertyChangeEvent evt) {
+				firePropertyChange(PROPERTY_APPLICATION_NAME, evt.getOldValue(), evt.getNewValue());
+			}
+		};
+	}
+
 	public void setNewProject(boolean newProject) {
 		firePropertyChange(PROPERTY_IS_NEW_PROJECT, wizardModel.isNewProject(), wizardModel.setNewProject(newProject));
 		if(wizardModel.isNewProject()) {
 			setProjectName(null);
 		}
-		validateExistingProject();
 	}
 
 	public boolean isNewProject() {
@@ -69,7 +76,6 @@
 
 	public void setProjectName(String projectName) {
 		firePropertyChange(PROPERTY_PROJECT_NAME, wizardModel.getProjectName(), wizardModel.setProjectName(projectName));
-		validateExistingProject();
 	}
 
 	public String getProjectName() {
@@ -79,46 +85,4 @@
 	public String getApplicationName() {
 		return wizardModel.getApplicationName();
 	}
-
-	public IStatus validateExistingProject() {
-		IStatus status = Status.OK_STATUS;
-		final String applicationName = getApplicationName();
-		if (isNewProject()) {
-			if (applicationName == null) {
-				status = OpenShiftUIActivator.createErrorStatus("You have to choose an application name");
-			} else {
-				final IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(applicationName);
-				if(project.exists()) {
-					status = OpenShiftUIActivator.createErrorStatus(
-							NLS.bind("A project named {0} already exists in the workspace.", applicationName));
-				}
-			}
-		} else {
-			final String projectName = wizardModel.getProjectName();
-			if (projectName == null || projectName.isEmpty()) {
-				status = OpenShiftUIActivator.createErrorStatus("Select an open project in the workspace.");
-			} else {
-				final IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
-				if (!project.exists()) {
-					status = OpenShiftUIActivator.createErrorStatus(
-							NLS.bind("The project {0} does not exist in your workspace.", projectName));
-				} else if (!project.isOpen()) {
-					status = OpenShiftUIActivator.createErrorStatus(
-							NLS.bind("The project {0} is not open.", projectName));
-				}
-			}
-		}
-		setExistingProjectValidity(status);
-		return status;
-	}
-
-	public void setExistingProjectValidity(IStatus status) {
-		firePropertyChange(PROPERTY_EXISTING_PROJECT_VALIDITY, this.existingProjectValidity,
-				this.existingProjectValidity = status);
-	}
-
-	public IStatus getExistingProjectValidity() {
-		return this.existingProjectValidity;
-	}
-
 }



More information about the jbosstools-commits mailing list