Merge branch 'develop' into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / dialog / selection / SelectionDialogFactory.java
index d33745d887e2b769d06aac3e4fa961a785008fac..a90ce1c9bca1c861a41b1d44c3dcd2411259cd3b 100644 (file)
@@ -12,10 +12,12 @@ package eu.etaxonomy.taxeditor.ui.dialog.selection;
 import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.agent.Institution;
 import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
 import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
@@ -24,6 +26,7 @@ import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.description.PolytomousKey;
 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
+import eu.etaxonomy.cdm.model.location.Country;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.molecular.Amplification;
 import eu.etaxonomy.cdm.model.molecular.Primer;
@@ -31,6 +34,7 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
@@ -38,6 +42,8 @@ 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.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.IEntityElement;
 
 /**
  * @author n.hoffmann
@@ -46,10 +52,14 @@ import eu.etaxonomy.taxeditor.model.MessagingUtils;
  */
 public class SelectionDialogFactory {
 
-       public static <T extends ICdmBase> T getSelectionFromDialog(Class<T> clazz, Shell shell, ConversationHolder conversation, T curentSelection){
+    public static <T extends ICdmBase> T getSelectionFromDialog(Class<T> clazz, Shell shell, ConversationHolder conversation, T currentSelection){
+        return getSelectionFromDialog(clazz, shell, conversation, currentSelection, null);
+    }
+
+       public static <T extends ICdmBase> T getSelectionFromDialog(Class<T> clazz, Shell shell, ConversationHolder conversation, T currentSelection, ICdmFormElement parentElement){
 
                if(clazz.equals(Taxon.class)){
-                       return (T) TaxonBaseSelectionDialog.selectTaxon(shell, conversation, (Taxon) curentSelection);
+                       return (T) TaxonBaseSelectionDialog.selectTaxon(shell, conversation, (Taxon) currentSelection);
                }
                if(clazz.equals(Synonym.class)){
                        return (T) TaxonBaseSelectionDialog.selectSynonym(shell, conversation);
@@ -58,31 +68,35 @@ public class SelectionDialogFactory {
                        return (T) TaxonBaseSelectionDialog.selectTaxonBase(shell, conversation);
                }
                if(clazz.equals(Classification.class)){
-                       return (T) ClassificationSelectionDialog.select(shell, conversation, (Classification) curentSelection);
+                       return (T) ClassificationSelectionDialog.select(shell, conversation, (Classification) currentSelection);
                }
                if(clazz.equals(TaxonNode.class)){
-                       return (T) TaxonNodeSelectionDialog.select(shell, conversation, null, null, (TaxonNode) curentSelection, null);
+                       return (T) TaxonNodeSelectionDialog.select(shell, conversation, null, null, (TaxonNode) currentSelection, ((TaxonNode) currentSelection).getClassification());
                }
                if(clazz.equals(Reference.class)){
-                       return (T) ReferenceSelectionDialog.select(shell, conversation, (Reference) curentSelection);
+                       return (T) ReferenceSelectionDialog.select(shell, conversation, (Reference) currentSelection);
                }
                if(clazz.equals(TaxonNameBase.class)){
-                       return (T) NameSelectionDialog.select(shell, conversation, (TaxonNameBase) curentSelection);
+                       return (T) NameSelectionDialog.select(shell, conversation, (TaxonNameBase) currentSelection);
                }
                if(clazz.equals(Team.class)){
-                       return (T) TeamSelectionDialog.select(shell, conversation, (Team) curentSelection);
+                       return (T) TeamSelectionDialog.select(shell, conversation, (Team) currentSelection);
+               }
+               if(clazz.equals(TeamOrPersonBase.class)){
+                   //TODO: add TeamOrPersonBaseSelectionDialog (see ticket #4545)
+                   return (T) AgentSelectionDialog.select(shell, conversation, (AgentBase) currentSelection);
                }
                if(clazz.equals(AgentBase.class)){
-                       return (T) AgentSelectionDialog.select(shell, conversation, (AgentBase) curentSelection);
+                       return (T) AgentSelectionDialog.select(shell, conversation, (AgentBase) currentSelection);
                }
                if(clazz.equals(Feature.class)){
-                       return (T) FeatureSelectionDialog.select(shell, conversation, (Feature) curentSelection);
+                       return (T) FeatureSelectionDialog.select(shell, conversation, (Feature) currentSelection);
                }
                if(clazz.equals(FeatureTree.class)){
-                       return (T) FeatureTreeSelectionDialog.select(shell, conversation, (FeatureTree) curentSelection);
+                       return (T) FeatureTreeSelectionDialog.select(shell, conversation, (FeatureTree) currentSelection);
                }
                if(clazz.equals(PolytomousKey.class)){
-                       return (T) PolytomousKeySelectionDialog.select(shell, conversation, (PolytomousKey) curentSelection);
+                       return (T) PolytomousKeySelectionDialog.select(shell, conversation, (PolytomousKey) currentSelection);
                }
                if(clazz.equals(PolytomousKeyNode.class)){
                        MessagingUtils.warningDialog("Not implemented yet", SelectionDialogFactory.class,
@@ -90,37 +104,45 @@ public class SelectionDialogFactory {
                        return null;
                }
                if(clazz.equals(DerivedUnit.class)){
-                       return (T) DerivedUnitSelectionDialog.select(shell, conversation, (DerivedUnit) curentSelection);
+                   return (T) DerivedUnitSelectionDialog.select(shell, conversation, (DerivedUnit) currentSelection);
                }
                if(clazz.equals(FieldUnit.class)){
-                       return (T) FieldUnitSelectionDialog.select(shell, conversation, (FieldUnit) curentSelection);
+                   return (T) FieldUnitSelectionDialog.select(shell, conversation, (FieldUnit) currentSelection);
+               }
+               if(clazz.equals(SpecimenOrObservationBase.class)){
+                   return (T) SpecimenOrObservationBaseSelectionDialog.select(shell, conversation, (SpecimenOrObservationBase) currentSelection);
                }
                if(clazz.equals(NamedArea.class)){
-                       return (T) NamedAreaSelectionDialog.select(shell, conversation, (NamedArea) curentSelection);
+                   if(parentElement instanceof IEntityElement && ((IEntityElement) parentElement).getEntity() instanceof DerivedUnitFacade){
+                       return (T) NamedAreaSelectionDialog.select(shell, conversation, (NamedArea) currentSelection, Country.uuidCountryVocabulary);
+                   }
+                   else{
+                       return (T) NamedAreaSelectionDialog.select(shell, conversation, (NamedArea) currentSelection);
+                   }
                }
                if(clazz.equals(Collection.class)){
-                       return (T) CollectionSelectionDialog.select(shell, conversation, (Collection) curentSelection);
+                       return (T) CollectionSelectionDialog.select(shell, conversation, (Collection) currentSelection);
                }
                if(clazz.equals(User.class)){
-                       return (T) UserSelectionDialog.select(shell, conversation, (User) curentSelection);
+                       return (T) UserSelectionDialog.select(shell, conversation, (User) currentSelection);
                }
                if(clazz.equals(GrantedAuthorityImpl.class)){
-                       return (T) GrantedAuthoritySelectionDialog.select(shell, conversation, (GrantedAuthorityImpl) curentSelection);
+                       return (T) GrantedAuthoritySelectionDialog.select(shell, conversation, (GrantedAuthorityImpl) currentSelection);
                }
                if (clazz.equals(Person.class)){
-                       return (T) PersonSelectionDialog.select(shell, conversation, (Person) curentSelection);
+                       return (T) PersonSelectionDialog.select(shell, conversation, (Person) currentSelection);
                }
                if(clazz.equals(Group.class)){
-                       return (T) GroupSelectionDialog.select(shell, conversation, (Group) curentSelection);
+                       return (T) GroupSelectionDialog.select(shell, conversation, (Group) currentSelection);
                }
                if(clazz.equals(Institution.class)){
-                       return (T) InstitutionSelectionDialog.select(shell, conversation, (Institution) curentSelection);
+                       return (T) InstitutionSelectionDialog.select(shell, conversation, (Institution) currentSelection);
                }
                if(clazz.equals(Primer.class)){
-                   return (T) PrimerSelectionDialog.select(shell, conversation, (Primer) curentSelection);
+                   return (T) PrimerSelectionDialog.select(shell, conversation, (Primer) currentSelection);
                }
                if(clazz.equals(Amplification.class)){
-                   return (T) AmplificationSelectionDialog.select(shell, conversation, (Amplification) curentSelection);
+                   return (T) AmplificationSelectionDialog.select(shell, conversation, (Amplification) currentSelection);
                }
 
                return null;