Refactoring of name editor.
authorn.hoffmann <n.hoffmann@localhost>
Mon, 24 Jan 2011 17:33:26 +0000 (17:33 +0000)
committern.hoffmann <n.hoffmann@localhost>
Mon, 24 Jan 2011 17:33:26 +0000 (17:33 +0000)
41 files changed:
.gitattributes
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IDropTargetable.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ContainerFactory.java [deleted file]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/HomotypicalSynonymGroup.java [deleted file]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedGroup.java [deleted file]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroup.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AbstractGroup.java with 71% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AbstractGroupedContainer.java with 81% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractHomotypicalGroupContainer.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AcceptedGroup.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AcceptedNameContainer.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AcceptedNameContainer.java with 65% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ConceptContainer.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptContainer.java with 91% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ConceptGroup.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptGroup.java with 63% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ContainerFactory.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/EditorAnnotation.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/EditorAnnotation.java with 98% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/HomotypicalSynonymGroup.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/IContainerConstants.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineBreakListener.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineBreakListener.java with 98% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineWrapSquigglesStrategy.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineWrapSquigglesStrategy.java with 98% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineWrapSupport.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineWrapSupport.java with 97% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/MisapplicationContainer.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisapplicationContainer.java with 89% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/MisappliedGroup.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/NameViewer.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameViewer.java with 97% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/RulerWithIcon.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/RulerWithIcon.java with 99% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/SynonymContainer.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/SynonymContainer.java with 76% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDragListener.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDragListener.java with 77% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDragSourceEffect.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDragSourceEffect.java with 94% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDropTargetEffect.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDropTargetEffect.java with 96% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDropTargetListener.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDropTargetListener.java with 71% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeHomotypicGroupOperation.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/detail/CdmSectionPart.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/supplementaldata/SupplementalDataViewer.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/name/NameDetailElement.java
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/IterableSynonymyList.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/IterableSynonymyList.java with 98% similarity]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/SynonymContentProvider.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/LoginDialog.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/parser/ParseHandler.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreStateManager.java [deleted file]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/internal/TaxeditorStorePlugin.java

index 2fca0f5e58e318342a1921a85a35e7e66838fa46..b7be64ad1cc0a4d5947e330ad928629b9f18ab5a 100644 (file)
@@ -375,28 +375,30 @@ taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/hand
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/DeleteNodeHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/DeleteNodeOperation.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/DeleteNodeHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/DeleteNodeOperation.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AbstractGroup.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AbstractGroupedContainer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AcceptedNameContainer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptContainer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptGroup.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ContainerFactory.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/EditorAnnotation.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/HomotypicalSynonymGroup.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/IterableSynonymyList.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineBreakListener.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineWrapSquigglesStrategy.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineWrapSupport.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisapplicationContainer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedGroup.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDragListener.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDragSourceEffect.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDropTargetEffect.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDropTargetListener.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameViewer.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/RulerWithIcon.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/SynonymContainer.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractHomotypicalGroupContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AcceptedGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AcceptedNameContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ConceptContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ConceptGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ContainerFactory.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/EditorAnnotation.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/HomotypicalSynonymGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/IContainerConstants.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineBreakListener.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineWrapSquigglesStrategy.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineWrapSupport.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/MisapplicationContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/MisappliedGroup.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/NameViewer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/RulerWithIcon.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/SynonymContainer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDragListener.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDragSourceEffect.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDropTargetEffect.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDropTargetListener.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/AbstractDynamicConceptRelationMenu.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeAcceptedTaxonToSynonymHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeConceptRelationshipTypeHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/AbstractDynamicConceptRelationMenu.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeAcceptedTaxonToSynonymHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeConceptRelationshipTypeHandler.java -text
@@ -780,6 +782,7 @@ taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytom
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/ClassificationContentProvider.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/ClassificationLabelProvider.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/EmptyRoot.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/ClassificationContentProvider.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/ClassificationLabelProvider.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/EmptyRoot.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/IterableSynonymyList.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/Root.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/SynonymContentProvider.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/SynonymLabelProvider.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/Root.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/SynonymContentProvider.java -text
 taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/SynonymLabelProvider.java -text
@@ -1125,7 +1128,6 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStoreConnector.jav
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/ContextManager.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/SearchManager.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/ContextManager.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/SearchManager.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreStateManager.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreUtil.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreUtil.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java -text
index cfb49a483905341c4ae0edc291c388ce0e2b1545..fbec6c63aaf4b5eea3f9ae00d52c9e5bdf54131e 100644 (file)
@@ -28,7 +28,7 @@ public interface IDropTargetable extends IPostOperationEnabled {
         *
         * @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
         */
         *
         * @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
         */
-       public TaxonNameEditor getNameEditor();
+       public TaxonNameEditor getEditor();
 
        /**
         * <p>dragEntered</p>
 
        /**
         * <p>dragEntered</p>
index 6557f08b152be417ab1a50b8b0422a0126e7f936..9aade67d3e4bd44213972a83bac7aad40bd52c63 100644 (file)
@@ -27,8 +27,10 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
 import eu.etaxonomy.taxeditor.model.DataChangeBridge;
 import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
 import eu.etaxonomy.taxeditor.model.DataChangeBridge;
 import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
@@ -251,8 +253,13 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna
 //     setDirty(true);
                dirty = true;
                super.editorDirtyStateChanged();
 //     setDirty(true);
                dirty = true;
                super.editorDirtyStateChanged();
-               TaxonNameEditor page = (TaxonNameEditor) getPage(Page.NAME);
-               page.getSelectedObject().refresh();
+               if(element instanceof TaxonBase){
+                       TaxonNameEditor page = (TaxonNameEditor) getPage(Page.NAME);
+                       AbstractGroupedContainer container = page.getContainer((TaxonBase) element);
+                       if(container != null){
+                               container.refresh();
+                       }
+               }
     }
     
     /**
     }
     
     /**
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ContainerFactory.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ContainerFactory.java
deleted file mode 100644 (file)
index e00ea72..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/**
- * 
- */
-package eu.etaxonomy.taxeditor.editor.name;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
-import eu.etaxonomy.cdm.model.taxon.Synonym;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
-
-/**
- * <p>ContainerFactory class.</p>
- *
- * @author n.hoffmann
- * @version $Id: $
- */
-public class ContainerFactory {
-       
-       /** Constant <code>ACCEPTED=1</code> */
-       public static final int ACCEPTED = 1;
-       /** Constant <code>SYNONYM=2</code> */
-       public static final int SYNONYM = 2;
-       /** Constant <code>MISAPPLICATION=3</code> */
-       public static final int MISAPPLICATION = 3;
-       /** Constant <code>CONCEPT=4</code> */
-       public static final int CONCEPT = 4;
-       
-       private static ContainerFactory instance = new ContainerFactory();
-       
-       private ContainerFactory(){}
-       
-       /**
-        * <p>Getter for the field <code>instance</code>.</p>
-        *
-        * @return a {@link eu.etaxonomy.taxeditor.editor.name.ContainerFactory} object.
-        */
-       public static synchronized ContainerFactory getInstance(){
-               return instance;
-       }
-
-       /**
-        * <p>createAcceptedTaxonsHomotypicGroup</p>
-        *
-        * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
-        */
-       public void createAcceptedTaxonsHomotypicGroup(TaxonNameEditor taxonNameEditor) {
-               Taxon taxon = taxonNameEditor.getTaxon();
-                               
-               // Draw homotypic group synonyms
-               HomotypicalGroup homotypicGroup = (HomotypicalGroup) HibernateProxyHelper.deproxy(taxon.getHomotypicGroup());
-               List<Synonym> homotypicSynonyms = homotypicGroup.getSynonymsInGroup(taxon.getSec());
-               
-               HomotypicalSynonymGroup group = taxonNameEditor.getHomotypicSynonymGroup();
-               
-               // check if the taxon has changed
-               if(group != null && ! taxon.getHomotypicGroup().equals(group.getGroup()) ){
-                       group.removeAllContainers();
-                       group.clear();
-                       group = null;
-               }
-               
-               // first run
-               if(group == null){
-                       HomotypicalSynonymGroup homotypicalSynonymGroup = new HomotypicalSynonymGroup(taxonNameEditor, homotypicGroup);
-                       taxonNameEditor.setHomotypicSynonymGroup(homotypicalSynonymGroup);
-                       AcceptedNameContainer acceptedNameContainer = new AcceptedNameContainer(taxonNameEditor, homotypicalSynonymGroup);
-                       
-                       taxonNameEditor.setAcceptedNameContainer(acceptedNameContainer);
-                       for(Synonym synonym : homotypicSynonyms){
-                               createContainerFactoryMethod(SYNONYM, homotypicalSynonymGroup, synonym, taxonNameEditor);
-                       }
-               }
-               // subsequent runs
-               else{
-                       fillGroup(group, homotypicSynonyms, ACCEPTED, taxonNameEditor);
-               }
-       }
-
-       /**
-        * <p>createHeterotypicSynonymGroups</p>
-        *
-        * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
-        */
-       public void createHeterotypicSynonymGroups(TaxonNameEditor taxonNameEditor) {
-               Taxon taxon = taxonNameEditor.getTaxon();
-               
-               List<HomotypicalGroup> homotypicalGroups = taxon.getHeterotypicSynonymyGroups();
-               
-               // reatins a reference to the homotypical group widgets
-               Map<HomotypicalGroup, HomotypicalSynonymGroup> retainedGroups = taxonNameEditor.getHeterotypicSynonymGroupsMap();
-               
-               taxonNameEditor.clearHeterotypicSynonymGroups();
-               
-               // iterate over taxas synonymy groups
-               for (HomotypicalGroup homotypicalGroup : homotypicalGroups) {
-                       HomotypicalGroup homotypicalGroupDeproxied = (HomotypicalGroup) HibernateProxyHelper.deproxy(homotypicalGroup);
-                       
-                       HomotypicalSynonymGroup group;
-                       if(retainedGroups.containsKey(homotypicalGroupDeproxied)){
-                               group = retainedGroups.get(homotypicalGroupDeproxied);
-                               retainedGroups.remove(homotypicalGroupDeproxied);
-                       }else{
-                               group = new HomotypicalSynonymGroup(taxonNameEditor, homotypicalGroupDeproxied);
-                       }
-                       
-                       createHeterotypicSynonymGroup(taxonNameEditor, group);
-                       taxonNameEditor.addHeterotypicSynonymGroup(group);
-               }
-               
-               // remove all groups that did not match
-               for(AbstractGroup group : retainedGroups.values()){
-                       group.clear();
-               }
-       }
-       
-       /**
-        * <p>createMisapplicationGroup</p>
-        *
-        * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
-        */
-       public void createMisapplicationGroup(TaxonNameEditor taxonNameEditor) {
-               Taxon taxon = taxonNameEditor.getTaxon();
-               
-               List<TaxonBase> content = new ArrayList<TaxonBase>(taxon.getMisappliedNames());
-               
-               if(content.size() == 0 && taxonNameEditor.getMisappliedGroup() != null){
-                       taxonNameEditor.getMisappliedGroup().clear();
-                       taxonNameEditor.setMisapplicationsGroup(null);
-               }else{
-                       AbstractGroup group = getMisappliedGroup(taxonNameEditor);
-                       fillGroup(group, content, MISAPPLICATION, taxonNameEditor);
-               }
-       }
-       
-       /**
-        * <p>createConceptGroup</p>
-        *
-        * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
-        */
-       public void createConceptGroup(TaxonNameEditor taxonNameEditor) {
-               Taxon taxon = taxonNameEditor.getTaxon();
-               
-               Set<TaxonRelationship> filteredTaxonRelations = new HashSet<TaxonRelationship>();
-               
-               for (TaxonRelationship relationship : taxon.getTaxonRelations()) {
-                       if (! relationship.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR()) ||
-                                        relationship.getType().equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {
-                               filteredTaxonRelations.add(relationship);
-                       }
-               }
-               
-               if(filteredTaxonRelations.size() == 0 && taxonNameEditor.getConceptGroup() != null){
-                       taxonNameEditor.getConceptGroup().clear();
-                       taxonNameEditor.setConceptGroup(null);
-               }else{
-                       ConceptGroup group = getConceptGroup(taxonNameEditor);
-                       
-                       // reatain old container
-                       List<AbstractGroupedContainer<Taxon>> groupedContainers = group.getGroupedContainers();
-                       
-                       group.removeAllContainers();
-                       
-                       // Draw concept relation elements
-                       for (TaxonRelationship relationship : filteredTaxonRelations) {
-                               ConceptContainer.getNewInstance(group.getNameEditor(), group, relationship);
-                       }       
-               }
-       }
-       
-       
-       /**
-        * <p>fillGroup</p>
-        *
-        * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
-        * @param content a {@link java.util.List} object.
-        * @param mode a int.
-        * @param taxonNameEditor 
-        */
-       public void fillGroup(AbstractGroup group, List<? extends TaxonBase> content, int mode, TaxonNameEditor taxonNameEditor){
-               if(content == null || (mode != ACCEPTED && content.size() == 0)){
-                       return;
-               }
-               
-               AbstractGroupedContainer[] retainedContainers = (AbstractGroupedContainer[]) group.getGroupedContainers().toArray(new AbstractGroupedContainer[0]);
-               
-               group.clearContainers();
-               
-               if(retainedContainers.length > 0 && retainedContainers[0] instanceof AcceptedNameContainer){
-                       group.add(retainedContainers[0]);
-                       retainedContainers[0] = null;
-               }
-               
-               for(TaxonBase taxonBase : content){
-                       AbstractGroupedContainer existingContainer = null;
-                       int i = 0;
-                       for(AbstractGroupedContainer container : retainedContainers){
-                               if(container != null && taxonBase.equals(container.getData())){
-                                       existingContainer = container;
-                                       retainedContainers[i] = null;                                           
-                               }
-                               i++;
-                       }
-                       if(existingContainer != null){
-                               group.add(existingContainer);
-                       }else{
-                               createContainerFactoryMethod(mode == ACCEPTED ? SYNONYM : mode, group, taxonBase, taxonNameEditor);
-                       }       
-               }       
-                       
-               // delete all container that were not used
-               for(AbstractGroupedContainer container : retainedContainers){
-                       if(container != null){
-                               group.deleteContainer(container);
-                       }
-               }
-       }
-       
-       /**
-        * <p>createContainerFactoryMethod</p>
-        *
-        * @param mode a int.
-        * @param group a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroup} object.
-        * @param taxonBase a {@link eu.etaxonomy.cdm.model.taxon.TaxonBase} object.
-        * @param taxonNameEditor 
-        * @return a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
-        */
-       public AbstractGroupedContainer createContainerFactoryMethod(int mode, AbstractGroup group, TaxonBase taxonBase, TaxonNameEditor taxonNameEditor){
-               AbstractGroupedContainer container = null;
-               
-               switch(mode){
-               case ACCEPTED:
-                       container =  new AcceptedNameContainer(group.getNameEditor(), group);
-                       break;
-               case SYNONYM:
-                       container =  new SynonymContainer(group.getNameEditor(), group, (Synonym) taxonBase);
-                       break;
-               case MISAPPLICATION:
-                       container =  new MisapplicationContainer(group.getNameEditor(), group, (Taxon) taxonBase);
-                       break;
-               case CONCEPT:
-                       container =  null;
-               }
-               
-               taxonNameEditor.getManagedForm().addPart(container);
-               
-               return container;
-       }
-       
-       /**
-        * <p>createHeterotypicSynonymGroup</p>
-        *
-        * @param taxonNameEditor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
-        * @param group a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
-        */
-       public void createHeterotypicSynonymGroup(TaxonNameEditor taxonNameEditor, HomotypicalSynonymGroup group) {
-               Taxon taxon = taxonNameEditor.getTaxon();
-               
-               List<AbstractGroupedContainer<Synonym>> groupedContainers = group.getGroupedContainers();
-               
-               List<Synonym> heterotypicSynonyms = group.getGroup().getSynonymsInGroup(taxon.getSec());
-               
-               fillGroup(group, heterotypicSynonyms, SYNONYM, taxonNameEditor);
-       }
-       
-       
-       private MisappliedGroup getMisappliedGroup(TaxonNameEditor editor) {
-               if(editor.getMisappliedGroup() == null){
-                       // Create the group composite
-                       editor.setMisapplicationsGroup(new MisappliedGroup(editor));
-               }
-               
-               MisappliedGroup misappliedGroup = editor.getMisappliedGroup();
-               
-               // Put the group composite before concept group composite, if any
-               if (editor.getConceptGroup() != null) {
-                       editor.getMisappliedGroup().getControl().moveAbove(editor.getConceptGroup().getControl());
-               }
-               
-               return misappliedGroup;
-       }
-       
-       
-       private ConceptGroup getConceptGroup(TaxonNameEditor editor) {
-               if(editor.getConceptGroup() == null){
-                       // Create the group composite
-                       editor.setConceptGroup(new ConceptGroup(editor));
-               }
-               
-               ConceptGroup conceptGroup = editor.getConceptGroup();
-               
-               // Put the group composite after misapplied group composite, if any
-               if (editor.getMisappliedGroup() != null) {
-                       editor.getConceptGroup().getControl().moveBelow(editor.getMisappliedGroup().getControl());
-               }
-               
-               return conceptGroup;
-
-       }
-}
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/HomotypicalSynonymGroup.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/HomotypicalSynonymGroup.java
deleted file mode 100644 (file)
index 7a46d2a..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
-* 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.editor.name;
-
-import java.util.List;
-
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
-import eu.etaxonomy.cdm.model.taxon.Synonym;
-
-/**
- * <p>HomotypicalSynonymGroup class.</p>
- *
- * @author p.ciardelli
- * @created 13.01.2009
- * @version 1.0
- */
-public class HomotypicalSynonymGroup extends AbstractGroup {
-
-       private HomotypicalGroup group;
-       
-       /**
-        * <p>Constructor for HomotypicalSynonymGroup.</p>
-        *
-        * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
-        * @param group a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
-        */
-       public HomotypicalSynonymGroup(TaxonNameEditor editor, HomotypicalGroup group) {
-               super(editor);
-               this.group = group;
-       }
-       
-       /**
-        * <p>Getter for the field <code>group</code>.</p>
-        *
-        * @return a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
-        */
-       public HomotypicalGroup getGroup() {
-               return group;
-       }
-
-       /** {@inheritDoc} */
-       @Override
-       public void redraw() {
-               List<Synonym> synonyms = getGroup().getSynonymsInGroup(getNameEditor().getTaxon().getSec());
-               
-               ContainerFactory.getInstance().fillGroup(this, synonyms, ContainerFactory.SYNONYM, editor);
-       }
-
-       /**
-        * <p>onComplete</p>
-        *
-        * @return a boolean.
-        */
-       public boolean onComplete() {
-               // TODO Auto-generated method stub
-               return false;
-       }
-}
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedGroup.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedGroup.java
deleted file mode 100644 (file)
index 332238f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
-* 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.editor.name;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-
-/**
- * <p>MisappliedGroup class.</p>
- *
- * @author p.ciardelli
- * @created 13.01.2009
- * @version 1.0
- */
-public class MisappliedGroup extends AbstractGroup<Taxon> {
-
-       /**
-        * <p>Constructor for MisappliedGroup.</p>
-        *
-        * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
-        */
-       public MisappliedGroup(TaxonNameEditor editor) {
-               super(editor);
-       }
-
-       /** {@inheritDoc} */
-       @Override
-       public void redraw() {
-               List<Taxon> misapplications = new ArrayList<Taxon>(editor.getTaxon().getMisappliedNames());
-               ContainerFactory.getInstance().fillGroup(this, misapplications, ContainerFactory.MISAPPLICATION, editor);
-       }
-
-       /**
-        * <p>onComplete</p>
-        *
-        * @return a boolean.
-        */
-       public boolean onComplete() {
-               // TODO Auto-generated method stub
-               return false;
-       }
-}
index dbd7232922328e4b57cf163bf39149ff26253c90..ba6295d4f269f5adb8b3568c97482f12de413a09 100644 (file)
 package eu.etaxonomy.taxeditor.editor.name;
 
 import java.util.ArrayList;
 package eu.etaxonomy.taxeditor.editor.name;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import java.util.Set;
 
-import org.apache.log4j.Logger;
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -59,6 +56,15 @@ import eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage;
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
 import eu.etaxonomy.taxeditor.editor.SimpleSelectionProvider;
 import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
 import eu.etaxonomy.taxeditor.editor.SimpleSelectionProvider;
 import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.AcceptedGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.AcceptedNameContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.ConceptGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.ContainerFactory;
+import eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDropTargetListener;
 import eu.etaxonomy.taxeditor.model.IPartChangeListener;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.TaxeditorPartService;
 import eu.etaxonomy.taxeditor.model.IPartChangeListener;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.TaxeditorPartService;
@@ -76,20 +82,6 @@ import eu.etaxonomy.taxeditor.preference.Resources;
 public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditorPage, IAdaptable, IConversationEnabled, IPostOperationEnabled, IPartContentHasDetails, IPartChangeListener
                , ISelectionListener, IDropTargetable {
        
 public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditorPage, IAdaptable, IConversationEnabled, IPostOperationEnabled, IPartContentHasDetails, IPartChangeListener
                , ISelectionListener, IDropTargetable {
        
-       private static final Logger logger = Logger.getLogger(TaxonNameEditor.class);
-       
-       public class Tupel{
-               
-               public HomotypicalGroup homotypicalGroup;
-               public HomotypicalSynonymGroup group;
-
-               public Tupel(HomotypicalGroup homotypicalGroup, HomotypicalSynonymGroup group){
-                       this.homotypicalGroup = homotypicalGroup;
-                       this.group = group;
-               }
-               
-       }
-       
        /** Constant <code>ID="eu.etaxonomy.taxeditor.taxonNameEditor"</code> */
        public static final String ID = "eu.etaxonomy.taxeditor.taxonNameEditor";
        
        /** Constant <code>ID="eu.etaxonomy.taxeditor.taxonNameEditor"</code> */
        public static final String ID = "eu.etaxonomy.taxeditor.taxonNameEditor";
        
@@ -102,32 +94,27 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
        
        private MultiPageTaxonEditor editor;
        
        
        private MultiPageTaxonEditor editor;
        
-       private AbstractGroupedContainer selectedObject;
-       
-       private AcceptedNameContainer acceptedNameContainer;
-       
+       private TaxonBase selection;
+               
        private ConversationHolder conversation;
 
        private MenuManager menuManager;
 
        private Menu menu;
        private ConversationHolder conversation;
 
        private MenuManager menuManager;
 
        private Menu menu;
-       
-       private List<Tupel> heterotypicSynonymGroupTupel = new ArrayList<Tupel>();
 
        private MisappliedGroup misappliedGroup;
 
        private ConceptGroup conceptGroup;
 
 
        private MisappliedGroup misappliedGroup;
 
        private ConceptGroup conceptGroup;
 
+       private List<HomotypicalSynonymGroup> heterotypicSynonymGroups = new ArrayList<HomotypicalSynonymGroup>();
        
        private DropTarget target;
        
        private ISelectionService selectionService;
 
        
        private DropTarget target;
        
        private ISelectionService selectionService;
 
-       private ContainerFactory containerFactory;
+       private AcceptedGroup acceptedGroup;
 
 
-       private HomotypicalSynonymGroup homotypicalSynonymGroup;
-
-       private AbstractGroupedContainer objectAffectedByLastOperation;
+       private TaxonBase objectAffectedByLastOperation;
        
        /**
         * <p>Constructor for TaxonNameEditor.</p>
        
        /**
         * <p>Constructor for TaxonNameEditor.</p>
@@ -137,8 +124,6 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
        public TaxonNameEditor(MultiPageTaxonEditor editor){
                this.editor = editor;
                conversation = editor.getConversationHolder();
        public TaxonNameEditor(MultiPageTaxonEditor editor){
                this.editor = editor;
                conversation = editor.getConversationHolder();
-               
-               containerFactory = ContainerFactory.getInstance();
        }
 
        
        }
 
        
@@ -179,8 +164,8 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
                        }
                        public boolean setInput(Object input) {
                                if (input instanceof AbstractGroupedContainer) {
                        }
                        public boolean setInput(Object input) {
                                if (input instanceof AbstractGroupedContainer) {
-                                       selectedObject = (AbstractGroupedContainer) input;
-                                       provider.setSelection(new StructuredSelection(selectedObject.getData()));
+                                       selection = ((AbstractGroupedContainer) input).getData();
+                                       provider.setSelection(new StructuredSelection(selection));
                                }
                                return super.setInput(input); 
                        }
                                }
                                return super.setInput(input); 
                        }
@@ -209,7 +194,7 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
                parent.setLayout(layout);       
                parent.setBackground(EditorUtil.getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
                
                parent.setLayout(layout);       
                parent.setBackground(EditorUtil.getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
                
-               createNameComposites();
+               createOrUpdateNameComposites();
                
                createDragSupport();
                
                
                createDragSupport();
                
@@ -219,23 +204,20 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
        /**
         * <p>createNameComposites</p>
         */
        /**
         * <p>createNameComposites</p>
         */
-       protected void createNameComposites(){
-               containerFactory.createAcceptedTaxonsHomotypicGroup(this);
-                               
-               containerFactory.createHeterotypicSynonymGroups(this);
+       public void createOrUpdateNameComposites(){
                
                
-               containerFactory.createMisapplicationGroup(this);
-               
-               containerFactory.createConceptGroup(this);
-               
-               // disabling for testing
-               for(AbstractGroupedContainer container : getGroupedContainers()){
-                       container.setMenu(getMenu());
-               }
+               ContainerFactory.createOrUpdateAcceptedTaxonsHomotypicGroup(this);
+               ContainerFactory.createOrUpdateHeterotypicSynonymyGroups(this);
+               ContainerFactory.createOrUpdateMisapplicationsGroup(this);
+               ContainerFactory.createOrUpdateConceptGroup(this);
+                               
                // Redraw composite
                managedForm.reflow(true);
        }
 
                // Redraw composite
                managedForm.reflow(true);
        }
 
+
+
+
        /**
         * <p>Getter for the field <code>taxon</code>.</p>
         *
        /**
         * <p>Getter for the field <code>taxon</code>.</p>
         *
@@ -260,7 +242,10 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
        /** {@inheritDoc} */
        @Override
        public void setFocus(){
        /** {@inheritDoc} */
        @Override
        public void setFocus(){
-               getSelectedObject().setSelected();
+               if(getSelectedContainer() == null){
+                       throw new IllegalStateException("There should always be a selected object.");
+               }
+               getSelectedContainer().setSelected();
        }
        
        /** {@inheritDoc} */
        }
        
        /** {@inheritDoc} */
@@ -307,7 +292,7 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
         */
        public boolean redraw(boolean focus) {
                
         */
        public boolean redraw(boolean focus) {
                
-               createNameComposites();
+               createOrUpdateNameComposites();
                
                if(focus){
                        setFocus();
                
                if(focus){
                        setFocus();
@@ -316,19 +301,6 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
                return true;            
        }
 
                return true;            
        }
 
-       private AbstractGroupedContainer getContainerForData(CdmBase data) {
-               if(data == null && (selectedObject != null && ! selectedObject.getControl().isDisposed())){
-                       return selectedObject;
-               }
-               
-               List<AbstractGroupedContainer> groupedContainers = getGroupedContainers();
-               for(AbstractGroupedContainer container : groupedContainers){
-                       if(container.getData().equals(data)){
-                               return container;
-                       }
-               }
-               return acceptedNameContainer;
-       }
        
        /**
         * <p>getMultiPageTaxonEditor</p>
        
        /**
         * <p>getMultiPageTaxonEditor</p>
@@ -351,19 +323,13 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
                
                redraw(false);
                
                
                redraw(false);
                
-               objectAffectedByLastOperation = getContainerForData(objectAffectedByOperation);
+               if(objectAffectedByOperation instanceof TaxonBase){
+                       objectAffectedByLastOperation = (TaxonBase) objectAffectedByOperation;
+               }
                
                return true;
        }
        
                
                return true;
        }
        
-
-       private CdmBase getSelectedData() {
-               if(selectedObject != null){
-                       return selectedObject.getData();
-               }
-               return null;
-       }
-
        /**
         * <p>Getter for the field <code>managedForm</code>.</p>
         *
        /**
         * <p>Getter for the field <code>managedForm</code>.</p>
         *
@@ -467,8 +433,6 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
                
                provider = new SimpleSelectionProvider();
                getSite().setSelectionProvider(provider);
                
                provider = new SimpleSelectionProvider();
                getSite().setSelectionProvider(provider);
-               
-               logger.trace("New Editor instance created.");
        }
                
        /**
        }
                
        /**
@@ -489,26 +453,22 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
        /**
         * <p>Getter for the field <code>acceptedNameContainer</code>.</p>
         *
        /**
         * <p>Getter for the field <code>acceptedNameContainer</code>.</p>
         *
-        * @return a {@link eu.etaxonomy.taxeditor.editor.name.AcceptedNameContainer} object.
+        * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.AcceptedNameContainer} object.
         */
        public AcceptedNameContainer getAcceptedNameContainer() {
         */
        public AcceptedNameContainer getAcceptedNameContainer() {
-               return acceptedNameContainer;
+               return getAcceptedGroup().getAcceptedNameContainer();
        }
        
        /**
         * <p>getSynonymGroup</p>
         *
         * @param homotypicalGroup a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
        }
        
        /**
         * <p>getSynonymGroup</p>
         *
         * @param homotypicalGroup a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
-        * @return a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
+        * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup} object.
         */
         */
-       public HomotypicalSynonymGroup getSynonymGroup(HomotypicalGroup homotypicalGroup) {
-               if(getHomotypicSynonymGroup() != null && getHomotypicSynonymGroup().getGroup().equals(homotypicalGroup)){
-                       return getHomotypicSynonymGroup();
-               }
-               
-               for(Tupel tupel : heterotypicSynonymGroupTupel){
-                       if(tupel.homotypicalGroup.equals(homotypicalGroup)){
-                               return tupel.group;
+       public HomotypicalSynonymGroup getHomotypicalGroupContainer(HomotypicalGroup homotypicalGroup) {
+               for(HomotypicalSynonymGroup group : getHeterotypicSynonymGroups()){
+                       if(group.getGroup().equals(homotypicalGroup)){
+                               return group;
                        }
                }
                
                        }
                }
                
@@ -518,7 +478,7 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
        /**
         * <p>Getter for the field <code>conceptGroup</code>.</p>
         *
        /**
         * <p>Getter for the field <code>conceptGroup</code>.</p>
         *
-        * @return a {@link eu.etaxonomy.taxeditor.editor.name.ConceptGroup} object.
+        * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.ConceptGroup} object.
         */
        public ConceptGroup getConceptGroup() {
                return conceptGroup;
         */
        public ConceptGroup getConceptGroup() {
                return conceptGroup;
@@ -564,7 +524,7 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
        public List<AbstractGroup> getAllGroups(){
                List<AbstractGroup> allGroups = new ArrayList<AbstractGroup>();
                
        public List<AbstractGroup> getAllGroups(){
                List<AbstractGroup> allGroups = new ArrayList<AbstractGroup>();
                
-               allGroups.add(getHomotypicSynonymGroup());
+               allGroups.add(getAcceptedGroup());
                
                allGroups.addAll(getHeterotypicSynonymGroups());
                                
                
                allGroups.addAll(getHeterotypicSynonymGroups());
                                
@@ -615,85 +575,34 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
                
        }
 
                
        }
 
-       /**
-        * <p>removeContainer</p>
-        *
-        * @param container a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
-        */
-       public void removeContainer(AbstractGroupedContainer container) {
-               container.remove();
-       }
-
-       /**
-        * <p>addCompositeForTaxonBase</p>
-        *
-        * @param taxonBase a {@link eu.etaxonomy.cdm.model.taxon.TaxonBase} object.
-        * @param target a {@link eu.etaxonomy.taxeditor.editor.IDropTargetable} object.
-        */
-       public void addCompositeForTaxonBase(TaxonBase taxonBase, IDropTargetable target) {
-               
-//             if(target instanceof AbstractGroup){
-//                     ((AbstractGroup) target).redraw();
-//             }else if(target instanceof TaxonNameEditor){
-//                     if(taxonBase instanceof Synonym){
-//                             Synonym synonym = (Synonym) taxonBase;
-//                             HomotypicalSynonymGroup group = new HomotypicalSynonymGroup(this, synonym.getHomotypicGroup());
-//                             ContainerFactory.getInstance().createHeterotypicSynonymGroup(this, group);
-//                     }
-//             }
-               
-//             if(taxonBase instanceof Synonym && target instanceof HomotypicalSynonymGroup){
-//                     new SynonymContainer(this, (HomotypicalSynonymGroup) target, (Synonym) taxonBase);
-//             }else if(taxonBase instanceof Synonym && target instanceof TaxonNameEditor){
-//                     Synonym synonym = (Synonym) taxonBase;
-//                     HomotypicalSynonymGroup group = new HomotypicalSynonymGroup(this, synonym.getHomotypicGroup());
-//                     
-//                     new SynonymContainer(this, group, (Synonym) taxonBase);
-//             }
-               
-               
-               
-//             else if(target instanceof MisappliedGroup){
-//                     Taxon taxon = (Taxon) taxonBase;
-//                     
-//                     if (taxon.isMisapplication()){
-//                             containerFactory.createMisapplication(this, taxon);
-//                     }else if(! taxon.equals(this.taxon)){
-//                             throw new RuntimeException("Unsupported operands");
-//                     }
-//             }
-       }
-
        /**
         * <p>getNameEditor</p>
         *
         * @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
         */
        /**
         * <p>getNameEditor</p>
         *
         * @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
         */
-       public TaxonNameEditor getNameEditor() {
+       public TaxonNameEditor getEditor() {
                return this;
        }
 
        /**
         * <p>Getter for the field <code>selectedObject</code>.</p>
         *
                return this;
        }
 
        /**
         * <p>Getter for the field <code>selectedObject</code>.</p>
         *
-        * @return a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+        * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
         */
         */
-       public AbstractGroupedContainer getSelectedObject(){
+       public AbstractGroupedContainer getSelectedContainer(){
+               
+               TaxonBase selectedTaxonBase = null;
+               
                TaxonEditorInput input = (TaxonEditorInput) editor.getEditorInput();
                if(input.getInitiallySelectedTaxonBase() != null){
                TaxonEditorInput input = (TaxonEditorInput) editor.getEditorInput();
                if(input.getInitiallySelectedTaxonBase() != null){
-                       
-                       TaxonBase initiallySelectedTaxonBase = input.getInitiallySelectedTaxonBase();
-                       AbstractGroupedContainer container = getContainerForData(initiallySelectedTaxonBase);
-                       if(container != null){
-//                             input.setInitiallySelectedTaxonBase(null);
-                               return container;
-                       }
+                       selectedTaxonBase = input.getInitiallySelectedTaxonBase();
                }else{
                }else{
-                       if(selectedObject != null){
-                               return selectedObject;
+                       if(selection != null){
+                               selectedTaxonBase = selection;
                        }
                }
                        }
                }
-               return acceptedNameContainer;
+                               
+               return (selectedTaxonBase != null) ? getContainer(selectedTaxonBase) : getAcceptedNameContainer();
        }
        
        /**
        }
        
        /**
@@ -714,7 +623,7 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
        /**
         * <p>Setter for the field <code>conceptGroup</code>.</p>
         *
        /**
         * <p>Setter for the field <code>conceptGroup</code>.</p>
         *
-        * @param conceptGroup a {@link eu.etaxonomy.taxeditor.editor.name.ConceptGroup} object.
+        * @param conceptGroup a {@link eu.etaxonomy.taxeditor.editor.name.container.ConceptGroup} object.
         */
        public void setConceptGroup(ConceptGroup conceptGroup) {
                this.conceptGroup = conceptGroup;
         */
        public void setConceptGroup(ConceptGroup conceptGroup) {
                this.conceptGroup = conceptGroup;
@@ -723,7 +632,7 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
        /**
         * <p>setMisapplicationsGroup</p>
         *
        /**
         * <p>setMisapplicationsGroup</p>
         *
-        * @param misappliedGroup a {@link eu.etaxonomy.taxeditor.editor.name.MisappliedGroup} object.
+        * @param misappliedGroup a {@link eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup} object.
         */
        public void setMisapplicationsGroup(MisappliedGroup misappliedGroup) {
                this.misappliedGroup = misappliedGroup;
         */
        public void setMisapplicationsGroup(MisappliedGroup misappliedGroup) {
                this.misappliedGroup = misappliedGroup;
@@ -757,102 +666,43 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
         * @return a {@link java.util.List} object.
         */
        public List<HomotypicalSynonymGroup> getHeterotypicSynonymGroups(){
         * @return a {@link java.util.List} object.
         */
        public List<HomotypicalSynonymGroup> getHeterotypicSynonymGroups(){
-               List<HomotypicalSynonymGroup> list = new ArrayList<HomotypicalSynonymGroup>(heterotypicSynonymGroupTupel.size());
-               
-               for(Tupel tupel : heterotypicSynonymGroupTupel){
-                       list.add(tupel.group);
-               }
-               
-               return list;
+               return heterotypicSynonymGroups;
        }
        
        }
        
-       /**
-        * <p>getHeterotypicSynonymGroupsMap</p>
-        *
-        * @return a {@link java.util.Map} object.
-        */
-       public Map<HomotypicalGroup, HomotypicalSynonymGroup> getHeterotypicSynonymGroupsMap(){
-               Map<HomotypicalGroup, HomotypicalSynonymGroup> map = new HashMap<HomotypicalGroup, HomotypicalSynonymGroup>(heterotypicSynonymGroupTupel.size());
-               
-               for(Tupel tupel : heterotypicSynonymGroupTupel){
-                       map.put(tupel.homotypicalGroup, tupel.group);
-               }
-               
-               return map;
-       }
-       
-       /**
-        * <p>clearHeterotypicSynonymGroups</p>
-        */
-       public void clearHeterotypicSynonymGroups(){
-               heterotypicSynonymGroupTupel.clear();
-       }
 
        /**
         * <p>addHeterotypicSynonymGroup</p>
         *
 
        /**
         * <p>addHeterotypicSynonymGroup</p>
         *
-        * @param group a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
+        * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup} object.
         */
        public void addHeterotypicSynonymGroup(HomotypicalSynonymGroup group) {
         */
        public void addHeterotypicSynonymGroup(HomotypicalSynonymGroup group) {
-               heterotypicSynonymGroupTupel.add(new Tupel(group.getGroup(), group));
+               heterotypicSynonymGroups.add(group);
        }
        
        }
        
-       /**
-        * <p>removeHeterotypicSynonymGroup</p>
-        *
-        * @param group a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
-        */
-       public void removeHeterotypicSynonymGroup(HomotypicalGroup group) {
-               Tupel shouldBeRemoved = null;
-               for(Tupel tupel : heterotypicSynonymGroupTupel){
-                       if(tupel.group.equals(group)){
-                               shouldBeRemoved = tupel;
-                               break;
-                       }                       
-               }
-               
-               if(shouldBeRemoved != null){
-                       heterotypicSynonymGroupTupel.remove(shouldBeRemoved);
-               }
-       }
-
-
-
        /**
         * <p>getHomotypicSynonymGroup</p>
         *
        /**
         * <p>getHomotypicSynonymGroup</p>
         *
-        * @return a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
+        * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup} object.
         */
         */
-       public HomotypicalSynonymGroup getHomotypicSynonymGroup() {
-               return homotypicalSynonymGroup;
+       public AcceptedGroup getAcceptedGroup() {
+               return acceptedGroup;
        }
 
 
 
        /**
        }
 
 
 
        /**
-        * <p>setHomotypicSynonymGroup</p>
-        *
-        * @param homotypicalSynonymGroup a {@link eu.etaxonomy.taxeditor.editor.name.HomotypicalSynonymGroup} object.
-        */
-       public void setHomotypicSynonymGroup(
-                       HomotypicalSynonymGroup homotypicalSynonymGroup) {
-               this.homotypicalSynonymGroup = homotypicalSynonymGroup;
-       }
-
-       /**
-        * <p>Setter for the field <code>acceptedNameContainer</code>.</p>
-        *
-        * @param acceptedNameContainer a {@link eu.etaxonomy.taxeditor.editor.name.AcceptedNameContainer} object.
+        * 
+        * @param acceptedGroup
         */
         */
-       public void setAcceptedNameContainer(
-                       AcceptedNameContainer acceptedNameContainer) {
-               this.acceptedNameContainer = acceptedNameContainer;             
+       public void setAcceptedGroup(
+                       AcceptedGroup acceptedGroup) {
+               this.acceptedGroup = acceptedGroup;
        }
 
        /**
         * <p>Getter for the field <code>misappliedGroup</code>.</p>
         *
        }
 
        /**
         * <p>Getter for the field <code>misappliedGroup</code>.</p>
         *
-        * @return a {@link eu.etaxonomy.taxeditor.editor.name.MisappliedGroup} object.
+        * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup} object.
         */
        public MisappliedGroup getMisappliedGroup() {
                return misappliedGroup;
         */
        public MisappliedGroup getMisappliedGroup() {
                return misappliedGroup;
@@ -875,7 +725,7 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
         * @return a boolean.
         */
        public boolean onComplete() {
         * @return a boolean.
         */
        public boolean onComplete() {
-               objectAffectedByLastOperation.setSelected();
+               getContainer(objectAffectedByLastOperation).setSelected();
                return true;
        }
 
                return true;
        }
 
@@ -887,4 +737,32 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
 //                     getSelectedObject().colorSelected(AbstractGroupedContainer.SELECTED_NO_FOCUS);
                }
        }
 //                     getSelectedObject().colorSelected(AbstractGroupedContainer.SELECTED_NO_FOCUS);
                }
        }
+
+
+
+       /**
+        * @param retainedGroup
+        */
+       public void removeGroup(AbstractGroup group) {
+               if(group != null){
+                       group.dispose();
+                       getHeterotypicSynonymGroups().remove(group);
+               }
+       }
+
+
+
+       /**
+        * @param element
+        * @return
+        */
+       public AbstractGroupedContainer getContainer(TaxonBase taxonBase) {
+               List<AbstractGroupedContainer> groupedContainers = getGroupedContainers();
+               for(AbstractGroupedContainer container : groupedContainers){
+                       if(container.getData().equals(taxonBase) && container.getNameViewer().getTextWidget() != null){
+                               return container;
+                       }
+               }
+               return getAcceptedNameContainer();
+       }
 }
 }
similarity index 71%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AbstractGroup.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroup.java
index d20f8e7a4eceeb529dd6ffca66a5c9eb758fd355..dbd46368b6cb83b6dd03edb149dd7ebf6e6b7e9e 100644 (file)
@@ -7,12 +7,11 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * 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.util.ArrayList;
 import java.util.List;
 
 
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.log4j.Logger;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DropTarget;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DropTarget;
@@ -21,14 +20,17 @@ import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.IDropTargetable;
 import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.IDropTargetable;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDropTargetEffect;
+import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDropTargetListener;
 import eu.etaxonomy.taxeditor.preference.Resources;
 
 /**
 import eu.etaxonomy.taxeditor.preference.Resources;
 
 /**
@@ -39,11 +41,11 @@ import eu.etaxonomy.taxeditor.preference.Resources;
  * @created 25.06.2008
  * @version 1.0
  */
  * @created 25.06.2008
  * @version 1.0
  */
-public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargetable{
+public abstract class AbstractGroup implements IDropTargetable{
        
        private Composite control;
        
        
        private Composite control;
        
-       private List<AbstractGroupedContainer<T>> groupedContainers = new ArrayList<AbstractGroupedContainer<T>>(); 
+       private List<AbstractGroupedContainer> groupedContainers = new ArrayList<AbstractGroupedContainer>(); 
        
        protected TaxonNameEditor editor;
        
        
        protected TaxonNameEditor editor;
        
@@ -58,14 +60,19 @@ public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargeta
         */
        public AbstractGroup(TaxonNameEditor editor){
                this.editor = editor;
         */
        public AbstractGroup(TaxonNameEditor editor){
                this.editor = editor;
-               
+       }
+       
+       protected void createContent(){
                createControl();
                
                createControl();
                
+               createContainers();
+               
                // Drop functionality
                this.setDroppable(true);
                // Drop functionality
                this.setDroppable(true);
-
+               
+               editor.getManagedForm().reflow(true);
        }
        }
-       
+
        /**
         * <p>createControl</p>
         */
        /**
         * <p>createControl</p>
         */
@@ -83,14 +90,14 @@ public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargeta
                layout.verticalSpacing = 0;
                layout.horizontalSpacing = 0;
                control.setLayout(layout);
                layout.verticalSpacing = 0;
                layout.horizontalSpacing = 0;
                control.setLayout(layout);
-       
+               
                control.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
        }
        
        /**
         * <p>add</p>
         *
                control.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
        }
        
        /**
         * <p>add</p>
         *
-        * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+        * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
         */
        public void add(AbstractGroupedContainer groupedContainer){
                groupedContainers.add(groupedContainer);
         */
        public void add(AbstractGroupedContainer groupedContainer){
                groupedContainers.add(groupedContainer);
@@ -100,57 +107,23 @@ public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargeta
        /**
         * <p>remove</p>
         *
        /**
         * <p>remove</p>
         *
-        * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+        * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
         */
        public void remove(AbstractGroupedContainer groupedContainer){
         */
        public void remove(AbstractGroupedContainer groupedContainer){
-               deleteContainer(groupedContainer);
+               groupedContainer.dispose();
                groupedContainers.remove(groupedContainer);
                
                groupedContainers.remove(groupedContainer);
                
-               editor.getManagedForm().reflow(true);
-       }
-       
-       /**
-        * <p>removeAllContainers</p>
-        */
-       public void removeAllContainers() {
-               for(AbstractGroupedContainer container : groupedContainers){
-                       deleteContainer(container);
+               if(!(this instanceof AcceptedGroup) && groupedContainers.isEmpty()){
+                       getEditor().removeGroup(this);
                }
                }
-               
-               groupedContainers.clear();
-       }
-       
-       /**
-        * <p>clearContainers</p>
-        */
-       public void clearContainers(){
-               groupedContainers.clear();
-       }
-       
-       /**
-        * <p>deleteContainer</p>
-        *
-        * @param groupedContainer a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
-        */
-       public void deleteContainer(AbstractGroupedContainer groupedContainer){
-               groupedContainer.setMenu(null);
-               groupedContainer.getControl().dispose();
-       }
-       
-       /**
-        * <p>clear</p>
-        */
-       public void clear(){
-               control.setMenu(null);
-               control.dispose();
-       }
+       }       
        
        /**
         * <p>Getter for the field <code>groupedContainers</code>.</p>
         *
         * @return a {@link java.util.List} object.
         */
        
        /**
         * <p>Getter for the field <code>groupedContainers</code>.</p>
         *
         * @return a {@link java.util.List} object.
         */
-       public List<AbstractGroupedContainer<T>> getGroupedContainers(){
+       public List<AbstractGroupedContainer> getGroupedContainers(){
                return groupedContainers;
        }
        
                return groupedContainers;
        }
        
@@ -177,22 +150,13 @@ public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargeta
                        }
                }
        }
                        }
                }
        }
-       
-       /**
-        * <p>Getter for the field <code>control</code>.</p>
-        *
-        * @return a {@link org.eclipse.swt.widgets.Composite} object.
-        */
-       public Composite getControl(){
-               return control;
-       }
 
        /**
         * <p>getNameEditor</p>
         *
         * @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
         */
 
        /**
         * <p>getNameEditor</p>
         *
         * @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
         */
-       public TaxonNameEditor getNameEditor() {
+       public TaxonNameEditor getEditor() {
                return editor;
        }
 
                return editor;
        }
 
@@ -201,7 +165,7 @@ public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargeta
         */
        public void dragEntered() {
                Color color = EditorUtil.getColor(Resources.COLOR_DRAG_ENTER);
         */
        public void dragEntered() {
                Color color = EditorUtil.getColor(Resources.COLOR_DRAG_ENTER);
-               
+                               
                for(AbstractGroupedContainer container : groupedContainers){
                        container.setBackground(color);
                }               
                for(AbstractGroupedContainer container : groupedContainers){
                        container.setBackground(color);
                }               
@@ -226,5 +190,54 @@ public abstract class AbstractGroup<T extends TaxonBase> implements IDropTargeta
        /**
         * <p>redraw</p>
         */
        /**
         * <p>redraw</p>
         */
-       public abstract void redraw();
+       public void redraw(){
+               emptyGroup();
+               createContainers();
+       }
+       
+       protected abstract void createContainers();
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.IDropTargetable#getControl()
+        */
+       @Override
+       public Composite getControl() {
+               return control;
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#onComplete()
+        */
+       @Override
+       public boolean onComplete() {
+               return true;
+       }
+       
+       public void dispose(){
+               if(getControl() != null){
+                       for(AbstractGroupedContainer container : getGroupedContainers()){
+                               container.dispose();
+                       }
+                       getControl().setMenu(null);
+                       getControl().dispose();
+               }
+       }
+       
+       /**
+        * @param object
+        */
+       public void setMenu(Menu menu) {
+               getControl().setMenu(menu);
+               for(AbstractGroupedContainer container : getGroupedContainers()){
+                       container.setMenu(menu);
+               }
+               
+       }
+
+       protected void emptyGroup(){
+               for(AbstractGroupedContainer container : groupedContainers){
+                       container.dispose();
+               }
+               groupedContainers.clear();
+       }
 }
 }
similarity index 81%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AbstractGroupedContainer.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java
index 9ce7189ed33d5bfc2414af007f672f1b55f35f6d..381091dfdf868965b95a1043c7b377ab6756dfd5 100644 (file)
@@ -7,9 +7,8 @@
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
 
  * 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 java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
@@ -45,17 +44,18 @@ import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 
 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.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.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;
 import eu.etaxonomy.taxeditor.model.NameHelper;
 import eu.etaxonomy.taxeditor.model.TextHelper;
 import eu.etaxonomy.taxeditor.parser.ParseHandler;
@@ -84,92 +84,16 @@ import eu.etaxonomy.taxeditor.preference.Resources;
  * @created 02.06.2008
  * @version 1.0
  */
  * @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 ParseHandler parseHandler;
        
        private FocusListener nameCompositeFocusListener;
        private ModifyListener nameCompositeModifyListener;
 
-       
-       protected TaxonNameEditor editor;
-       
        protected NameViewer nameViewer;
        
        protected NameViewer nameViewer;
        
-       private AbstractGroup<T> group;
+       private AbstractGroup group;
        
        private Label nonEditableInfoLabel;
        private DefaultToolTip nonEditableInfoHover;
        
        private Label nonEditableInfoLabel;
        private DefaultToolTip nonEditableInfoHover;
@@ -191,31 +115,28 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
         * <p>Constructor for AbstractGroupedContainer.</p>
         *
         * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
         * <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.
         */
         * @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);
                setData(taxonBase);
-               
+               parseHandler = ParseHandler.NewInstance(taxonBase.getName());
+       }
+       
+       public void createContent(){
                createControl();
                
                createTextViewer();
                createLineWrapSupport();
                createLineBreakListener();
 
                createControl();
                
                createTextViewer();
                createLineWrapSupport();
                createLineBreakListener();
 
-               setMenu(editor.getMenu());
+               setMenu(getEditor().getMenu());
                
                setDraggableControl(new Control[]{getControl(), getNameViewer().getRulerControl()});
                
                createEmptyViewerPrompt(EMPTY_NAME_PROMPT);
                
                
                setDraggableControl(new Control[]{getControl(), getNameViewer().getRulerControl()});
                
                createEmptyViewerPrompt(EMPTY_NAME_PROMPT);
                
-               parseHandler = ParseHandler.NewInstance(getNameViewer().getTextWidget(), taxonBase.getName());
                
                initializeComposite();
                
                
                initializeComposite();
                
@@ -364,7 +285,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
                TaxonNameBase synonymName = ParseHandler.quickParse(text);
                
                EditorUtil.executeOperation(new CreateSynonymInNewGroupOperation
                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()));
        }
 
        /**
        }
 
        /**
@@ -377,9 +298,14 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
                
                String text = NameHelper.getDisplayNameWithRef(getTaxonBase());
                
                
                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();
                if (text.length() == 0) {
                        initEmptyText();
-               } else {
+               } else if(! getNameViewer().getTextWidget().getText().equals(text)) {
                        removeListener();
                        getNameViewer().getTextWidget().setText(text);
                        addListener();
                        removeListener();
                        getNameViewer().getTextWidget().setText(text);
                        addListener();
@@ -533,9 +459,12 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
        /**
         * <p>Getter for the field <code>group</code>.</p>
         *
        /**
         * <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(){
         */
        public AbstractGroup getGroup(){
+               if(group == null){
+                       throw new IllegalStateException("Group shall not be null.");
+               }
                return group;
        }
        
                return group;
        }
        
@@ -550,7 +479,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
         * <p>createControl</p>
         */
        protected void createControl() {
         * <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();
                
                control.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
                TableWrapLayout layout = new TableWrapLayout();
@@ -566,6 +495,13 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
                
        }
        
                
        }
        
+       /**
+        * @return
+        */
+       protected TaxonNameEditor getEditor() {
+               return getGroup().getEditor();
+       }
+
        /**
         * <p>Getter for the field <code>control</code>.</p>
         *
        /**
         * <p>Getter for the field <code>control</code>.</p>
         *
@@ -579,7 +515,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
         * <p>createLineWrapSupport</p>
         */
        protected void createLineWrapSupport() {
         * <p>createLineWrapSupport</p>
         */
        protected void createLineWrapSupport() {
-               new LineWrapSupport(getNameViewer(), editor.getManagedForm());
+               new LineWrapSupport(getNameViewer(), getEditor().getManagedForm());
        }
        
        
        }
        
        
@@ -591,10 +527,10 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
                
                focusListener = new FocusAdapter() {
                        public void focusGained(FocusEvent e) {
                
                focusListener = new FocusAdapter() {
                        public void focusGained(FocusEvent e) {
-                               for(AbstractGroupedContainer container : editor.getGroupedContainers()){
+                               for(AbstractGroupedContainer container : getEditor().getGroupedContainers()){
                                        container.colorSelected(NOT_SELECTED);
                                }
                                        container.colorSelected(NOT_SELECTED);
                                }
-                               editor.getManagedForm().setInput(AbstractGroupedContainer.this);
+                               getEditor().getManagedForm().setInput(AbstractGroupedContainer.this);
                                placeCursor();
                                colorSelected(SELECTED_FOCUS);
                        }
                                placeCursor();
                                colorSelected(SELECTED_FOCUS);
                        }
@@ -651,7 +587,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
         * @return a boolean.
         */
        public boolean isSelected(){
         * @return a boolean.
         */
        public boolean isSelected(){
-               return editor.getSelectedObject() == this;
+               return getEditor().getSelectedContainer() == this;
        }
        
        /**
        }
        
        /**
@@ -695,7 +631,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
                Runnable runnable = new Runnable() {
                        
                        public void run() {
                Runnable runnable = new Runnable() {
                        
                        public void run() {
-                               editor.getManagedForm().setInput(selection);
+                               getEditor().getManagedForm().setInput(selection);
                        }
                };
                display.timerExec(1000, runnable);
                        }
                };
                display.timerExec(1000, runnable);
@@ -732,7 +668,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
        /**
         * <p>Getter for the field <code>nameViewer</code>.</p>
         *
        /**
         * <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 NameViewer getNameViewer() {
                if (nameViewer == null){
@@ -819,7 +755,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
         */
        public void setDirty(boolean isDirty) {
                if(isDirty){
         */
        public void setDirty(boolean isDirty) {
                if(isDirty){
-                       editor.getManagedForm().dirtyStateChanged();
+                       getEditor().getManagedForm().dirtyStateChanged();
                }
                this.isDirty = isDirty;
        }
                }
                this.isDirty = isDirty;
        }
@@ -928,7 +864,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
                }
                
                if (nonEditableInfoLabel == null) {
                }
                
                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) {
                        TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP);
                        // Set indent to viewer ruler's width 
                        if (getNameViewer().getRulerControl() != null) {
@@ -1036,9 +972,9 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
        /**
         * <p>Setter for the field <code>group</code>.</p>
         *
        /**
         * <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;
        }
 
                this.group = group;
        }
 
@@ -1068,8 +1004,10 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements I
         */
        @Override
        public void dispose() {
         */
        @Override
        public void dispose() {
-               // TODO Auto-generated method stub
-               
+               if(getControl() != null){
+                       setMenu(null);
+                       getControl().dispose();
+               }
        }
 
 
        }
 
 
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractHomotypicalGroupContainer.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractHomotypicalGroupContainer.java
new file mode 100644 (file)
index 0000000..e5718b8
--- /dev/null
@@ -0,0 +1,86 @@
+// $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.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 21, 2011
+ * @version 1.0
+ */
+public abstract class AbstractHomotypicalGroupContainer extends AbstractGroup {
+
+       private HomotypicalGroup group;
+       
+       /**
+        * @param editor
+        */
+       public AbstractHomotypicalGroupContainer(TaxonNameEditor editor, HomotypicalGroup group) {
+               super(editor);
+               this.group = group;
+
+               createContent();
+       }
+
+       protected abstract void createSynonymContainer();
+       
+       protected List<Synonym> getSynonyms(){          
+               return getGroup().getSynonymsInGroup(getEditor().getTaxon().getSec());
+       }
+       
+       /**
+        * @param group the group to set
+        */
+       public void setGroup(HomotypicalGroup group) {
+               this.group = group;
+       }
+
+       public void redraw(HomotypicalGroup homotypicalGroup){
+               if(redrawNeeded(homotypicalGroup)){
+                       setGroup(homotypicalGroup);
+                       redraw();
+               }
+       }
+
+       /**
+        * 
+        * @param homotypicalGroup
+        * @return
+        */
+       protected boolean redrawNeeded(HomotypicalGroup homotypicalGroup) {
+               List<Synonym> synonyms = homotypicalGroup.getSynonymsInGroup(getEditor().getTaxon().getSec());
+                               
+               List<Synonym> presentSynonyms = new ArrayList<Synonym>();
+               
+               for(AbstractGroupedContainer container : getGroupedContainers()){
+                       if(container.getData() instanceof Synonym){
+                               presentSynonyms.add((Synonym) container.getData());
+                       }
+               }
+                               
+               boolean result = ! (presentSynonyms.containsAll(synonyms) && synonyms.containsAll(presentSynonyms));
+               
+               return result;
+       }
+       
+       /**
+        * @return the group
+        */
+       public HomotypicalGroup getGroup() {
+               return group;
+       }
+}
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AcceptedGroup.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AcceptedGroup.java
new file mode 100644 (file)
index 0000000..807c7ee
--- /dev/null
@@ -0,0 +1,123 @@
+// $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.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.graphics.Color;
+
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.preference.Resources;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 20, 2011
+ * @version 1.0
+ */
+public class AcceptedGroup extends AbstractHomotypicalGroupContainer {
+
+       private AcceptedNameContainer acceptedContainer;
+
+       /**
+        * @param editor
+        * @param group
+        */
+       public AcceptedGroup(TaxonNameEditor editor, HomotypicalGroup group) {
+               super(editor, group);
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#dragEntered()
+        */
+       @Override
+       public void dragEntered() {
+               Color color = EditorUtil.getColor(Resources.COLOR_DRAG_ENTER);
+               acceptedContainer.setBackground(color);
+               super.dragEntered();
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#dragLeft()
+        */
+       @Override
+       public void dragLeft() {
+               acceptedContainer.restoreColor();
+               super.dragLeft();
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup#getGroupedContainers()
+        */
+       @Override
+       public List<AbstractGroupedContainer> getGroupedContainers() {
+               List<AbstractGroupedContainer> containers = new ArrayList<AbstractGroupedContainer>();
+               containers.add(getAcceptedNameContainer());
+               containers.addAll(super.getGroupedContainers());
+               return containers;
+       }
+       
+       /**
+        * 
+        */
+       protected void createContainers() {
+               this.acceptedContainer = new AcceptedNameContainer(getEditor().getTaxon());
+               acceptedContainer.setGroup(this);
+               
+               acceptedContainer.createContent();
+               
+               createSynonymContainer();
+       }
+       
+       protected void createSynonymContainer(){
+               for(Synonym synonym : getSynonyms()){
+                       SynonymContainer container = new SynonymContainer(this, synonym);
+                       this.add(container);
+                       container.createContent();
+               }
+       }
+
+       /**
+        * @param acceptedNameContainer
+        */
+       public void setAcceptedNameContainer(AcceptedNameContainer acceptedNameContainer) {
+               this.acceptedContainer = acceptedNameContainer;
+               acceptedContainer.setGroup(this);
+       }
+       
+       public AcceptedNameContainer getAcceptedNameContainer(){
+               return acceptedContainer;
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#emptyGroup()
+        */
+       @Override
+       protected void emptyGroup() {
+               acceptedContainer.dispose();
+               acceptedContainer = null;
+               super.emptyGroup();
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractHomotypicalGroupContainer#redrawNeeded(eu.etaxonomy.cdm.model.name.HomotypicalGroup)
+        */
+       @Override
+       protected boolean redrawNeeded(HomotypicalGroup homotypicalGroup) {
+               if(! acceptedContainer.getData().equals(getEditor().getTaxon())){
+                       return true;
+               }
+               return super.redrawNeeded(homotypicalGroup);
+       }
+}
similarity index 65%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AcceptedNameContainer.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AcceptedNameContainer.java
index c55072a1c8aeca362e3d4e9005867ae0f66af6de..2e28b95ab08d1dc3eaee4d8bf2a5ab8501f9b3b0 100644 (file)
@@ -6,12 +6,14 @@
 * 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.
 */
 * 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.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
 
 import org.eclipse.swt.graphics.Font;
 
 
 import org.eclipse.swt.graphics.Font;
 
+import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
 import eu.etaxonomy.taxeditor.preference.Resources;
 
 /**
 import eu.etaxonomy.taxeditor.preference.Resources;
 
 /**
@@ -23,14 +25,17 @@ import eu.etaxonomy.taxeditor.preference.Resources;
  */
 public class AcceptedNameContainer extends AbstractGroupedContainer<Taxon> {
        
  */
 public class AcceptedNameContainer extends AbstractGroupedContainer<Taxon> {
        
+       private AcceptedGroup acceptedGroup;
+
+
        /**
         * <p>Constructor for AcceptedNameContainer.</p>
         *
         * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
        /**
         * <p>Constructor for AcceptedNameContainer.</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.
         */
         */
-       public AcceptedNameContainer(TaxonNameEditor editor, AbstractGroup group) {
-               super(editor, group, editor.getTaxon());
+       public AcceptedNameContainer(Taxon taxon) {
+               super(taxon);
        }
 
 
        }
 
 
@@ -49,14 +54,27 @@ public class AcceptedNameContainer extends AbstractGroupedContainer<Taxon> {
                return EditorUtil.getFont(Resources.ACCEPTED_TAXON_FONT);
        }
 
                return EditorUtil.getFont(Resources.ACCEPTED_TAXON_FONT);
        }
 
-
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer#setGroup(eu.etaxonomy.taxeditor.editor.name.AbstractGroup)
+        */
+       public void setGroup(AcceptedGroup group) {
+               this.acceptedGroup = group;
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer#getGroup()
+        */
+       @Override
+       public AbstractGroup getGroup() {
+               return acceptedGroup;
+       }
        
        /** {@inheritDoc} */
        @Override
        protected void updateNonEditableInfo() {
                // not needed
        }
        
        /** {@inheritDoc} */
        @Override
        protected void updateNonEditableInfo() {
                // not needed
        }
-
+       
 
        @Override
        protected void updateIcon() {
 
        @Override
        protected void updateIcon() {
similarity index 91%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptContainer.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ConceptContainer.java
index dc28c26d3fc1863a1994b587943b0cdfaabb812e..d89622b99e12cdf2a49d34022be95809d16befd0 100644 (file)
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * 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 org.eclipse.swt.graphics.Font;
 
 
 import org.eclipse.swt.graphics.Font;
 
@@ -15,6 +15,7 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
 import eu.etaxonomy.taxeditor.preference.Resources;
 
 /**
 import eu.etaxonomy.taxeditor.preference.Resources;
 
 /**
@@ -32,7 +33,7 @@ public class ConceptContainer extends AbstractGroupedContainer<Taxon> {
        private ConceptContainer(TaxonNameEditor editor, AbstractGroup group,
                        Taxon relatedTaxon, TaxonRelationshipType relationshipType, 
                        boolean acceptedTaxonIsFromTaxon) {
        private ConceptContainer(TaxonNameEditor editor, AbstractGroup group,
                        Taxon relatedTaxon, TaxonRelationshipType relationshipType, 
                        boolean acceptedTaxonIsFromTaxon) {
-               super(editor, group, relatedTaxon);
+               super(relatedTaxon);
 
                // FIXME the acceptedTaxonIsFromTaxon is never used and 
                // I can't remember what is was used for in the first place
 
                // FIXME the acceptedTaxonIsFromTaxon is never used and 
                // I can't remember what is was used for in the first place
@@ -81,9 +82,9 @@ public class ConceptContainer extends AbstractGroupedContainer<Taxon> {
         * <p>getNewInstance</p>
         *
         * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
         * <p>getNewInstance</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 relationship a {@link eu.etaxonomy.cdm.model.taxon.TaxonRelationship} object.
         * @param relationship a {@link eu.etaxonomy.cdm.model.taxon.TaxonRelationship} object.
-        * @return a {@link eu.etaxonomy.taxeditor.editor.name.ConceptContainer} object.
+        * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.ConceptContainer} object.
         */
        public static ConceptContainer getNewInstance(TaxonNameEditor editor, AbstractGroup group, TaxonRelationship relationship){
 
         */
        public static ConceptContainer getNewInstance(TaxonNameEditor editor, AbstractGroup group, TaxonRelationship relationship){
 
similarity index 63%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptGroup.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ConceptGroup.java
index 074a8982fbf185a12518bd52b2010f67c01fc049..dab86a4265e0c23d86579848b60e2ec989091974 100644 (file)
@@ -7,10 +7,9 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * 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 eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
 
 /**
  * <p>ConceptGroup class.</p>
 
 /**
  * <p>ConceptGroup class.</p>
@@ -19,7 +18,7 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
  * @created 21.01.2009
  * @version 1.0
  */
  * @created 21.01.2009
  * @version 1.0
  */
-public class ConceptGroup extends AbstractGroup<Taxon> {
+public class ConceptGroup extends AbstractGroup {
 
        /**
         * <p>Constructor for ConceptGroup.</p>
 
        /**
         * <p>Constructor for ConceptGroup.</p>
@@ -30,21 +29,13 @@ public class ConceptGroup extends AbstractGroup<Taxon> {
                super(editor);
        }
        
                super(editor);
        }
        
-       /** {@inheritDoc} */
-       @Override
-       public void redraw() {
-               // TODO Auto-generated method stub
-               
-       }
 
 
-       /**
-        * <p>onComplete</p>
-        *
-        * @return a boolean.
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#createContents()
         */
         */
-       public boolean onComplete() {
+       @Override
+       protected void createContainers() {
                // TODO Auto-generated method stub
                // TODO Auto-generated method stub
-               return false;
+               
        }
        }
-
 }
 }
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ContainerFactory.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/ContainerFactory.java
new file mode 100644 (file)
index 0000000..7672265
--- /dev/null
@@ -0,0 +1,118 @@
+/**
+ * 
+ */
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+
+/**
+ * <p>ContainerFactory class.</p>
+ *
+ * @author n.hoffmann
+ * @version $Id: $
+ */
+public class ContainerFactory {
+               
+       /**
+        * @param taxonNameEditor
+        */
+       public static void createOrUpdateAcceptedTaxonsHomotypicGroup(
+                       TaxonNameEditor taxonNameEditor) {
+
+               if(taxonNameEditor.getAcceptedGroup() == null){
+                       taxonNameEditor.setAcceptedGroup(new AcceptedGroup(taxonNameEditor, taxonNameEditor.getTaxon().getHomotypicGroup()));
+               }
+               else{
+                       taxonNameEditor.getAcceptedGroup().redraw(taxonNameEditor.getTaxon().getHomotypicGroup());
+               }
+               
+       }
+
+       /**
+        * @param taxonNameEditor
+        */
+       public static void createOrUpdateHeterotypicSynonymyGroups(
+                       TaxonNameEditor taxonNameEditor) {
+               List<HomotypicalSynonymGroup> retainedGroups = new ArrayList<HomotypicalSynonymGroup>();
+               
+               for(HomotypicalSynonymGroup group : taxonNameEditor.getHeterotypicSynonymGroups()){
+                       retainedGroups.add(group);
+               }
+               
+               for(HomotypicalGroup homotypicalGroup : taxonNameEditor.getTaxon().getHeterotypicSynonymyGroups()){
+                       HomotypicalSynonymGroup group = createOrUpdateHeterotypicSynonymyGroup(taxonNameEditor, homotypicalGroup);
+                       
+                       retainedGroups.remove(group);
+               }
+               
+               for(HomotypicalSynonymGroup retainedGroup : retainedGroups){
+                       taxonNameEditor.removeGroup(retainedGroup);
+               }
+       }
+
+
+       public static HomotypicalSynonymGroup createOrUpdateHeterotypicSynonymyGroup(
+                       TaxonNameEditor taxonNameEditor, HomotypicalGroup homotypicalGroup){
+               HomotypicalSynonymGroup group = null;
+               if(taxonNameEditor.getHomotypicalGroupContainer(homotypicalGroup) == null){
+                       group = new HomotypicalSynonymGroup(taxonNameEditor, homotypicalGroup);
+                       taxonNameEditor.addHeterotypicSynonymGroup(group);
+                       if(taxonNameEditor.getMisappliedGroup() != null){
+                               group.getControl().moveAbove(taxonNameEditor.getMisappliedGroup().getControl());
+                       }
+               }
+               else{
+                       group = taxonNameEditor.getHomotypicalGroupContainer(homotypicalGroup);
+                       group.redraw(homotypicalGroup);
+               }
+               
+               return group;
+       }
+
+       /**
+        * @param taxonNameEditor
+        */
+       public static void createOrUpdateMisapplicationsGroup(
+                       TaxonNameEditor taxonNameEditor) {
+               MisappliedGroup group = taxonNameEditor.getMisappliedGroup();
+               if(taxonNameEditor.getTaxon().getMisappliedNames().isEmpty()){
+                       taxonNameEditor.removeGroup(group);             
+                       taxonNameEditor.setMisapplicationsGroup(null);
+               }else{
+                       if(group == null){
+                               taxonNameEditor.setMisapplicationsGroup(new MisappliedGroup(taxonNameEditor));
+                       }else{
+                               group.redraw();
+                       }
+               }
+               
+       }
+
+       /**
+        * @param taxonNameEditor
+        */
+       public static void createOrUpdateConceptGroup(
+                       TaxonNameEditor taxonNameEditor) {
+               Set<TaxonRelationship> filteredTaxonRelations = new HashSet<TaxonRelationship>();
+               
+               for (TaxonRelationship relationship : taxonNameEditor.getTaxon().getTaxonRelations()) {
+                       if (! relationship.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR()) ||
+                                        relationship.getType().equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {
+                               filteredTaxonRelations.add(relationship);
+                       }
+               }
+               
+               if(! filteredTaxonRelations.isEmpty()){
+                       taxonNameEditor.setConceptGroup(new ConceptGroup(taxonNameEditor));
+               }
+       }
+
+}
similarity index 98%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/EditorAnnotation.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/EditorAnnotation.java
index 3d7db78a14e714df254fccac798fa5b83b7b8100..64c53afc223972b4a84e867019566ae1bc0bd409 100644 (file)
@@ -1,4 +1,4 @@
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.container;
 
 import org.apache.log4j.Logger;
 import org.eclipse.core.resources.IMarker;
 
 import org.apache.log4j.Logger;
 import org.eclipse.core.resources.IMarker;
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/HomotypicalSynonymGroup.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/HomotypicalSynonymGroup.java
new file mode 100644 (file)
index 0000000..85c9c72
--- /dev/null
@@ -0,0 +1,68 @@
+/**
+* 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.editor.name.container;
+
+import org.eclipse.swt.graphics.Image;
+
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+
+/**
+ * <p>HomotypicalSynonymGroup class.</p>
+ *
+ * @author p.ciardelli
+ * @created 13.01.2009
+ * @version 1.0
+ */
+public class HomotypicalSynonymGroup extends AbstractHomotypicalGroupContainer {
+
+       /**
+        * <p>Constructor for HomotypicalSynonymGroup.</p>
+        *
+        * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
+        * @param group a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
+        */
+       public HomotypicalSynonymGroup(TaxonNameEditor editor, HomotypicalGroup group) {
+               super(editor, group);
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#createContents()
+        */
+       @Override
+       protected void createContainers() {
+               createSynonymContainer();
+       }       
+       
+       protected void createSynonymContainer(){
+               int i = 0;
+               int indent = IContainerConstants.SYNONYM_INDENT;
+               Image icon = IContainerConstants.HETEROTYPIC_SYNONYM_ICON;
+               for(Synonym synonym : getSynonyms()){
+                       if(i > 0){
+                               indent = IContainerConstants.HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT;
+                               icon = IContainerConstants.HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON;
+                       }
+                       SynonymContainer container = new SynonymContainer(this, synonym, indent, icon);
+                       this.add(container);
+                       container.createContent();
+                       i++;
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractHomotypicalGroupContainer#redrawNeeded(eu.etaxonomy.cdm.model.name.HomotypicalGroup)
+        */
+       @Override
+       protected boolean redrawNeeded(HomotypicalGroup homotypicalGroup) {
+               return super.redrawNeeded(homotypicalGroup);
+       }
+}
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/IContainerConstants.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/IContainerConstants.java
new file mode 100644 (file)
index 0000000..e72fdf8
--- /dev/null
@@ -0,0 +1,94 @@
+// $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.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name.container;
+
+import org.eclipse.swt.graphics.Image;
+
+import eu.etaxonomy.taxeditor.model.ImageResources;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 20, 2011
+ * @version 1.0
+ */
+public interface IContainerConstants {
+       /**
+        * 
+        */
+       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 ************
+        */
+       /** 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;
+
+       
+       /**
+        * ************ 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";
+
+       public static final String EMPTY_NAME_PROMPT = "Click to add name";
+}
similarity index 98%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineBreakListener.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineBreakListener.java
index c4cdd9818f91eb3837656cdf1705886c3d457e43..cd0005f7ca2d19994a888bafe5d98d1fad843ec9 100644 (file)
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * 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.util.ArrayList;
 import java.util.Collection;
 
 import java.util.ArrayList;
 import java.util.Collection;
similarity index 98%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineWrapSquigglesStrategy.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineWrapSquigglesStrategy.java
index 87c8003f84006bb43f189c81b47effd0513be9bc..a0a79ab13bf19c452e3a25583fa934b3bc919cbb 100644 (file)
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * 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 org.eclipse.jface.text.source.Annotation;
 import org.eclipse.jface.text.source.AnnotationPainter.SquigglesStrategy;
 
 import org.eclipse.jface.text.source.Annotation;
 import org.eclipse.jface.text.source.AnnotationPainter.SquigglesStrategy;
similarity index 97%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/LineWrapSupport.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/LineWrapSupport.java
index babaf716bb1682711977864d5edb35d37f84edbf..5dcd2f01ec5efe6ee7f4f0728ddd9ff8cd61c1b9 100644 (file)
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * 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 org.apache.log4j.Logger;
 import org.eclipse.jface.text.TextViewer;
 
 import org.apache.log4j.Logger;
 import org.eclipse.jface.text.TextViewer;
similarity index 89%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisapplicationContainer.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/MisapplicationContainer.java
index 4a46fd7544426bc3758d7c2db5069fe1de88bced..33229eb0340af234327bb3be61fb1146118136d4 100644 (file)
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * 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 org.eclipse.swt.graphics.Font;
 
 
 import org.eclipse.swt.graphics.Font;
 
@@ -28,11 +28,11 @@ public class MisapplicationContainer extends AbstractGroupedContainer<Taxon> {
         * <p>Constructor for MisapplicationContainer.</p>
         *
         * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
         * <p>Constructor for MisapplicationContainer.</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 misappliedName a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
         */
         * @param misappliedName a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
         */
-       public MisapplicationContainer(TaxonNameEditor editor, AbstractGroup group, Taxon misappliedName) {
-               super(editor, group, misappliedName);
+       public MisapplicationContainer(AbstractGroup group, Taxon misappliedName) {
+               super(misappliedName);
        }
        
 
        }
        
 
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/MisappliedGroup.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/MisappliedGroup.java
new file mode 100644 (file)
index 0000000..0f3e9ae
--- /dev/null
@@ -0,0 +1,73 @@
+/**
+* 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.editor.name.container;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+
+/**
+ * <p>MisappliedGroup class.</p>
+ *
+ * @author p.ciardelli
+ * @created 13.01.2009
+ * @version 1.0
+ */
+public class MisappliedGroup extends AbstractGroup{
+
+       /**
+        * <p>Constructor for MisappliedGroup.</p>
+        *
+        * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
+        */
+       public MisappliedGroup(TaxonNameEditor editor) {
+               super(editor);
+               
+               createContent();
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroup#createContents()
+        */
+       @Override
+       protected void createContainers() {
+               for(Taxon misapplication : getEditor().getTaxon().getMisappliedNames()){
+                       MisapplicationContainer container = new MisapplicationContainer(this, misapplication);
+                       this.add(container);
+                       container.createContent();
+               }
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup#redraw()
+        */
+       @Override
+       public void redraw() {
+               if(redrawNeeded()){
+                       super.redraw();
+               }
+       }
+
+       /**
+        * @return
+        */
+       private boolean redrawNeeded() {
+               Set<Taxon> misapplications = getEditor().getTaxon().getMisappliedNames();
+                               
+               Set<Taxon> presentMisapplication = new HashSet<Taxon>(); 
+               
+               for (AbstractGroupedContainer<Taxon> container  : getGroupedContainers()){
+                       presentMisapplication.add(container.getData());
+               }
+               return ! (presentMisapplication.containsAll(misapplications) && misapplications.containsAll(presentMisapplication));
+       }
+}
similarity index 97%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameViewer.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/NameViewer.java
index ad3a5a6dc5215213121890cb138cfba834a1eeb2..aa08018871e25a4951d1aff1094c1d99dbf08154 100644 (file)
@@ -7,11 +7,10 @@
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
 
  * 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.util.Iterator;
 
 
 import java.util.Iterator;
 
-import org.apache.log4j.Logger;
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jface.text.Document;
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jface.text.Document;
@@ -61,8 +60,6 @@ import eu.etaxonomy.taxeditor.preference.Resources;
  * @version 1.0
  */
 public class NameViewer extends SourceViewer {
  * @version 1.0
  */
 public class NameViewer extends SourceViewer {
-       private static final Logger logger = Logger
-                       .getLogger(NameViewer.class);
                
        /** Constant <code>RULER_WIDTH=16</code> */
        public static final int RULER_WIDTH = 16;
                
        /** Constant <code>RULER_WIDTH=16</code> */
        public static final int RULER_WIDTH = 16;
@@ -157,7 +154,7 @@ public class NameViewer extends SourceViewer {
                if (ruler instanceof RulerWithIcon) {
                        ((RulerWithIcon) ruler).setIcon(icon);
                } else {
                if (ruler instanceof RulerWithIcon) {
                        ((RulerWithIcon) ruler).setIcon(icon);
                } else {
-                       logger.warn("Viewer's IVerticalRuler is not an instance of RulerWithIcon.");
+                       throw new IllegalStateException("Viewer's IVerticalRuler is not an instance of RulerWithIcon.");
                }
        }
        
                }
        }
        
@@ -315,7 +312,6 @@ public class NameViewer extends SourceViewer {
                        Assert.isNotNull(this.getTextWidget());
                        this.getTextWidget().setText(text);
                } catch (RuntimeException e) {
                        Assert.isNotNull(this.getTextWidget());
                        this.getTextWidget().setText(text);
                } catch (RuntimeException e) {
-                       logger.error("Could not set the text for a name viewer");
                        throw e;
                }
        }
                        throw e;
                }
        }
similarity index 99%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/RulerWithIcon.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/RulerWithIcon.java
index 16559fd88a381bd5785a0b513490113f29180013..db441616093b6fbd10531d4797615ce3d97f46c2 100644 (file)
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * 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.util.Iterator;
 
 
 import java.util.Iterator;
 
similarity index 76%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/SynonymContainer.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/SynonymContainer.java
index 6de6fd6f57d76d7f61ea68d6e28cb80fe7946f24..e69cf6ebda40c8e3588e954a1fe8dde5d221e7c6 100644 (file)
@@ -7,11 +7,12 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * 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.util.Set;
 
 import org.eclipse.swt.graphics.Font;
 
 import java.util.Set;
 
 import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
 
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
 
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
@@ -30,15 +31,24 @@ import eu.etaxonomy.taxeditor.preference.Resources;
  */
 public class SynonymContainer extends AbstractGroupedContainer<Synonym> {
 
  */
 public class SynonymContainer extends AbstractGroupedContainer<Synonym> {
 
+       private int indent = SYNONYM_INDENT;
+       private Image icon = HETEROTYPIC_SYNONYM_ICON;
+
        /**
         * <p>Constructor for SynonymContainer.</p>
         *
         * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object.
        /**
         * <p>Constructor for SynonymContainer.</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 synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object.
         */
         * @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object.
         */
-       public SynonymContainer(TaxonNameEditor editor, AbstractGroup group, Synonym synonym) {
-               super(editor, group, synonym);
+       public SynonymContainer(AbstractHomotypicalGroupContainer group, Synonym synonym) {
+               super(synonym);
+       }
+       
+       public SynonymContainer(AbstractHomotypicalGroupContainer group, Synonym synonym, int indent, Image icon){
+               super(synonym);
+               this.indent = indent;
+               this.icon = icon;
        }
        
        /* (non-Javadoc)
        }
        
        /* (non-Javadoc)
@@ -60,18 +70,8 @@ public class SynonymContainer extends AbstractGroupedContainer<Synonym> {
        protected void updateIcon(){
                TaxonNameBase name = getName();
                
        protected void updateIcon(){
                TaxonNameBase name = getName();
                
-               if (isHomotypic()) {
-                       if (name.isGroupsBasionym()) {
-                               setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);
-                       } else {
-                               setIcon(HOMOTYPIC_SYNONYM_ICON);
-                       }       
-                       
-                       return;
-               } 
-               
                if(! name.getStatus().isEmpty()){
                if(! name.getStatus().isEmpty()){
-               
+                       
                        Set<NomenclaturalStatus> allStatus = name.getStatus();
                        
                        for (NomenclaturalStatus status : allStatus){
                        Set<NomenclaturalStatus> allStatus = name.getStatus();
                        
                        for (NomenclaturalStatus status : allStatus){
@@ -81,23 +81,29 @@ public class SynonymContainer extends AbstractGroupedContainer<Synonym> {
                                }
                        }
                }
                                }
                        }
                }
+               
+               if (isHomotypic()) {
+                       if(name.isGroupsBasionym()){
+                               setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);
+                       }else{
+                               setIcon(HOMOTYPIC_SYNONYM_ICON);
+                       }
                        
                        
-               if (name.getHomotypicalGroup().getBasionyms().isEmpty()) {
-                       setIcon(HETEROTYPIC_SYNONYM_ICON);
-               }else{
-                       if (name.isGroupsBasionym()) {
+                       return;
+               } else{
+                       if(name.isGroupsBasionym()){
                                setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);
                                setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);
-                       } else {
-                               setIcon(HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_ICON);
-                       }                                       
-               }
-               
+                               return;
+                       }
+               }       
+                               
+               setIcon(icon);
                
        }
        
        private boolean isHomotypic() {
                HomotypicalGroup group = getSynonym().getHomotypicGroup();
                
        }
        
        private boolean isHomotypic() {
                HomotypicalGroup group = getSynonym().getHomotypicGroup();
-               return group.equals(editor.getTaxon().getHomotypicGroup()); 
+               return group.equals(getEditor().getTaxon().getHomotypicGroup()); 
        }
        
        /**
        }
        
        /**
@@ -129,14 +135,7 @@ public class SynonymContainer extends AbstractGroupedContainer<Synonym> {
         * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer#updateIndent()
         */
        @Override
         * @see eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer#updateIndent()
         */
        @Override
-       protected void updateIndent() {
-               TaxonNameBase name = getName();
-       
-               if (!isHomotypic() && !name.getHomotypicalGroup().getBasionyms().isEmpty() && !name.isGroupsBasionym()) {
-                       setIndent(HOMOTYPIC_SYNONYM_IN_HETEROTYPIC_GROUP_INDENT);
-                       return;
-               }
-               
-               setIndent(SYNONYM_INDENT);
+       protected void updateIndent() {         
+               setIndent(this.indent );
        }
 }
        }
 }
similarity index 77%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDragListener.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDragListener.java
index c229b0a85bfb1671031d594d46f1f25997282910..75aa6c30e49590d4a84cbe25b22fe0922880f115 100644 (file)
@@ -1,15 +1,16 @@
 /**
  * 
  */
 /**
  * 
  */
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.dnd;
 
 
-import org.apache.log4j.Logger;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DragSourceAdapter;
 import org.eclipse.swt.dnd.DragSourceEvent;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DragSourceAdapter;
 import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.ui.forms.ManagedForm;
 
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
 
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
 
 /**
  * <p>NameEditorDragListener class.</p>
 
 /**
  * <p>NameEditorDragListener class.</p>
@@ -19,14 +20,12 @@ import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
  */
 public class NameEditorDragListener extends DragSourceAdapter {
        
  */
 public class NameEditorDragListener extends DragSourceAdapter {
        
-       private static final Logger logger = Logger.getLogger(NameEditorDragListener.class);
-       
        private AbstractGroupedContainer container;
                
        /**
         * <p>Constructor for NameEditorDragListener.</p>
         *
        private AbstractGroupedContainer container;
                
        /**
         * <p>Constructor for NameEditorDragListener.</p>
         *
-        * @param container a {@link eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer} object.
+        * @param container a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer} object.
         */
        public NameEditorDragListener(AbstractGroupedContainer container){
                this.container = container;
         */
        public NameEditorDragListener(AbstractGroupedContainer container){
                this.container = container;
@@ -37,8 +36,9 @@ public class NameEditorDragListener extends DragSourceAdapter {
                if(!event.doit)
                        return;
                if(event.detail == DND.DROP_MOVE){
                if(!event.doit)
                        return;
                if(event.detail == DND.DROP_MOVE){
-                       logger.warn("drag finished");
-                       container.remove();
+                       ManagedForm managedForm = container.getGroup().getEditor().getManagedForm();
+                       container.getGroup().remove(container);
+                       managedForm.reflow(true);
                }
                
        };
                }
                
        };
similarity index 94%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDragSourceEffect.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDragSourceEffect.java
index c5b66a23324876d03a4e82ae6c1dda93a9b98126..2c24b900473a00c1a23fd61601f4a40fc167928a 100644 (file)
@@ -1,7 +1,7 @@
 /**
  * 
  */
 /**
  * 
  */
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.dnd;
 
 import org.eclipse.swt.dnd.DragSourceEffect;
 import org.eclipse.swt.dnd.DragSourceEvent;
 
 import org.eclipse.swt.dnd.DragSourceEffect;
 import org.eclipse.swt.dnd.DragSourceEvent;
similarity index 96%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDropTargetEffect.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDropTargetEffect.java
index 5121bd6c014420fdc01fe3d4cd1e496bd59f87e0..56d6a9651ef33babc0ddc7ad2fa50eef6535f894 100644 (file)
@@ -1,7 +1,7 @@
 /**
  * 
  */
 /**
  * 
  */
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.dnd;
 
 import org.eclipse.swt.dnd.DropTargetEffect;
 import org.eclipse.swt.dnd.DropTargetEvent;
 
 import org.eclipse.swt.dnd.DropTargetEffect;
 import org.eclipse.swt.dnd.DropTargetEvent;
similarity index 71%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameEditorDropTargetListener.java
rename to taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/dnd/NameEditorDropTargetListener.java
index cc00c1711ae5e4dd5a5c7e3959d6cd4aef538fa3..18dd1c771cff6addc1586f6112541166f4395bd5 100644 (file)
@@ -1,9 +1,8 @@
 /**
  * 
  */
 /**
  * 
  */
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.editor.name.dnd;
 
 
-import org.apache.log4j.Logger;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DropTargetAdapter;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DropTargetAdapter;
@@ -17,6 +16,10 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.IDropTargetable;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.IDropTargetable;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractHomotypicalGroupContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup;
+import eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup;
 import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptRelationshipTypeOperation;
 import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptToSynonymOperation;
 import eu.etaxonomy.taxeditor.editor.name.operation.ChangeHomotypicGroupOperation;
 import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptRelationshipTypeOperation;
 import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptToSynonymOperation;
 import eu.etaxonomy.taxeditor.editor.name.operation.ChangeHomotypicGroupOperation;
@@ -31,10 +34,6 @@ import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
  */
 public class NameEditorDropTargetListener extends DropTargetAdapter {
                
  */
 public class NameEditorDropTargetListener extends DropTargetAdapter {
                
-       private static final Logger logger = Logger.getLogger(NameEditorDropTargetListener.class);
-       
-       private TaxonNameEditor editor;
-
        private IDropTargetable target;
 
        /**
        private IDropTargetable target;
 
        /**
@@ -44,7 +43,6 @@ public class NameEditorDropTargetListener extends DropTargetAdapter {
         */
        public NameEditorDropTargetListener(IDropTargetable target){
                this.target = target;
         */
        public NameEditorDropTargetListener(IDropTargetable target){
                this.target = target;
-               editor = target.getNameEditor();
        }
        
        /** {@inheritDoc} */
        }
        
        /** {@inheritDoc} */
@@ -79,7 +77,7 @@ public class NameEditorDropTargetListener extends DropTargetAdapter {
                
                // Execute operation if it has been initiated
                if (operation == null) {
                
                // Execute operation if it has been initiated
                if (operation == null) {
-                       logger.warn("User unsuccessfully tried to drop: " + taxonBase.getClass() +
+                       EditorUtil.warn(getClass(), "User unsuccessfully tried to drop: " + taxonBase.getClass() +
                                        ". Target: " + target);
                        dropTargetEvent.detail = DND.DROP_NONE;
                } else {
                                        ". Target: " + target);
                        dropTargetEvent.detail = DND.DROP_NONE;
                } else {
@@ -92,33 +90,33 @@ public class NameEditorDropTargetListener extends DropTargetAdapter {
                if(taxonBase instanceof Synonym){
                        Synonym synonym = (Synonym) taxonBase;
                        
                if(taxonBase instanceof Synonym){
                        Synonym synonym = (Synonym) taxonBase;
                        
-                       if(target instanceof HomotypicalSynonymGroup){
-                               HomotypicalGroup homotypicalGroup = ((HomotypicalSynonymGroup) target).getGroup();
+                       if(target instanceof AbstractHomotypicalGroupContainer){
+                               HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
                                
                                
-                               return new ChangeHomotypicGroupOperation("Change Homotypical Group", editor.getUndoContext(), 
-                                               editor.getTaxon(), synonym, homotypicalGroup, target);
+                               return new ChangeHomotypicGroupOperation("Change Homotypical Group", getEditor().getUndoContext(), 
+                                               getEditor().getTaxon(), synonym, homotypicalGroup, target);
                        }
                        else if(target instanceof MisappliedGroup){
                        }
                        else if(target instanceof MisappliedGroup){
-                               return new ChangeSynonymToMisapplicationOperation("Change Synonym to Misapplication", editor.getUndoContext(), 
-                                               editor.getTaxon(), synonym, target);
+                               return new ChangeSynonymToMisapplicationOperation("Change Synonym to Misapplication", getEditor().getUndoContext(), 
+                                               getEditor().getTaxon(), synonym, target);
                        }
                        else if(target instanceof TaxonNameEditor){
                        }
                        else if(target instanceof TaxonNameEditor){
-                               return new ChangeHomotypicGroupOperation("Change Homotypical Group", editor.getUndoContext(), 
-                                               editor.getTaxon(), synonym, null, target);
+                               return new ChangeHomotypicGroupOperation("Change Homotypical Group", getEditor().getUndoContext(), 
+                                               getEditor().getTaxon(), synonym, null, target);
                        }
                        
                }else if(taxonBase instanceof Taxon){
                        Taxon concept = (Taxon) taxonBase;
                        
                        }
                        
                }else if(taxonBase instanceof Taxon){
                        Taxon concept = (Taxon) taxonBase;
                        
-                       if(target instanceof HomotypicalSynonymGroup){
-                               HomotypicalGroup homotypicalGroup = ((HomotypicalSynonymGroup) target).getGroup();
+                       if(target instanceof AbstractHomotypicalGroupContainer){
+                               HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
                                
                                
-                               return new ChangeConceptToSynonymOperation("Change to Synonym", editor.getUndoContext(), 
-                                               editor.getTaxon(), concept, homotypicalGroup, target);
+                               return new ChangeConceptToSynonymOperation("Change to Synonym", getEditor().getUndoContext(), 
+                                               getEditor().getTaxon(), concept, homotypicalGroup, target);
                        }
                        else if(target instanceof MisappliedGroup ){
                        }
                        else if(target instanceof MisappliedGroup ){
-                               return new ChangeConceptRelationshipTypeOperation("Change", editor.getUndoContext(), 
-                                               editor.getTaxon(), concept, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), target);
+                               return new ChangeConceptRelationshipTypeOperation("Change", getEditor().getUndoContext(), 
+                                               getEditor().getTaxon(), concept, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), target);
                        }
                }
 
                        }
                }
 
@@ -134,8 +132,8 @@ public class NameEditorDropTargetListener extends DropTargetAdapter {
 
        
        private HomotypicalGroup getHomotypicalGroup() {
 
        
        private HomotypicalGroup getHomotypicalGroup() {
-               if(target instanceof HomotypicalSynonymGroup){
-                       return ((HomotypicalSynonymGroup) target).getGroup();
+               if(target instanceof AbstractHomotypicalGroupContainer){
+                       return ((AbstractHomotypicalGroupContainer) target).getGroup();
                }
                return null;
        }       
                }
                return null;
        }       
@@ -151,4 +149,12 @@ public class NameEditorDropTargetListener extends DropTargetAdapter {
                }
                return null;
        }
                }
                return null;
        }
+       
+       /**
+        * @return 
+        * 
+        */
+       private TaxonNameEditor getEditor() {
+               return target.getEditor();
+       }
 }
 }
index d83992dd267c3e41fb49725ebceb42ce56a5d33a..708dd3e2403e8803dd9265a7536b2ea2cfde85d6 100644 (file)
@@ -53,11 +53,11 @@ public class ChangeHomotypicGroupOperation extends AbstractPostOperation {
         * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
         * @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object.
         * @param newHomotypicalGroup a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
         * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
         * @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object.
         * @param newHomotypicalGroup a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
-        * @param editor a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
+        * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
         */
        public ChangeHomotypicGroupOperation(String label, IUndoContext undoContext, 
         */
        public ChangeHomotypicGroupOperation(String label, IUndoContext undoContext, 
-                       Taxon taxon, Synonym synonym, HomotypicalGroup newHomotypicalGroup, IPostOperationEnabled editor) {
-               super(label, undoContext, taxon, editor);
+                       Taxon taxon, Synonym synonym, HomotypicalGroup newHomotypicalGroup, IPostOperationEnabled postOperationEnabled) {
+               super(label, undoContext, taxon, postOperationEnabled);
                
                this.synonym = synonym;
                if(synonym == null){
                
                this.synonym = synonym;
                if(synonym == null){
index 238cbc920b7b1abee3d8c5c488b3f8f375032739..09a393b986d8129d84db0748179db980601ee21e 100644 (file)
@@ -19,7 +19,7 @@ import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
 import eu.etaxonomy.taxeditor.forms.AbstractFormSection;
 import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.forms.AbstractFormSection;
 import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
index 3e0d10d8be2674cf18c35fe6a880366606b8bcd6..d247b10a161a80f92f8988556e5963a48dd1d6e9 100644 (file)
@@ -22,7 +22,7 @@ import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.VersionableEntity;
 import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.VersionableEntity;
 import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
-import eu.etaxonomy.taxeditor.editor.name.AbstractGroupedContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
 import eu.etaxonomy.taxeditor.editor.view.AbstractCdmDataViewer;
 import eu.etaxonomy.taxeditor.editor.view.detail.DetailsViewer;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
 import eu.etaxonomy.taxeditor.editor.view.AbstractCdmDataViewer;
 import eu.etaxonomy.taxeditor.editor.view.detail.DetailsViewer;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
index 87c40bc4413a046dded19adb7f751dffd9ef29e1..27794d7694eb23f4b11bb1962e0f3b2c830268d7 100644 (file)
@@ -105,7 +105,7 @@ public class NameDetailElement extends AbstractCdmDetailElement<NonViralName> im
                        getEntity().removeParsingProblem(ParserProblem.CheckRank);
                        
                        TaxonNameEditor nameEditor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
                        getEntity().removeParsingProblem(ParserProblem.CheckRank);
                        
                        TaxonNameEditor nameEditor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
-                       nameEditor.getSelectedObject().getNameViewer().clearErrors();
+                       nameEditor.getSelectedContainer().getNameViewer().clearErrors();
                }
        }
 
                }
        }
 
similarity index 98%
rename from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/IterableSynonymyList.java
rename to taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/IterableSynonymyList.java
index 82aeba9ae04126f3664faad13f9731cd579c5ca0..205df8616521766b014c25d5fd146c02cb0475a5 100644 (file)
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
-package eu.etaxonomy.taxeditor.editor.name;
+package eu.etaxonomy.taxeditor.navigation.navigator;
 
 import java.util.ArrayList;
 import java.util.Iterator;
 
 import java.util.ArrayList;
 import java.util.Iterator;
index ca59475a02193f16880856368f745165908e27ec..b393f50cf650b2b88009d49682b84b2dea6069ee 100644 (file)
@@ -21,7 +21,6 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.taxeditor.editor.name.IterableSynonymyList;
 
 /**
  * <p>SynonymContentProvider class.</p>
 
 /**
  * <p>SynonymContentProvider class.</p>
index a804b94a4d0df014acd4b30326826a1233f916fe..db44d58592acce06d76a582bb05792416a99ce2d 100644 (file)
@@ -10,7 +10,6 @@
 
 package eu.etaxonomy.taxeditor.dialogs;
 
 
 package eu.etaxonomy.taxeditor.dialogs;
 
-import org.apache.log4j.Logger;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CLabel;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CLabel;
@@ -19,12 +18,8 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.authentication.LockedException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
  * TODO wrap in a LoginModule
 
 /**
  * TODO wrap in a LoginModule
@@ -35,10 +30,7 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  * @version 1.0
  */
 public class LoginDialog extends Dialog {
  * @version 1.0
  */
 public class LoginDialog extends Dialog {
-
-
-       private static final Logger logger = Logger.getLogger(LoginDialog.class);
-
+       
        private static Text text_password;
        private static Text text_username;
 
        private static Text text_password;
        private static Text text_username;
 
@@ -111,21 +103,8 @@ public class LoginDialog extends Dialog {
                String username = text_username.getText().trim();
                String password = text_password.getText().trim();
                
                String username = text_username.getText().trim();
                String password = text_password.getText().trim();
                
-               UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password); 
-               
-               try{
-                       CdmStore.getLoginManager().authenticate(token);                 
-               }catch(BadCredentialsException e){
-                       logger.error("Bad credentials", e);
-                       StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Bad Credentials.");
-               }catch(LockedException e){
-                       logger.error("Account is locked", e);
-                       StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Account is locked.");
-               }catch(IllegalArgumentException e){
-                       logger.error("Null argument for either user or password", e);
-                       StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Username and/or Password empty.");
-               }
-               
+               CdmStore.getLoginManager().authenticate(username, password);                    
+                               
                super.okPressed();
        }       
        
                super.okPressed();
        }       
        
index 6e97acb17efdc3271c2809d3683a69285c96ebbc..b57c67e3bc28e38d25bfc0f960a75df2d576beae 100644 (file)
@@ -3,7 +3,6 @@
  */
 package eu.etaxonomy.taxeditor.parser;
 
  */
 package eu.etaxonomy.taxeditor.parser;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 
 import java.util.ArrayList;
 import java.util.List;
 
@@ -51,11 +50,6 @@ public class ParseHandler{
         */
        private NonViralName name;
 
         */
        private NonViralName name;
 
-       /**
-        * The widget, the name got entered in
-        */
-       private Control textWidget;
-
        private boolean doResolveInReferences;
        
        /**
        private boolean doResolveInReferences;
        
        /**
@@ -64,14 +58,7 @@ public class ParseHandler{
         * @param textWidget
         * @param name
         */
         * @param textWidget
         * @param name
         */
-       private ParseHandler(Control textWidget, TaxonNameBase name){
-               if(textWidget != null){
-                       this.textWidget = textWidget;
-                       checkControlHasText();
-               }else{
-                       throw new IllegalArgumentException("text widget must not be null");
-               }
-               
+       private ParseHandler(TaxonNameBase name){
                if(name == null){
                        this.name = nonViralNameParser.getNonViralNameInstance("", PreferencesUtil.getPreferredNomenclaturalCode());
                }else{
                if(name == null){
                        this.name = nonViralNameParser.getNonViralNameInstance("", PreferencesUtil.getPreferredNomenclaturalCode());
                }else{
@@ -86,8 +73,8 @@ public class ParseHandler{
         * @param name                  An initial NonViralName or null when creating a new name
         * @return                              An instance of this class
         */
         * @param name                  An initial NonViralName or null when creating a new name
         * @return                              An instance of this class
         */
-       public static ParseHandler NewInstance(Control textWidget, TaxonNameBase name){
-               return new ParseHandler(textWidget, name);
+       public static ParseHandler NewInstance(TaxonNameBase name){
+               return new ParseHandler(name);
                
        }
        
                
        }
        
@@ -123,20 +110,6 @@ public class ParseHandler{
                return nonViralNameParser.getNonViralNameInstance("", PreferencesUtil.getPreferredNomenclaturalCode());
        }
        
                return nonViralNameParser.getNonViralNameInstance("", PreferencesUtil.getPreferredNomenclaturalCode());
        }
        
-       /**
-        * Check if the given control has a getText() method
-        */
-       private void checkControlHasText(){
-               Class clazz = textWidget.getClass();
-               
-               try {
-                       clazz.getDeclaredMethod("getText", null);
-               } catch (SecurityException e) {
-               } catch (NoSuchMethodException e) {     
-                       throw new IllegalArgumentException("Given composite does not have a getText method");
-               }
-       }
-       
        /**
         * Parses the string that was entered into the text widget and returns a
         * NonViralName object that resulted from the parsing process.
        /**
         * Parses the string that was entered into the text widget and returns a
         * NonViralName object that resulted from the parsing process.
@@ -359,23 +332,4 @@ public class ParseHandler{
                }
                return null;
        }
                }
                return null;
        }
-
-       /**
-        * <p>Getter for the field <code>textWidget</code>.</p>
-        *
-        * @return The Control this ParseHandler is attached to.
-        */
-       public Control getTextWidget() {
-               return textWidget;
-       }
-
-       /**
-        * <p>Setter for the field <code>textWidget</code>.</p>
-        *
-        * @param textWidget The textWidget to set
-        */
-       public void setTextWidget(Control textWidget) {
-               this.textWidget = textWidget;
-               checkControlHasText();
-       }
 }
 }
index 026fff8c4ecf5a73903ddf40dca7ef4238481203..019460ce490dd3e8a3c7a5e6a7bc78b3722a0795 100644 (file)
@@ -12,6 +12,8 @@ package eu.etaxonomy.taxeditor.store;
 
 import java.util.Observable;
 
 
 import java.util.Observable;
 
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.LockedException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -32,12 +34,27 @@ public class LoginManager extends Observable{
         *
         * @param token a {@link org.springframework.security.authentication.UsernamePasswordAuthenticationToken} object.
         */
         *
         * @param token a {@link org.springframework.security.authentication.UsernamePasswordAuthenticationToken} object.
         */
-       public void authenticate(UsernamePasswordAuthenticationToken token){
-               Authentication authentication = CdmStore.getAuthenticationManager().authenticate(token);
-               SecurityContextHolder.getContext().setAuthentication(authentication);
-               
-               this.setChanged();
-               this.notifyObservers();
+       public void authenticate(String username, String password){             
+               try{
+                       UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password); 
+                       
+                       SecurityContextHolder.clearContext();
+                       Authentication authentication = CdmStore.getAuthenticationManager().authenticate(token);                
+                       SecurityContextHolder.getContext().setAuthentication(authentication);
+               }
+               catch(BadCredentialsException e){
+                       StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Bad Credentials.");
+               }
+               catch(LockedException e){
+                       StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Account is locked.");
+               }
+               catch(IllegalArgumentException e){
+                       StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Username and/or Password empty.");
+               }
+               finally{
+                       this.setChanged();
+                       this.notifyObservers();
+               }
        }
        
        /**
        }
        
        /**
@@ -55,4 +72,9 @@ public class LoginManager extends Observable{
                }
                return null;
        }
                }
                return null;
        }
+       
+       public void logoutAll(){
+               SecurityContextHolder.clearContext();
+               notifyObservers();              
+       }
 }
 }
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreStateManager.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreStateManager.java
deleted file mode 100644 (file)
index cee595c..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-// $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.
-*/
-
-package eu.etaxonomy.taxeditor.store;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.ui.IMemento;
-
-import eu.etaxonomy.taxeditor.dialogs.LoginDialog;
-import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
-
-/**
- * <p>StoreStateManager class.</p>
- *
- * @author n.hoffmann
- * @created Sep 30, 2010
- * @version 1.0
- */
-public class StoreStateManager extends ContextListenerAdapter {
-
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
-        */
-       /** {@inheritDoc} */
-       @Override
-       public void contextStart(IMemento memento, IProgressMonitor monitor) {
-               authenticate();
-       }
-
-       private int authenticate(){
-               LoginDialog loginDialog = new LoginDialog(StoreUtil.getShell());
-               return loginDialog.open();
-       }
-}
index ee4514f7ba2a83072c1f22d018048f54aadb13f0..07bf47e0fc54e3e53bdf4910a451d457498904ec 100644 (file)
@@ -6,8 +6,6 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import org.osgi.framework.BundleContext;
 
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreStateManager;
 
 /**
  * The activator class controls the plug-in life cycle
 
 /**
  * The activator class controls the plug-in life cycle