eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/FieldObservationGeneralElementController.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/GatheringEventDetailsElement.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/GatheringEventDetailsElementController.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/LanguageTextFieldController.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/NumberFieldController.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/PointField.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/PointFieldController.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/TermComboFieldController.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/TextFieldController.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/ToggleableTextField.java -text
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/campanula/ToggleableTextFieldController.java -text
// $Id$
/**
-* Copyright (C) 2013 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) 2013 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.campanula;
import org.eclipse.swt.SWT;
public class FieldObservationGeneralElement extends Composite {
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
private final Text textLocality;
- private final Text textLatitude;
- private final Text textLongitude;
- private final Text textErrorRadius;
private final Text textElevation;
private final Text textCollectingNumber;
private EntitySelectionField countrySelectionField;
private EntitySelectionField collectorSelectionField;
private ToggleableTextField toggleableTextField;
+ private PointField pointField;
/**
* Create the composite.
+ *
* @param parent
* @param style
*/
Label lblLatitude = formToolkit.createLabel(this, "Latitude", SWT.NONE);
- textLatitude = formToolkit.createText(this, "New Text", SWT.NONE);
- textLatitude.setText("");
- textLatitude.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+ pointField = new PointField(this, SWT.NONE);
+ TableWrapLayout twl_pointField = (TableWrapLayout) pointField.getLayout();
+ twl_pointField.verticalSpacing = 0;
+ twl_pointField.topMargin = 0;
+ twl_pointField.rightMargin = 0;
+ twl_pointField.leftMargin = 0;
+ twl_pointField.horizontalSpacing = 0;
+ twl_pointField.bottomMargin = 0;
+ pointField.setLayoutData(new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 6, 1));
+ formToolkit.adapt(pointField);
+ formToolkit.paintBordersFor(pointField);
+ new Label(this, SWT.NONE);
Label lblLongitude = formToolkit.createLabel(this, "Longitude", SWT.NONE);
-
- textLongitude = formToolkit.createText(this, "New Text", SWT.NONE);
- textLongitude.setText("");
- textLongitude.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+ new Label(this, SWT.NONE);
Label lblErrorRadiusm = formToolkit.createLabel(this, "Error Radius (m)", SWT.NONE);
- textErrorRadius = formToolkit.createText(this, "New Text", SWT.NONE);
- textErrorRadius.setText("");
- textErrorRadius.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
-
Label lblReferenceSystem = formToolkit.createLabel(this, "Reference System", SWT.NONE);
- new Label(this, SWT.NONE);
Label lblAbsoluteElevationm = formToolkit.createLabel(this, "Absolute Elevation (m)", SWT.NONE);
formToolkit.adapt(collectorSelectionField);
formToolkit.paintBordersFor(collectorSelectionField);
-
Label lblCollectingNumber = formToolkit.createLabel(this, "Collecting Number", SWT.NONE);
textCollectingNumber = formToolkit.createText(this, "New Text", SWT.NONE);
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
+
public EntitySelectionField getCountrySelectionField() {
return countrySelectionField;
}
+
public EntitySelectionField getCollectorSelectionField() {
return collectorSelectionField;
}
+
public Text getTextElevation() {
return textElevation;
}
+
public Text getTextLocality() {
return textLocality;
}
- public Text getTextLatitude() {
- return textLatitude;
- }
- public Text getTextLongitude() {
- return textLongitude;
- }
- public Text getTextErrorRadius() {
- return textErrorRadius;
- }
+
public Text getTextCollectingNumber() {
return textCollectingNumber;
}
+
public ToggleableTextField getToggleableTextField() {
return toggleableTextField;
}
+
+ public PointField getPointField() {
+ return pointField;
+ }
}
import eu.etaxonomy.cdm.model.common.LanguageString;
import eu.etaxonomy.cdm.model.location.NamedArea;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
-import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
-import eu.etaxonomy.taxeditor.ui.element.PointElement;
import eu.etaxonomy.taxeditor.ui.element.TimePeriodElement;
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
import eu.etaxonomy.taxeditor.ui.section.campanula.compatibility.ICdmFormElement;
*/
public class FieldObservationGeneralElementController extends AbstractCdmDetailElement<DerivedUnitFacade> {
- private ToggleableTextFieldController toggleableText_titleCache;
+ private FieldObservationGeneralElement fieldObservationGeneralElement;
+ private ToggleableTextFieldController toggleableText_titleCache;
private EntitySelectionFieldController<NamedArea> selection_country;
- private LanguageStringWithLabelElement languageText_locality;
- private PointElement element_point;
+ private LanguageTextFieldController languageText_locality;
+ private PointFieldController element_point;
private NumberFieldController number_elevation;
private TimePeriodElement element_date;
private EntitySelectionFieldController<AgentBase> selection_collector;
private TextFieldController text_collectingNumber;
- private FieldObservationGeneralElement fieldObservationGeneralElement;
/**
* @param formFactory
public FieldObservationGeneralElementController(FieldObservationGeneralElement fieldObservationGeneralElement, CdmFormFactory formFactory, ICdmFormElement formElement) {
super(formFactory, formElement);
this.fieldObservationGeneralElement = fieldObservationGeneralElement;
+ setPropertyChangeListeners(formFactory.getPropertyChangeListeners());
formFactory.addPropertyChangeListener(this);
- formFactory.getPropertyChangeListeners().add(this);
}
/*
toggleableText_titleCache = new ToggleableTextFieldController(fieldObservationGeneralElement.getToggleableTextField(), getFormFactory(), formElement, entity.getTitleCache(), entity.isProtectedTitleCache(), style);
selection_country = new EntitySelectionFieldController<NamedArea>(fieldObservationGeneralElement.getCountrySelectionField(), getFormFactory(), getConversationHolder(), formElement, NamedArea.class, "Country", entity.getCountry(), EntitySelectionElement.NOTHING, style);
-// languageText_locality = formFactory.createLanguageStringWithLabelElement(formElement, "Locality", entity.getLocality(), style);
-// element_point = formFactory.createPointElement(formElement, entity.getExactLocation(), style);
+ languageText_locality = new LanguageTextFieldController(fieldObservationGeneralElement.getTextLocality(), getFormFactory(), formElement, entity.getLocality());
+ element_point = new PointFieldController(fieldObservationGeneralElement.getPointField(),getFormFactory(), formElement, entity.getExactLocation(), style);
number_elevation = new NumberFieldController(fieldObservationGeneralElement.getTextElevation(), getFormFactory(), formElement, entity.getAbsoluteElevation());
// element_date = formFactory.createTimePeriodElement(formElement, "Date", entity.getGatheringPeriod(), style);
selection_collector = new EntitySelectionFieldController<AgentBase>(fieldObservationGeneralElement.getCollectorSelectionField(), getFormFactory(), getConversationHolder(), formElement, AgentBase.class, "Collector", entity.getCollector(), EntitySelectionElement.ALL, style);
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2013 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.campanula;
+
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.model.common.LanguageString;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.section.campanula.compatibility.ICdmFormElement;
+
+/**
+ * @author pplitzner
+ * @date 15.08.2013
+ *
+ */
+public class LanguageTextFieldController extends TextFieldController{
+
+ private LanguageString languageString;
+
+ /**
+ * <p>Constructor for LanguageStringWithLabelElement.</p>
+ *
+ * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
+ * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
+ * @param labelString a {@link java.lang.String} object.
+ * @param languageString a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
+ * @param style a int.
+ */
+ protected LanguageTextFieldController(Text controlledText, CdmFormFactory formFactory,
+ ICdmFormElement parentElement,
+ LanguageString languageString) {
+ this(controlledText, formFactory, parentElement, languageString, null);
+ }
+
+ /**
+ * <p>Constructor for LanguageStringWithLabelElement.</p>
+ *
+ * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
+ * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
+ * @param labelString a {@link java.lang.String} object.
+ * @param languageString a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
+ * @param height a int.
+ * @param style a int.
+ */
+ protected LanguageTextFieldController(Text controlledText, CdmFormFactory formFactory,
+ ICdmFormElement parentElement,
+ LanguageString languageString, Integer height) {
+ super(controlledText, formFactory, parentElement, null, height);
+
+ setLanguageString(languageString);
+ }
+
+ /**
+ * <p>Getter for the field <code>languageString</code>.</p>
+ *
+ * @return a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
+ */
+ public LanguageString getLanguageString() {
+ return languageString;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void modifyText(ModifyEvent e) {
+ if(languageString == null){
+ languageString = LanguageString.NewInstance("", CdmStore.getDefaultLanguage());
+ }
+
+ languageString.setText(text.getText());
+ super.modifyText(e);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void setText(String text) {
+ if(text != null){
+ languageString.setText(text);
+ super.setText(text);
+ }
+ }
+
+ /**
+ * <p>Setter for the field <code>languageString</code>.</p>
+ *
+ * @param languageString a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
+ */
+ public void setLanguageString(LanguageString languageString) {
+ this.languageString = languageString;
+ super.setText(languageString != null ? languageString.getText() : "");
+ }
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2013 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.campanula;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+/**
+ * @author pplitzner
+ * @date 15.08.2013
+ *
+ */
+public class PointField extends Composite {
+ private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
+ private Text text_latitude;
+ private Text text_latitudeParsed;
+ private Text text_longitude;
+ private Text text_longitudeParsed;
+ private Text number_errorRadius;
+ private Combo combo_referenceSystem;
+
+ /**
+ * Create the composite.
+ * @param parent
+ * @param style
+ */
+ public PointField(Composite parent, int style) {
+ super(parent, style);
+ {
+ setLayout(new TableWrapLayout());
+ }
+
+ text_latitude = formToolkit.createText(this, "New Text", SWT.NONE);
+ text_latitude.setText("");
+ text_latitude.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+
+ text_latitudeParsed = formToolkit.createText(this, "New Text", SWT.NONE);
+ text_latitudeParsed.setEnabled(false);
+ text_latitudeParsed.setText("");
+ text_latitudeParsed.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+
+ text_longitude = formToolkit.createText(this, "New Text", SWT.NONE);
+ text_longitude.setText("");
+ text_longitude.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+
+ text_longitudeParsed = formToolkit.createText(this, "New Text", SWT.NONE);
+ text_longitudeParsed.setEnabled(false);
+ text_longitudeParsed.setText("");
+ text_longitudeParsed.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+
+ number_errorRadius = formToolkit.createText(this, "New Text", SWT.NONE);
+ number_errorRadius.setText("");
+ number_errorRadius.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+
+ combo_referenceSystem = new Combo(this, SWT.READ_ONLY);
+ combo_referenceSystem.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+ formToolkit.adapt(combo_referenceSystem);
+ formToolkit.paintBordersFor(combo_referenceSystem);
+
+ }
+
+ @Override
+ protected void checkSubclass() {
+ // Disable the check that prevents subclassing of SWT components
+ }
+
+ public Text getText_latitude() {
+ return text_latitude;
+ }
+ public Text getText_latitudeParsed() {
+ return text_latitudeParsed;
+ }
+ public Text getText_longitude() {
+ return text_longitude;
+ }
+ public Text getText_longitudeParsed() {
+ return text_longitudeParsed;
+ }
+ public Text getNumber_errorRadius() {
+ return number_errorRadius;
+ }
+ public Combo getCombo_referenceSystem() {
+ return combo_referenceSystem;
+ }
+}
--- /dev/null
+// $Id$
+/**
+ * Copyright (C) 2013 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.campanula;
+
+import java.text.ParseException;
+
+import org.eclipse.jface.util.PropertyChangeEvent;
+
+import eu.etaxonomy.cdm.model.location.Point;
+import eu.etaxonomy.cdm.model.location.ReferenceSystem;
+import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
+import eu.etaxonomy.taxeditor.ui.element.IEntityElement;
+import eu.etaxonomy.taxeditor.ui.section.campanula.compatibility.ICdmFormElement;
+
+/**
+ * @author pplitzner
+ * @date 15.08.2013
+ *
+ */
+public class PointFieldController extends AbstractCdmFormElement implements IEntityElement<Point> {
+
+ private Point point;
+
+ private final TextFieldController text_latitude;
+ private final TextFieldController text_longitude;
+ private final NumberFieldController number_errorRadius;
+ private final TermComboFieldController<ReferenceSystem> combo_referenceSystem;
+
+ private final TextFieldController text_latitudeParsed;
+
+ private final TextFieldController text_longitudeParsed;
+
+ /**
+ * <p>
+ * Constructor for PointElement.
+ * </p>
+ *
+ * @param formFactory
+ * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+ * object.
+ * @param formElement
+ * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+ * object.
+ * @param point
+ * a {@link eu.etaxonomy.cdm.model.location.Point} object.
+ * @param style
+ * a int.
+ */
+ public PointFieldController(PointField pointField, CdmFormFactory formFactory, ICdmFormElement formElement, Point point, final int style) {
+ super(formFactory, formElement);
+
+ setPropertyChangeListeners(formFactory.getPropertyChangeListeners());
+ formFactory.addPropertyChangeListener(this);
+
+ text_latitude = new TextFieldController(pointField.getText_latitude(), getFormFactory(), formElement, null, style);
+ text_latitudeParsed = new TextFieldController(pointField.getText_latitudeParsed(), getFormFactory(), formElement, null, style);
+ text_longitude = new TextFieldController(pointField.getText_longitude(), getFormFactory(), formElement, null, style);
+ text_longitudeParsed = new TextFieldController(pointField.getText_longitudeParsed(), getFormFactory(), formElement, null, style);
+ number_errorRadius = new NumberFieldController(pointField.getNumber_errorRadius(), getFormFactory(), formElement, (Integer)null);
+ combo_referenceSystem = new TermComboFieldController<ReferenceSystem>(pointField.getCombo_referenceSystem(), getFormFactory(), formElement, ReferenceSystem.class, null, style);
+
+ setPoint(point);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
+ * .eclipse.jface.util.PropertyChangeEvent)
+ */
+ /** {@inheritDoc} */
+ @Override
+ public void propertyChange(PropertyChangeEvent event) {
+ if (event == null) {
+ return;
+ }
+
+ boolean propagate = false;
+
+ Object eventSource = event.getSource();
+ if (eventSource == text_latitude) {
+ try {
+ getPoint().setLatitudeByParsing(text_latitude.getText());
+ text_latitudeParsed.setText(point.getLatitudeSexagesimal().toString(false));
+ text_latitude.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
+ propagate = true;
+ } catch (ParseException e) {
+ text_latitude.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
+ }
+ } else if (eventSource == text_longitude) {
+ try {
+ getPoint().setLongitudeByParsing(text_longitude.getText());
+ text_longitudeParsed.setText(point.getLongitudeSexagesimal().toString(false));
+ text_longitude.setBackground(getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
+ propagate = true;
+ } catch (ParseException e) {
+ text_longitude.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
+ }
+ } else if (eventSource == number_errorRadius) {
+ getPoint().setErrorRadius(number_errorRadius.getInteger());
+ propagate = true;
+ } else if (eventSource == combo_referenceSystem) {
+ getPoint().setReferenceSystem(combo_referenceSystem.getSelection());
+ propagate = true;
+ }
+
+ if (propagate) {
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
+ */
+ /** {@inheritDoc} */
+ @Override
+ public Point getEntity() {
+ return getPoint();
+ }
+
+ /**
+ * <p>
+ * setEntity
+ * </p>
+ *
+ * @param point
+ * a {@link eu.etaxonomy.cdm.model.location.Point} object.
+ */
+ public void setEntity(Point point) {
+ setPoint(point);
+ }
+
+ /**
+ * <p>
+ * Setter for the field <code>point</code>.
+ * </p>
+ *
+ * @param point
+ * the point to set
+ */
+ public void setPoint(Point point) {
+ this.point = point;
+ if (point != null) {
+ String latitude = point.getLatitudeSexagesimal() == null ? "" : point.getLatitudeSexagesimal().toString(false);
+ String longitude = point.getLongitudeSexagesimal() == null ? "" : point.getLongitudeSexagesimal().toString(false);
+ text_latitude.setText(latitude);
+ text_latitudeParsed.setText(latitude);
+ text_longitude.setText(longitude);
+ text_longitudeParsed.setText(longitude);
+ number_errorRadius.setInteger(point.getErrorRadius());
+ combo_referenceSystem.setSelection(point.getReferenceSystem());
+ }
+ }
+
+ /**
+ * <p>
+ * Getter for the field <code>point</code>.
+ * </p>
+ *
+ * @return the point
+ */
+ public Point getPoint() {
+ if (point == null) {
+ point = Point.NewInstance();
+ }
+
+ return point;
+ }
+
+ @Override
+ public void setSelected(boolean selected) {
+ setBackground(selected ? SELECTED : getPersistentBackground());
+ }
+}
\ No newline at end of file
--- /dev/null
+// $Id$
+/**
+ * Copyright (C) 2013 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.campanula;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Listener;
+
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.store.TermManager;
+import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
+import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
+import eu.etaxonomy.taxeditor.ui.element.ISelectable;
+import eu.etaxonomy.taxeditor.ui.section.campanula.compatibility.ICdmFormElement;
+
+/**
+ * @author pplitzner
+ * @date 15.08.2013
+ *
+ */
+public class TermComboFieldController<T extends DefinedTermBase> extends AbstractCdmFormElement implements SelectionListener, DisposeListener, IEnableableFormElement, ISelectable {
+
+ private static final int DEFAULT_VISIBLE_ITEMS = 10;
+
+ private T selection;
+
+ private T emptyElement;
+ private static String EMPTY_ELEMENT_LABEL = "";
+
+// protected Label label;
+ private Combo combo;
+
+ private ArrayList<T> terms;
+
+ private Comparator<T> termComparator;
+
+ private Class<T> termClass;
+
+ private List<T> customPreferredTerms;
+
+ /**
+ * <p>
+ * Constructor for AbstractTermComboElement.
+ * </p>
+ *
+ * @param parentElement
+ * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+ * object.
+ * @param style
+ * a int.
+ * @param formFactory
+ * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+ * object.
+ * @param labelString
+ * a {@link java.lang.String} object.
+ * @param selection
+ * a T object.
+ * @param visibleItems
+ * a int.
+ * @param <T>
+ * a T object.
+ */
+ public TermComboFieldController(Combo combo, CdmFormFactory formFactory, ICdmFormElement parentElement, Class<T> termClass, T selection, int style) {
+ super(formFactory, parentElement);
+
+ this.termClass = termClass;
+ setPropertyChangeListeners(formFactory.getPropertyChangeListeners());
+ formFactory.addPropertyChangeListener(this);
+// if (labelString != null) {
+// label = formFactory.createLabel(getLayoutComposite(), labelString);
+// addControl(label);
+// }
+
+ // create combo
+ this.combo = combo;//new Combo(getLayoutComposite(), SWT.BORDER | SWT.READ_ONLY);
+ addControl(combo);
+// combo.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
+ combo.setVisibleItemCount(DEFAULT_VISIBLE_ITEMS);
+
+ populateTerms(getPreferredTerms());
+
+ combo.addSelectionListener(this);
+ combo.addDisposeListener(this);
+ PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
+
+ if (selection != null) {
+ setSelection(selection);
+ }
+ }
+
+ /**
+ * <p>
+ * Getter for the field <code>selection</code>.
+ * </p>
+ *
+ * @return a T object.
+ */
+ public T getSelection() {
+ return selection;
+ }
+
+ /**
+ * <p>
+ * Sets the selection of the combo to the given T object.
+ * </p>
+ * <p>
+ * Passing <code>null</code> to this method will set the selection to the
+ * empty element and effectively clear the selection
+ * </p>
+ *
+ * @param selection
+ * a T object or <code>null</code> to clear the selection
+ */
+ public void setSelection(T selection) {
+ this.selection = selection;
+
+ this.selection = selection;
+
+ Listener[] listeners = combo.getListeners(SWT.Selection);
+
+ for (Listener listener : listeners) {
+ combo.removeListener(SWT.Selection, listener);
+ }
+ int selectedIndex;
+ if (selection == null) {
+ // set selection to the emptyElement
+ selectedIndex = 0;
+ } else {
+ selectedIndex = terms.indexOf(selection);
+ if (selectedIndex == -1) {
+ createTermNotInPreferredTerms(selection);
+ selectedIndex = terms.indexOf(selection);
+ }
+ }
+ combo.select(selectedIndex);
+
+ for (Listener listener : listeners) {
+ combo.addListener(SWT.Selection, listener);
+ }
+ }
+
+ /**
+ * Fills the combo with elements and sets up the convenience functions for
+ * selection index
+ *
+ * @param preferredTerms
+ */
+ private void populateTerms(List<T> preferredTerms) {
+
+ combo.removeAll();
+
+ terms = new ArrayList<T>();
+
+ int i = 1;
+ int index = 0;
+
+ // Add an empty element for when nothing was selected yet
+ combo.add(EMPTY_ELEMENT_LABEL);
+ terms.add(emptyElement);
+
+ if (termComparator != null) {
+ Collections.sort(preferredTerms, termComparator);
+ }
+ for (T term : preferredTerms) {
+ String label = getLabel(term);
+ if (label == null) {
+ if (term.getTitleCache() != null) {
+ label = term.getTitleCache();
+ StoreUtil.warn(getClass(), "Term does not have a representation: " + term + ", " + term.getUuid());
+ } else {
+ label = "Unknown";
+ StoreUtil.warn(getClass(), "Representation Label and TitleCache empty for term: " + term + ", " + term.getUuid());
+ }
+
+ }
+
+ combo.add(label);
+ terms.add(term);
+
+ i++;
+ if (selection != null) {
+ if (selection.equals(term)) {
+ index = i;
+ }
+ }
+ }
+
+ if (selection != null && index == 0) {
+ createTermNotInPreferredTerms(selection);
+ }
+
+ combo.select(index);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * eu.etaxonomy.taxeditor.forms.IEnableableFormElement#setEnabled(boolean)
+ */
+ /** {@inheritDoc} */
+ @Override
+ public void setEnabled(boolean enabled) {
+ combo.setEnabled(enabled);
+ }
+
+ /**
+ * <p>
+ * preferredTerms
+ * </p>
+ *
+ * @return a {@link java.util.List} object.
+ */
+ protected List<T> getPreferredTerms() {
+ if (customPreferredTerms != null) {
+ return customPreferredTerms;
+ }
+ return getTermManager().getPreferredTerms(termClass);
+ }
+
+ /**
+ * May be overridden by derived classes if the desired label string does not
+ * reside in term.getLabel();
+ *
+ * @param term
+ * a T object.
+ * @return a {@link java.lang.String} object.
+ */
+ protected String getLabel(T term) {
+ return term.getLabel(CdmStore.getDefaultLanguage());
+ }
+
+ /**
+ *
+ *
+ * @param term
+ */
+ private void createTermNotInPreferredTerms(T term) {
+ List<T> preferredTerms = getPreferredTerms();
+
+ preferredTerms.add(term);
+
+ populateTerms(preferredTerms);
+ }
+
+ /**
+ * <p>
+ * addSelectionListener
+ * </p>
+ *
+ * @param listener
+ * a {@link org.eclipse.swt.events.SelectionListener} object.
+ */
+ public void addSelectionListener(SelectionListener listener) {
+ combo.addSelectionListener(listener);
+ }
+
+ /**
+ * <p>
+ * removeSelectionListener
+ * </p>
+ *
+ * @param listener
+ * a {@link org.eclipse.swt.events.SelectionListener} object.
+ */
+ public void removeSelectionListener(SelectionListener listener) {
+ combo.removeSelectionListener(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
+ * .events.SelectionEvent)
+ */
+ /** {@inheritDoc} */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ selection = terms.get(combo.getSelectionIndex());
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.beans.PropertyChangeListener#propertyChange(java.beans.
+ * PropertyChangeEvent)
+ */
+ /** {@inheritDoc} */
+ @Override
+ public void propertyChange(PropertyChangeEvent event) {
+ super.propertyChange(event);
+ if (event != null && PreferencesUtil.PREFERRED_TERMS_CHANGE.equals(event.getProperty())) {
+ populateTerms(getPreferredTerms());
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void setSelected(boolean selected) {
+ setBackground(selected ? SELECTED : getPersistentBackground());
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void widgetDisposed(DisposeEvent e) {
+ PreferencesUtil.getPreferenceStore().removePropertyChangeListener(this);
+ }
+
+ // not used
+ /** {@inheritDoc} */
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void setIrrelevant(boolean irrelevant) {
+ String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_COMPOSITE_BACKGROUND;
+
+ Color color = StoreUtil.getColor(colorId);
+ combo.setBackground(color);
+ }
+
+// /** {@inheritDoc} */
+// @Override
+// public void setBackground(Color color) {
+// if (label != null)
+// label.setBackground(color);
+// }
+
+ /**
+*
+*/
+ protected TermManager getTermManager() {
+ return CdmStore.getTermManager();
+ }
+
+ /**
+ *
+ * @return
+ */
+ public int getVisibleItemCount() {
+ return combo.getVisibleItemCount();
+ }
+
+ /**
+ *
+ * @param count
+ */
+ public void setVisibleItemCount(int count) {
+ combo.setVisibleItemCount(count);
+ }
+
+ /**
+ * <p>
+ * A {@link List} of term objects may be passed to this combo box. In this
+ * case, the default behaviour of displaying the preferred terms for the T
+ * type will be overridden and the combo will only display the given terms.
+ * Also, any previous selection will be reseted.
+ * </p>
+ *
+ * <p>
+ * To return to the default of displaying the preferred terms, simply pass
+ * <code>null</code>.
+ * </p>
+ *
+ * @param terms
+ * a {@link List} of T objects or <code>null</code> for default
+ * preferred terms
+ */
+ public void setTerms(List<T> terms) {
+ setSelection(null);
+ customPreferredTerms = terms;
+ populateTerms(customPreferredTerms);
+ }
+}
\ No newline at end of file