* See LICENSE.TXT at the top of this package for the full license terms.
*/
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
-import java.lang.reflect.Method;
import java.util.Set;
import org.eclipse.core.runtime.Assert;
import eu.etaxonomy.cdm.common.CdmUtils;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.name.NameRelationship;
import eu.etaxonomy.cdm.model.name.NonViralName;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDragListener;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDragSourceEffect;
import eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInNewGroupOperation;
import eu.etaxonomy.taxeditor.labels.ILabelImageStrategy;
import eu.etaxonomy.taxeditor.labels.LabelImageProvider;
-import eu.etaxonomy.taxeditor.model.ImageResources;
import eu.etaxonomy.taxeditor.model.NameHelper;
import eu.etaxonomy.taxeditor.model.TextHelper;
import eu.etaxonomy.taxeditor.parser.ParseHandler;
* @created 02.06.2008
* @version 1.0
*/
-abstract public class AbstractGroupedContainer<T extends TaxonBase> implements IFormPart {
-
- /**
- *
- */
- public static final int SELECTED_FOCUS = 1;
- /** Constant <code>SELECTED_NO_FOCUS=2</code> */
- public static final int SELECTED_NO_FOCUS = 2;
- /** Constant <code>NOT_SELECTED=3</code> */
- public static final int NOT_SELECTED = 3;
-
- /**
- * ************ COMPOSITE TYPES ************
- */
- public String compositeType;
- /** Constant <code>ACCEPTED_TAXON="accepted_name_composite"</code> */
- public static final String ACCEPTED_TAXON = "accepted_name_composite";
- /** Constant <code>HOMOTYPIC_SYNONYM="homotypic_name_composite"</code> */
- public static final String HOMOTYPIC_SYNONYM = "homotypic_name_composite";
- /** Constant <code>HETEROTYPIC_SYNONYM="heterotypic_name_composite"</code> */
- public static final String HETEROTYPIC_SYNONYM = "heterotypic_name_composite";
- /** Constant <code>MISAPPLIED_NAME="misappliedname_name_composite"</code> */
- public static final String MISAPPLIED_NAME = "misappliedname_name_composite";
- /** Constant <code>CONCEPTRELATION="concept_name_composite"</code> */
- public static final String CONCEPTRELATION = "concept_name_composite";
-
- /**
- * ************ INDENTATIONS ************
- */
- public static final int ACCEPTED_INDENT = 20;
- /** Constant <code>SYNONYM_INDENT=40</code> */
- public static final int SYNONYM_INDENT = 40;
- /** Constant <code>HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT = 60</code> */
- public static final int HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT = 60;
- /** Constant <code>MISAPPLIEDNAME_INDENT=40</code> */
- public static final int MISAPPLIEDNAME_INDENT = 40;
- /** Constant <code>CONCEPT_INDENT=40</code> */
- public static final int CONCEPT_INDENT = 40;
+abstract public class AbstractGroupedContainer<T extends TaxonBase> implements IFormPart, IContainerConstants {
-
- /**
- * ************ ICONS ************
- */
- public static final Image ACCEPTED_ICON = ImageResources.getImage(ImageResources.BLACK_SQUARE_ICON);
- /** Constant <code>HOMOTYPIC_SYNONYM_ICON</code> */
- public static final Image HOMOTYPIC_SYNONYM_ICON = ImageResources.getImage(ImageResources.HOMOTYPIC_SYN_ICON);
- /** Constant <code>HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON</code> */
- public static final Image HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = ImageResources.getImage(
- ImageResources.HOMOTYPIC_SYN_ORIGINAL_ICON);
- /** Constant <code>HETEROTYPIC_SYNONYM_ICON</code> */
- public static final Image HETEROTYPIC_SYNONYM_ICON = ImageResources.getImage(ImageResources.HETEROTYPIC_SYN_ICON);
- public static final Image HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON = ImageResources.getImage(ImageResources.HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON);
- public static final Image INVALID_OR_NUDUM_NAME_ICON = ImageResources.getImage(ImageResources.NOM_INVAL_NUD_SYN_ICON);
- /** Constant <code>HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON</code> */
- public static final Image HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = ImageResources.getImage(
- ImageResources.HETEROTYPIC_SYN_ORIGINAL_ICON);
- /** Constant <code>MISAPPLIEDNAME_ICON</code> */
- public static final Image MISAPPLIEDNAME_ICON = ImageResources.getImage(ImageResources.MISAPPLIED_NAME_ICON);
- /** Constant <code>CONCEPT_ICON</code> */
- public static final Image CONCEPT_ICON = ImageResources.getImage(ImageResources.CONCEPT_ICON);
- /** Constant <code>AUTONYM_ICON</code> */
- public static final Image AUTONYM_ICON = ImageResources
- .getImage(ImageResources.AUTONYM_ICON);
- /** Constant <code>MOVE</code> */
- public static final Image MOVE = ImageResources.getImage(ImageResources.MOVE_ICON);
-
- /**
- * ************ TRANSFORMATIONS ************
- */
- public static final String ADD_GROUP_BASIONYM = "add_group_basionym";
- /** Constant <code>REMOVE_GROUP_BASIONYM="remove_group_basionym"</code> */
- public static final String REMOVE_GROUP_BASIONYM = "remove_group_basionym";
-
- private static final String EMPTY_NAME_PROMPT = "Click to add name";
-
protected ParseHandler parseHandler;
private FocusListener nameCompositeFocusListener;
private ModifyListener nameCompositeModifyListener;
-
- protected TaxonNameEditor editor;
-
protected NameViewer nameViewer;
- private AbstractGroup<T> group;
+ private AbstractGroup group;
private Label nonEditableInfoLabel;
private DefaultToolTip nonEditableInfoHover;
* <p>Constructor for AbstractGroupedContainer.</p>
*
* @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
* @param taxonBase a T object.
* @param <T> a T object.
*/
- public AbstractGroupedContainer(TaxonNameEditor editor, AbstractGroup<T> group, T taxonBase){
- this.editor = editor;
-
- this.group = group;
- group.add(this);
-
+ public AbstractGroupedContainer(T taxonBase){
setData(taxonBase);
-
+ parseHandler = ParseHandler.NewInstance(taxonBase.getName());
+ }
+
+ public void createContent(){
createControl();
createTextViewer();
createLineWrapSupport();
createLineBreakListener();
- setMenu(editor.getMenu());
+ setMenu(getEditor().getMenu());
setDraggableControl(new Control[]{getControl(), getNameViewer().getRulerControl()});
createEmptyViewerPrompt(EMPTY_NAME_PROMPT);
- parseHandler = ParseHandler.NewInstance(getNameViewer().getTextWidget(), taxonBase.getName());
initializeComposite();
TaxonNameBase synonymName = ParseHandler.quickParse(text);
EditorUtil.executeOperation(new CreateSynonymInNewGroupOperation
- ("New Heterotypic Synonym", editor.getUndoContext(), editor.getTaxon(), synonymName, editor));
+ ("New Heterotypic Synonym", getEditor().getUndoContext(), getEditor().getTaxon(), synonymName, getEditor()));
}
/**
String text = NameHelper.getDisplayNameWithRef(getTaxonBase());
+ if(getNameViewer().getTextWidget() == null){
+ // we might get here via dnd. Look slike it can be ignored
+ return;
+ }
+
if (text.length() == 0) {
initEmptyText();
- } else {
+ } else if(! getNameViewer().getTextWidget().getText().equals(text)) {
removeListener();
getNameViewer().getTextWidget().setText(text);
addListener();
/**
* <p>Getter for the field <code>group</code>.</p>
*
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
*/
public AbstractGroup getGroup(){
+ if(group == null){
+ throw new IllegalStateException("Group shall not be null.");
+ }
return group;
}
* <p>createControl</p>
*/
protected void createControl() {
- control = editor.getToolkit().createComposite(group.getControl());
+ control = getEditor().getToolkit().createComposite(getGroup().getControl());
control.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
TableWrapLayout layout = new TableWrapLayout();
}
+ /**
+ * @return
+ */
+ protected TaxonNameEditor getEditor() {
+ return getGroup().getEditor();
+ }
+
/**
* <p>Getter for the field <code>control</code>.</p>
*
* <p>createLineWrapSupport</p>
*/
protected void createLineWrapSupport() {
- new LineWrapSupport(getNameViewer(), editor.getManagedForm());
+ new LineWrapSupport(getNameViewer(), getEditor().getManagedForm());
}
focusListener = new FocusAdapter() {
public void focusGained(FocusEvent e) {
- for(AbstractGroupedContainer container : editor.getGroupedContainers()){
+ for(AbstractGroupedContainer container : getEditor().getGroupedContainers()){
container.colorSelected(NOT_SELECTED);
}
- editor.getManagedForm().setInput(AbstractGroupedContainer.this);
+ getEditor().getManagedForm().setInput(AbstractGroupedContainer.this);
placeCursor();
colorSelected(SELECTED_FOCUS);
}
* @return a boolean.
*/
public boolean isSelected(){
- return editor.getSelectedObject() == this;
+ return getEditor().getSelectedContainer() == this;
}
/**
Runnable runnable = new Runnable() {
public void run() {
- editor.getManagedForm().setInput(selection);
+ getEditor().getManagedForm().setInput(selection);
}
};
display.timerExec(1000, runnable);
/**
* <p>Getter for the field <code>nameViewer</code>.</p>
*
- * @return a {@link eu.etaxonomy.taxeditor.editor.name.NameViewer} object.
+ * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.NameViewer} object.
*/
public NameViewer getNameViewer() {
if (nameViewer == null){
*/
public void setDirty(boolean isDirty) {
if(isDirty){
- editor.getManagedForm().dirtyStateChanged();
+ getEditor().getManagedForm().dirtyStateChanged();
}
this.isDirty = isDirty;
}
}
if (nonEditableInfoLabel == null) {
- nonEditableInfoLabel = editor.getToolkit().createLabel(control, "");
+ nonEditableInfoLabel = getEditor().getToolkit().createLabel(control, "");
TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP);
// Set indent to viewer ruler's width
if (getNameViewer().getRulerControl() != null) {
/**
* <p>Setter for the field <code>group</code>.</p>
*
- * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
+ * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object.
*/
- public void setGroup(AbstractGroup<T> group) {
+ public void setGroup(AbstractGroup group) {
this.group = group;
}
*/
@Override
public void dispose() {
- // TODO Auto-generated method stub
-
+ if(getControl() != null){
+ setMenu(null);
+ getControl().dispose();
+ }
}