// $Id$
/**
-* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
+ * Copyright (C) 2007 EDIT
+ * European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * See LICENSE.TXT at the top of this package for the full license terms.
+ */
package eu.etaxonomy.taxeditor.ui.forms;
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
/**
- * <p>Abstract AbstractCdmEntityWizardPage class.</p>
- *
+ * <p>
+ * Abstract AbstractCdmEntityWizardPage class.
+ * </p>
+ *
* @author n.hoffmann
* @created Jun 1, 2010
* @version 1.0
*/
-public abstract class AbstractCdmEntityWizardPage<T> extends WizardPage implements IConversationEnabled {
+public abstract class AbstractCdmEntityWizardPage<T> extends WizardPage
+ implements IConversationEnabled, IPropertyChangeListener {
protected CdmFormFactory formFactory;
protected T entity;
AbstractCdmDetailElement<T> detailElement;
- private ConversationHolder conversation;
-
+ private final ConversationHolder conversation;
+
/**
- * <p>Constructor for AbstractCdmEntityWizardPage.</p>
- *
- * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} object.
- * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
- * @param entity a T object.
- * @param <T> a T object.
+ * <p>
+ * Constructor for AbstractCdmEntityWizardPage.
+ * </p>
+ *
+ * @param formFactory
+ * a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory}
+ * object.
+ * @param conversation
+ * a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
+ * object.
+ * @param entity
+ * a T object.
+ * @param <T>
+ * a T object.
*/
- protected AbstractCdmEntityWizardPage(CdmFormFactory formFactory, ConversationHolder conversation, T entity) {
+ protected AbstractCdmEntityWizardPage(CdmFormFactory formFactory,
+ ConversationHolder conversation, T entity) {
super("page");
this.formFactory = formFactory;
this.entity = entity;
this.conversation = conversation;
setDescription(getEntityTitle());
+
+ formFactory.addPropertyChangeListener(this);
+ setPageComplete(false);
}
-
+
/**
* @return
*/
private String getEntityTitle() {
- if(entity instanceof IIdentifiableEntity){
+ if (entity instanceof IIdentifiableEntity) {
((IIdentifiableEntity) entity).getTitleCache();
}
return "";
/*
* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+ *
+ * @see
+ * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
+ * .Composite)
*/
/** {@inheritDoc} */
+ @Override
public void createControl(Composite parent) {
- ScrolledForm scrolledForm = formFactory.createScrolledForm(parent);
+ ScrolledForm scrolledForm = formFactory.createScrolledForm(parent);
scrolledForm.getBody().setLayout(CdmFormFactory.LAYOUT());
-
+
Composite control = formFactory.createComposite(scrolledForm.getBody());
control.setLayoutData(CdmFormFactory.FILL());
-
+
control.setLayout(CdmFormFactory.LAYOUT(2, false));
- WizardPageRootElement rootElement = new WizardPageRootElement(formFactory, control, getConversationHolder());
-
+ WizardPageRootElement rootElement = new WizardPageRootElement(
+ formFactory, control, getConversationHolder());
+
Color bgColor = getShell().getBackground();
-
+
detailElement = createElement(rootElement);
-
+
rootElement.setBackground(bgColor);
control.setBackground(bgColor);
scrolledForm.setBackground(bgColor);
-
+
setControl(scrolledForm);
}
-
+
/**
- * <p>Getter for the field <code>entity</code>.</p>
- *
+ * <p>
+ * Getter for the field <code>entity</code>.
+ * </p>
+ *
* @return a T object.
*/
public T getEntity() {
return entity;
}
-
+
/**
* Creates the detail element for this wizard page
- *
- * @param rootElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
- * @return a {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement} object.
+ *
+ * @param rootElement
+ * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
+ * object.
+ * @return a
+ * {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement}
+ * object.
*/
- public abstract AbstractCdmDetailElement<T> createElement(ICdmFormElement rootElement);
-
- protected class WizardPageRootElement extends RootElement implements IConversationEnabled{
+ public abstract AbstractCdmDetailElement<T> createElement(
+ ICdmFormElement rootElement);
+
+ protected class WizardPageRootElement extends RootElement implements
+ IConversationEnabled {
+
+ private final ConversationHolder conversation;
- private ConversationHolder conversation;
-
- public WizardPageRootElement(CdmFormFactory formFactory,
+ public WizardPageRootElement(CdmFormFactory formFactory,
Composite layoutComposite, ConversationHolder conversation) {
super(formFactory, layoutComposite);
this.conversation = conversation;
}
-
+
@Override
public void refresh() {
super.refresh();
detailElement = createElement(this);
((Composite) getControl()).layout();
}
-
+
+ @Override
public ConversationHolder getConversationHolder() {
return conversation;
}
-
- public void update(CdmDataChangeMap changeEvents) {}
+
+ @Override
+ public void update(CdmDataChangeMap changeEvents) {
+ }
+ }
+
+ @Override
+ public void propertyChange(PropertyChangeEvent event) {
+ if (event.getSource() == getDetailElement()) {
+ checkComplete();
+ }
}
-
+
/**
- * <p>getConversationHolder</p>
- *
- * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
+ * Should check whether the wizard is complete in a sense that it contains
+ * sane data. Should setPageComplete to true if that is the case.
*/
+ protected void checkComplete() {
+ setPageComplete(titleCacheIsNotEmpty());
+ }
+
+ private boolean titleCacheIsNotEmpty() {
+ if (getEntity() instanceof IIdentifiableEntity) {
+ IIdentifiableEntity entity = (IIdentifiableEntity) getEntity();
+ return !StringUtils.isEmpty(entity.getTitleCache());
+ }
+ return true;
+ }
+
+ /**
+ * <p>
+ * getConversationHolder
+ * </p>
+ *
+ * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
+ * object.
+ */
+ @Override
public ConversationHolder getConversationHolder() {
return conversation;
}
-
+
/** {@inheritDoc} */
@Override
public void dispose() {
- if(detailElement != null){
+ if (detailElement != null) {
detailElement.removeElements();
}
+ formFactory.removePropertyChangeListener(this);
super.dispose();
}
-
+
/**
- * <p>Getter for the field <code>detailElement</code>.</p>
- *
- * @return a {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement} object.
+ * <p>
+ * Getter for the field <code>detailElement</code>.
+ * </p>
+ *
+ * @return a
+ * {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement}
+ * object.
*/
public AbstractCdmDetailElement<T> getDetailElement() {
return detailElement;
}
-
+
/** {@inheritDoc} */
- public void update(CdmDataChangeMap changeEvents) {}
+ @Override
+ public void update(CdmDataChangeMap changeEvents) {
+ }
}