f45adb155aa90406699a326606c3b69de21ca977
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / dialog / selection / SelectionDialogFactory.java
1 // $Id$
2 /**
3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.ui.dialog.selection;
11
12 import org.eclipse.swt.widgets.Shell;
13
14 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
15 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
16 import eu.etaxonomy.cdm.model.agent.AgentBase;
17 import eu.etaxonomy.cdm.model.agent.Institution;
18 import eu.etaxonomy.cdm.model.agent.Person;
19 import eu.etaxonomy.cdm.model.agent.Team;
20 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
21 import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
22 import eu.etaxonomy.cdm.model.common.Group;
23 import eu.etaxonomy.cdm.model.common.ICdmBase;
24 import eu.etaxonomy.cdm.model.common.User;
25 import eu.etaxonomy.cdm.model.description.Feature;
26 import eu.etaxonomy.cdm.model.description.FeatureTree;
27 import eu.etaxonomy.cdm.model.description.PolytomousKey;
28 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
29 import eu.etaxonomy.cdm.model.location.Country;
30 import eu.etaxonomy.cdm.model.location.NamedArea;
31 import eu.etaxonomy.cdm.model.molecular.Amplification;
32 import eu.etaxonomy.cdm.model.molecular.Primer;
33 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
34 import eu.etaxonomy.cdm.model.occurrence.Collection;
35 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
36 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
37 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
38 import eu.etaxonomy.cdm.model.reference.Reference;
39 import eu.etaxonomy.cdm.model.taxon.Classification;
40 import eu.etaxonomy.cdm.model.taxon.Synonym;
41 import eu.etaxonomy.cdm.model.taxon.Taxon;
42 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
43 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
44 import eu.etaxonomy.taxeditor.model.MessagingUtils;
45 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
46 import eu.etaxonomy.taxeditor.ui.element.IEntityElement;
47 import eu.etaxonomy.taxeditor.ui.section.agent.TeamMemberElement;
48 import eu.etaxonomy.taxeditor.ui.section.description.detail.DistributionDetailElement;
49 import eu.etaxonomy.taxeditor.ui.section.name.AuthorshipDetailElement;
50 import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailElement;
51
52 /**
53 * @author n.hoffmann
54 * @date Jan 25, 2012
55 *
56 */
57 public class SelectionDialogFactory {
58
59 public static <T extends ICdmBase> T getSelectionFromDialog(Class<T> clazz, Shell shell, ConversationHolder conversation, T currentSelection){
60 return getSelectionFromDialog(clazz, shell, conversation, currentSelection, null);
61 }
62
63 public static <T extends ICdmBase> T getSelectionFromDialog(Class<T> clazz, Shell shell, ConversationHolder conversation, T currentSelection, ICdmFormElement parentElement){
64
65 if(clazz.equals(Taxon.class)){
66 return (T) TaxonBaseSelectionDialog.selectTaxon(shell, conversation, (Taxon) currentSelection);
67 }
68 if(clazz.equals(Synonym.class)){
69 return (T) TaxonBaseSelectionDialog.selectSynonym(shell, conversation);
70 }
71 if(clazz.equals(TaxonBase.class)){
72 return (T) TaxonBaseSelectionDialog.selectTaxonBase(shell, conversation);
73 }
74 if(clazz.equals(Classification.class)){
75 return (T) ClassificationSelectionDialog.select(shell, conversation, (Classification) currentSelection);
76 }
77 if(clazz.equals(TaxonNode.class)){
78 return (T) TaxonNodeSelectionDialog.select(shell, conversation, null, null, (TaxonNode) currentSelection, ((TaxonNode) currentSelection).getClassification());
79 }
80 if(clazz.equals(Reference.class) && parentElement instanceof NomenclaturalReferenceDetailElement){
81 return (T) NomenclaturalReferenceSelectionDialog.select(shell, conversation, (Reference) currentSelection);
82 }
83 if(clazz.equals(Reference.class)){
84 return (T) ReferenceSelectionDialog.select(shell, conversation, (Reference) currentSelection);
85 }
86
87 if(clazz.equals(TaxonNameBase.class)){
88 return (T) NameSelectionDialog.select(shell, conversation, (TaxonNameBase) currentSelection);
89 }
90 if(clazz.equals(Team.class)){
91 return (T) TeamSelectionDialog.select(shell, conversation, (Team) currentSelection);
92 }
93 if(clazz.equals(TeamOrPersonBase.class) && parentElement instanceof AuthorshipDetailElement){
94 return (T) NomenclaturalAuthorSelectionDialog.select(shell, conversation, (AgentBase) currentSelection, false);
95 }else if(clazz.equals(TeamOrPersonBase.class)){
96 //TODO: add TeamOrPersonBaseSelectionDialog (see ticket #4545)
97 return (T) AgentSelectionDialog.select(shell, conversation, (AgentBase) currentSelection, false);
98 }
99 if(clazz.equals(Person.class) && parentElement instanceof TeamMemberElement){
100 return (T) NomenclaturalPersonAuthorSelectionDialog.select(shell, conversation, (AgentBase) currentSelection, true);
101 }
102 if(clazz.equals(AgentBase.class)){
103 return (T) AgentSelectionDialog.select(shell, conversation, (AgentBase) currentSelection, false);
104 }
105 if(clazz.equals(Feature.class)){
106 return (T) FeatureSelectionDialog.select(shell, conversation, (Feature) currentSelection);
107 }
108 if(clazz.equals(FeatureTree.class)){
109 return (T) FeatureTreeSelectionDialog.select(shell, conversation, (FeatureTree) currentSelection);
110 }
111 if(clazz.equals(PolytomousKey.class)){
112 return (T) PolytomousKeySelectionDialog.select(shell, conversation, (PolytomousKey) currentSelection);
113 }
114 if(clazz.equals(PolytomousKeyNode.class)){
115 MessagingUtils.warningDialog("Not implemented yet", SelectionDialogFactory.class,
116 "This functionality is not implemented yet.");
117 return null;
118 }
119 if(clazz.equals(DerivedUnit.class)){
120 return (T) DerivedUnitSelectionDialog.select(shell, conversation, (DerivedUnit) currentSelection);
121 }
122 if(clazz.equals(FieldUnit.class)){
123 return (T) FieldUnitSelectionDialog.select(shell, conversation, (FieldUnit) currentSelection);
124 }
125 if(clazz.equals(SpecimenOrObservationBase.class)){
126 return (T) SpecimenOrObservationBaseSelectionDialog.select(shell, conversation, (SpecimenOrObservationBase) currentSelection);
127 }
128 if(clazz.equals(NamedArea.class)){
129 if(parentElement instanceof DistributionDetailElement){
130 // return (T) NamedAreaSelectionForDistributionDialog.select(shell, conversation, (NamedArea) currentSelection, CdmStore.getTermManager().getPreferredVocabulary(TermType.NamedArea));
131 return (T) NamedAreaSelectionDialog.select(shell, conversation, (NamedArea) currentSelection, Country.uuidCountryVocabulary);
132 }else if(parentElement instanceof IEntityElement && ((IEntityElement) parentElement).getEntity() instanceof DerivedUnitFacade){
133 return (T) NamedAreaSelectionDialog.select(shell, conversation, (NamedArea) currentSelection, Country.uuidCountryVocabulary);
134 }
135 else{
136 return (T) NamedAreaSelectionDialog.select(shell, conversation, (NamedArea) currentSelection);
137 }
138 }
139 if(clazz.equals(Collection.class)){
140 return (T) CollectionSelectionDialog.select(shell, conversation, (Collection) currentSelection);
141 }
142 if(clazz.equals(User.class)){
143 return (T) UserSelectionDialog.select(shell, conversation, (User) currentSelection);
144 }
145 if(clazz.equals(GrantedAuthorityImpl.class)){
146 return (T) GrantedAuthoritySelectionDialog.select(shell, conversation, (GrantedAuthorityImpl) currentSelection);
147 }
148 if (clazz.equals(Person.class)){
149 return (T) PersonSelectionDialog.select(shell, conversation, (Person) currentSelection);
150 }
151 if(clazz.equals(Group.class)){
152 return (T) GroupSelectionDialog.select(shell, conversation, (Group) currentSelection);
153 }
154 if(clazz.equals(Institution.class)){
155 return (T) InstitutionSelectionDialog.select(shell, conversation, (Institution) currentSelection);
156 }
157 if(clazz.equals(Primer.class)){
158 return (T) PrimerSelectionDialog.select(shell, conversation, (Primer) currentSelection);
159 }
160 if(clazz.equals(Amplification.class)){
161 return (T) AmplificationSelectionDialog.select(shell, conversation, (Amplification) currentSelection);
162 }
163
164 return null;
165 }
166
167 }