package com.tibco.as.spacebar.ui.wizards.space; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import com.tibco.as.spacebar.ui.model.IElement; public abstract class AbstractEditElementWizardPage<T extends IElement> extends WizardPage implements PropertyChangeListener { private T edited; private T original; public AbstractEditElementWizardPage(String pageName, T original, T edited) { super(pageName); this.original = original; this.edited = edited; } @Override public void createControl(Composite parent) { setControl(getControl(parent, edited)); edited.addPropertyChangeListener("name", this); validate(); } protected abstract Control getControl(Composite parent, T edited); protected T getEdited() { return edited; } @Override public void propertyChange(PropertyChangeEvent evt) { validate(); } protected void validate() { String name = edited.getName(); if (name == null || name.trim().length() == 0) { setErrorMessage(getEmptyNameMessage(edited)); setPageComplete(false); } else { IElement existing = edited.getParent().getChild(name); if (existing != null && existing != original) { setErrorMessage(getExistsMessage(edited)); setPageComplete(false); } else { setErrorMessage(null); setPageComplete(true); } } } protected abstract String getEmptyNameMessage(T element); protected abstract String getExistsMessage(T element); }