From 19bae144c37acfae884f6bbd601235ce115efc6b Mon Sep 17 00:00:00 2001 From: "n.hoffmann" Date: Fri, 4 Sep 2009 09:46:52 +0000 Subject: [PATCH] duplicate arbitration now kicks in when name composites focus is lost --- .../taxeditor/editor/DuplicateArbitrator.java | 50 +++++++++++-------- .../editor/MultiPageTaxonEditor.java | 29 ++++++++--- 2 files changed, 51 insertions(+), 28 deletions(-) diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/DuplicateArbitrator.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/DuplicateArbitrator.java index 830b3931a..466c59b46 100644 --- a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/DuplicateArbitrator.java +++ b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/DuplicateArbitrator.java @@ -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()); } diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java index 09543016b..9b75dc19b 100644 --- a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java +++ b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java @@ -60,6 +60,7 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna private TaxonEditorInput input; + private DuplicateArbitrator duplicateArbitrator; public MultiPageTaxonEditor() { super(); @@ -123,13 +124,7 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna conversation.bind(); } - //handle existing names and authors - DuplicateArbitrator duplicateArbitrator = (DuplicateArbitrator) getAdapter(DuplicateArbitrator.class); - - if(duplicateArbitrator != null){ - // disable for now because of transaction problems. - duplicateArbitrator.arbitrate(); - } + handleDuplicates(); // commit the conversation and start a new transaction immediately conversation.commit(true); @@ -137,6 +132,15 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna this.setDirty(false); } + /** + * Resolve existing names, authors and references + */ + public void handleDuplicates() { + getDuplicateArbitrator().arbitrate(); + } + + + private void setDirty(boolean dirty) { this.dirty = dirty; firePropertyChange(PROP_DIRTY); @@ -342,4 +346,15 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna return editors; } + + + /** + * @return the duplicateArbitrator + */ + public DuplicateArbitrator getDuplicateArbitrator() { + if(duplicateArbitrator == null){ + duplicateArbitrator = (DuplicateArbitrator) getAdapter(DuplicateArbitrator.class); + } + return duplicateArbitrator; + } } \ No newline at end of file -- 2.34.1