duplicate arbitration now kicks in when name composites focus is lost
authorn.hoffmann <n.hoffmann@localhost>
Fri, 4 Sep 2009 09:46:52 +0000 (09:46 +0000)
committern.hoffmann <n.hoffmann@localhost>
Fri, 4 Sep 2009 09:46:52 +0000 (09:46 +0000)
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/DuplicateArbitrator.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java

index 830b3931a4b511c18ed83e9bdbbe36e961c09c69..466c59b462a638e1de60d06daf4e49c01883a519 100644 (file)
@@ -89,21 +89,24 @@ public class DuplicateArbitrator {
                for(NameComposite composite : nameEditor.getDirtyNames()){
                        logger.warn("Found " + composite + " with possible duplicates");
                                                
-                       NonViralName nonViralName = (NonViralName) composite.getParsedName();
-                       
-
-                       duplicateNames = findMatchingLatinNames(nonViralName);
-                       duplicateCombinationAuthorTeams = findMatchingAuthors((TeamOrPersonBase) nonViralName.getCombinationAuthorTeam());
-                       duplicateExCombinationAuthorTeams = findMatchingAuthors((TeamOrPersonBase) nonViralName.getExCombinationAuthorTeam());
-                       duplicateBasionymAuthorTeams = findMatchingAuthors((TeamOrPersonBase) nonViralName.getBasionymAuthorTeam());
-                       duplicateExBasionymAuthorTeams = findMatchingAuthors((TeamOrPersonBase) nonViralName.getExBasionymAuthorTeam());
-                       duplicateReferences = findMatchingNomenclaturalReference(nonViralName.getNomenclaturalReference());
-                       
-                       saveNameElements(composite);
-                       
-                       emptyDuplicateSets();
+                       arbitrate(composite);
                }
        }
+       
+       public void arbitrate(NameComposite composite){
+               NonViralName nonViralName = (NonViralName) composite.getParsedName();
+               
+               duplicateNames = findMatchingLatinNames(nonViralName);
+               duplicateCombinationAuthorTeams = findMatchingAuthors((TeamOrPersonBase) nonViralName.getCombinationAuthorTeam());
+               duplicateExCombinationAuthorTeams = findMatchingAuthors((TeamOrPersonBase) nonViralName.getExCombinationAuthorTeam());
+               duplicateBasionymAuthorTeams = findMatchingAuthors((TeamOrPersonBase) nonViralName.getBasionymAuthorTeam());
+               duplicateExBasionymAuthorTeams = findMatchingAuthors((TeamOrPersonBase) nonViralName.getExBasionymAuthorTeam());
+               duplicateReferences = findMatchingNomenclaturalReference(nonViralName.getNomenclaturalReference());
+               
+               saveNameElements(composite);
+               
+               emptyDuplicateSets();
+       }
 
        /**
         * 
@@ -155,13 +158,13 @@ public class DuplicateArbitrator {
                }else if (duplicateNames.size() == 1){
                        composite.setName(duplicateNames.iterator().next());
                }else{
-               
-                       // do stuff
+                       // FIXME TODO resolve multiple duplications. Use first match for a start
+                       composite.setName(duplicateNames.iterator().next());
                }
                
                // debug
                for(TaxonNameBase name : duplicateNames){
-                       logger.warn(name.getFullTitleCache());
+                       logger.info(name.getFullTitleCache());
                }
 
        }
@@ -177,7 +180,8 @@ public class DuplicateArbitrator {
                        // exactly one match. We assume that the user wants this reference
                        composite.getName().setNomenclaturalReference(duplicateReferences.iterator().next());
                }else{
-                       // do stuff
+                       // FIXME TODO resolve multiple duplications. Use first match for a start
+                       composite.getName().setNomenclaturalReference(duplicateReferences.iterator().next());
                }
                
                // debug
@@ -201,7 +205,8 @@ public class DuplicateArbitrator {
                }else if(duplicateCombinationAuthorTeams.size() == 1){
                        name.setCombinationAuthorTeam(duplicateCombinationAuthorTeams.iterator().next());
                }else{
-                       // do stuff
+                       // FIXME TODO resolve multiple duplications. Use first match for a start
+                       name.setCombinationAuthorTeam(duplicateCombinationAuthorTeams.iterator().next());
                }
                
                if(duplicateExCombinationAuthorTeams.size() == 0){
@@ -209,7 +214,8 @@ public class DuplicateArbitrator {
                }else if(duplicateExCombinationAuthorTeams.size() == 1){
                        name.setExCombinationAuthorTeam(duplicateExCombinationAuthorTeams.iterator().next());
                }else{
-                       // do stuff
+                       // FIXME TODO resolve multiple duplications. Use first match for a start
+                       name.setExCombinationAuthorTeam(duplicateExCombinationAuthorTeams.iterator().next());
                }
                
                if(duplicateBasionymAuthorTeams.size() == 0){
@@ -217,7 +223,8 @@ public class DuplicateArbitrator {
                }else if(duplicateBasionymAuthorTeams.size() == 1){
                        name.setBasionymAuthorTeam(duplicateBasionymAuthorTeams.iterator().next());
                }else{
-                       // do stuff
+                       // FIXME TODO resolve multiple duplications. Use first match for a start
+                       name.setBasionymAuthorTeam(duplicateBasionymAuthorTeams.iterator().next());
                }
                
                if(duplicateExBasionymAuthorTeams.size() == 0){
@@ -225,7 +232,8 @@ public class DuplicateArbitrator {
                }else if(duplicateExBasionymAuthorTeams.size() == 1){
                        name.setExBasionymAuthorTeam(duplicateExBasionymAuthorTeams.iterator().next());
                }else{
-                       // do stuff
+                       // FIXME TODO resolve multiple duplications. Use first match for a start
+                       name.setExBasionymAuthorTeam(duplicateExBasionymAuthorTeams.iterator().next());
                }
                
                
index 09543016bba83d022a95ddade33d6d18695ffd67..9b75dc19b4613e86600f544ee08815041cfa4201 100644 (file)
@@ -60,6 +60,7 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna
 \r
        private TaxonEditorInput input;\r
 \r
+       private DuplicateArbitrator duplicateArbitrator;\r
        \r
        public MultiPageTaxonEditor() {\r
                super();                \r
@@ -123,13 +124,7 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna
                        conversation.bind();\r
                }\r
                \r
-               //handle existing names and authors\r
-               DuplicateArbitrator duplicateArbitrator = (DuplicateArbitrator) getAdapter(DuplicateArbitrator.class);\r
-               \r
-               if(duplicateArbitrator != null){\r
-                       // disable for now because of transaction problems.\r
-                       duplicateArbitrator.arbitrate();\r
-               }\r
+               handleDuplicates();\r
 \r
                // commit the conversation and start a new transaction immediately\r
                conversation.commit(true);\r
@@ -137,6 +132,15 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna
                this.setDirty(false);\r
        }\r
 \r
+       /**\r
+        * Resolve existing names, authors and references \r
+        */\r
+       public void handleDuplicates() {\r
+               getDuplicateArbitrator().arbitrate();\r
+       }\r
+\r
+\r
+\r
        private void setDirty(boolean dirty) {\r
                this.dirty = dirty;\r
                firePropertyChange(PROP_DIRTY);\r
@@ -342,4 +346,15 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna
                return editors;\r
        }\r
 \r
+\r
+\r
+       /**\r
+        * @return the duplicateArbitrator\r
+        */\r
+       public DuplicateArbitrator getDuplicateArbitrator() {\r
+               if(duplicateArbitrator == null){\r
+                       duplicateArbitrator = (DuplicateArbitrator) getAdapter(DuplicateArbitrator.class);\r
+               }\r
+               return duplicateArbitrator;\r
+       }\r
 }
\ No newline at end of file