Project

General

Profile

Download (11 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.ui.dialog.selection;
10

    
11
import java.util.List;
12
import java.util.UUID;
13

    
14
import org.eclipse.swt.widgets.Shell;
15

    
16
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
17
import eu.etaxonomy.cdm.model.agent.AgentBase;
18
import eu.etaxonomy.cdm.model.agent.Institution;
19
import eu.etaxonomy.cdm.model.agent.Person;
20
import eu.etaxonomy.cdm.model.agent.Team;
21
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
22
import eu.etaxonomy.cdm.model.common.ICdmBase;
23
import eu.etaxonomy.cdm.model.description.Feature;
24
import eu.etaxonomy.cdm.model.description.PolytomousKey;
25
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
26
import eu.etaxonomy.cdm.model.location.Country;
27
import eu.etaxonomy.cdm.model.location.NamedArea;
28
import eu.etaxonomy.cdm.model.media.Media;
29
import eu.etaxonomy.cdm.model.media.Rights;
30
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
31
import eu.etaxonomy.cdm.model.molecular.Amplification;
32
import eu.etaxonomy.cdm.model.molecular.Primer;
33
import eu.etaxonomy.cdm.model.name.TaxonName;
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.permission.GrantedAuthorityImpl;
39
import eu.etaxonomy.cdm.model.permission.Group;
40
import eu.etaxonomy.cdm.model.permission.User;
41
import eu.etaxonomy.cdm.model.reference.Reference;
42
import eu.etaxonomy.cdm.model.taxon.Classification;
43
import eu.etaxonomy.cdm.model.taxon.Synonym;
44
import eu.etaxonomy.cdm.model.taxon.Taxon;
45
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
46
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
47
import eu.etaxonomy.cdm.model.term.TermTree;
48
import eu.etaxonomy.taxeditor.model.MessagingUtils;
49
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
50
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
51
import eu.etaxonomy.taxeditor.ui.element.IEntityElement;
52
import eu.etaxonomy.taxeditor.ui.section.agent.TeamMemberElement;
53
import eu.etaxonomy.taxeditor.ui.section.description.CommonNameSourceElement;
54
import eu.etaxonomy.taxeditor.ui.section.description.detail.CommonNameDetailElement;
55
import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailElement;
56
import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailSection;
57
import eu.etaxonomy.taxeditor.ui.section.name.AuthorshipDetailElement;
58
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailElement;
59
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitFacadeGeneralDetailElement;
60
import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalSourceDetailElement;
61
import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailElement;
62
import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailElement;
63
import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailSection;
64
import eu.etaxonomy.taxeditor.ui.selection.CollectorSelectionElement;
65

    
66
/**
67
 * @author n.hoffmann
68
 * @date Jan 25, 2012
69
 */
70
public class SelectionDialogFactory {
71

    
72
    public static <T extends ICdmBase> T getSelectionFromDialog(Class<T> clazz, Shell shell,
73
            T currentSelection){
74
        return getSelectionFromDialog(clazz, shell, //conversation,
75
                currentSelection, null);
76
    }
77

    
78
	public static <T extends ICdmBase> T getSelectionFromDialog(Class<T> clazz, Shell shell,
79
	        T currentSelection, ICdmFormElement parentElement){
80

    
81
		if(clazz.equals(Taxon.class)){
82
			return (T) TaxonSelectionDialog.selectTaxon(shell, (Taxon) currentSelection);
83
		}
84
		if(clazz.equals(Synonym.class)){
85
			return (T) TaxonBaseSelectionDialog.selectSynonym(shell );
86
		}
87
		if(clazz.equals(TaxonBase.class)){
88
			return (T) TaxonBaseSelectionDialog.selectTaxonBase(shell);
89
		}
90
		if(clazz.equals(Classification.class)){
91
			return (T) ClassificationSelectionDialog.select(shell, (Classification) currentSelection);
92
		}
93
		if(clazz.equals(TaxonNode.class)){
94
			return (T) TaxonNodeSelectionDialog.select(shell,
95
			        null, null, (TaxonNode) currentSelection, ((TaxonNode) currentSelection).getClassification().getUuid());
96
		}
97
		if(clazz.equals(Reference.class) && parentElement != null && parentElement.getParentElement() instanceof NomenclaturalSourceDetailElement){
98
			return (T) NomenclaturalReferenceSelectionDialog.select(shell,
99
			        (Reference) currentSelection, ((NomenclaturalSourceDetailElement)parentElement.getParentElement()).getEntity().getCombinationAuthorship());
100
		}
101
		if(clazz.equals(Reference.class) && parentElement instanceof CommonNameSourceElement && PreferencesUtil.getFilterCommonNameReferences()){
102
            return (T) CommonNameReferenceSelectionDialog.select(shell,
103
                    (Reference) currentSelection);
104
        }
105
		if(clazz.equals(Reference.class)){
106
		    if (parentElement instanceof ReferenceDetailElement){
107
		        return (T) ReferenceSelectionDialog.select(shell,
108
		                ((ReferenceDetailElement) parentElement).getEntity(), true);
109
		    }
110
			return (T) ReferenceSelectionDialog.select(shell, (Reference) currentSelection);
111
		}
112

    
113
		if(clazz.equals(TaxonName.class)){
114
			return (T) NameSelectionDialog.select(shell, (TaxonName)currentSelection);
115
		}
116
		if(clazz.equals(Team.class)){
117
			return (T) TeamSelectionDialog.select(shell, (Team)currentSelection);
118
		}
119
		if(clazz.equals(TeamOrPersonBase.class) && (parentElement instanceof AuthorshipDetailElement 
120
				|| (parentElement instanceof ReferenceDetailElement && ((ReferenceDetailElement)parentElement).isNomenclaturalReference()))){
121
            return (T) NomenclaturalAuthorSelectionDialog.select(shell,
122
                    (TeamOrPersonBase) currentSelection, false);
123
        }else if(clazz.equals(AgentBase.class) && (parentElement instanceof FieldUnitFacadeGeneralDetailElement || parentElement instanceof DerivedUnitGeneralDetailElement)){
124
		    return (T) CollectorSelectionDialog.select(shell,
125
		            (TeamOrPersonBase) currentSelection, false);
126
		}else if (clazz.equals(AgentBase.class) && parentElement instanceof CollectorSelectionElement){
127
			return (T) CollectorSelectionDialog.select(shell,
128
		            (TeamOrPersonBase) ((CollectorSelectionElement)parentElement).getCollectorTeam(), true);
129
		}else if(clazz.equals(TeamOrPersonBase.class)){
130
            //TODO: add TeamOrPersonBaseSelectionDialog (see ticket #4545)
131
            return (T) TeamOrPersonBaseSelectionDialog.select(shell,
132
                    (TeamOrPersonBase) currentSelection, false);
133
        }
134
		if(clazz.equals(Person.class) && parentElement instanceof TeamMemberElement){
135
		    return (T) NomenclaturalPersonAuthorSelectionDialog.select(shell,
136
		            (TeamOrPersonBase) currentSelection, true);
137
        }
138
		if(clazz.equals(AgentBase.class)){
139
			return (T) AgentSelectionDialog.select(shell, (AgentBase)currentSelection, false);
140
		}
141
		if(clazz.equals(Feature.class)){
142
			return (T) FeatureSelectionDialog.select(shell, (Feature)currentSelection);
143
		}
144
		if(clazz.equals(TermTree.class)){
145
			return (T) FeatureTreeSelectionDialog.select(shell, (TermTree)currentSelection);
146
		}
147
		if(clazz.equals(PolytomousKey.class)){
148
			return (T) PolytomousKeySelectionDialog.select(shell, (PolytomousKey)currentSelection);
149
		}
150
		if(clazz.equals(PolytomousKeyNode.class)){
151
			MessagingUtils.warningDialog("Not implemented yet", SelectionDialogFactory.class,
152
					"This functionality is not implemented yet.");
153
			return null;
154
		}
155
		if(clazz.equals(DerivedUnit.class)){
156
		    return (T) DerivedUnitSelectionDialog.select(shell, (DerivedUnit) currentSelection);
157
		}
158
		if(clazz.equals(FieldUnit.class)){
159
		    return (T) FieldUnitSelectionDialog.select(shell, (FieldUnit) currentSelection);
160
		}
161
		if(clazz.equals(SpecimenOrObservationBase.class)){
162
		    return (T) SpecimenOrObservationBaseSelectionDialog.select(shell,
163
		            (SpecimenOrObservationBase) currentSelection);
164
		}
165
		if(clazz.equals(NamedArea.class)){
166
		    if(parentElement instanceof IEntityElement && ((IEntityElement) parentElement).getEntity() instanceof DerivedUnitFacade){
167
		        return (T) NamedAreaSelectionDialog.select(shell,
168
		                (NamedArea) currentSelection, DerivedUnit.class.getCanonicalName(), Country.uuidCountryVocabulary);
169
		    }
170
		    else if(parentElement instanceof CommonNameDetailElement ){
171
                return (T) CommonNameNamedAreaSelectionDialog.select(shell,
172
                        (NamedArea) currentSelection, parentElement.getClass().getCanonicalName());
173
            }
174
		    else{
175
	            List<UUID> uuidList = PreferencesUtil.createUUIDListFromStringPref(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey(), false);
176
	            UUID[] uuidArray = null;
177
	            if (uuidList != null){
178
	                uuidArray = new UUID[uuidList.size()];
179
	                uuidList.toArray(uuidArray);
180
	            }
181
	            return (T)NamedAreaSelectionDialog.select(shell, (NamedArea) currentSelection, null, uuidArray);
182
		    }
183
		}
184
		if(clazz.equals(Collection.class)){
185
			return (T) CollectionSelectionDialog.select(shell, (Collection) currentSelection);
186
		}
187
		if(clazz.equals(User.class) && parentElement instanceof MemberDetailElement){
188
		    MemberDetailSection section = (MemberDetailSection)((MemberDetailElement)parentElement).getParentElement();
189
			return (T) UserSelectionDialog.select(shell,(User) currentSelection, section.getEntity());
190
		}
191
		if(clazz.equals(GrantedAuthorityImpl.class)){
192
			return (T) GrantedAuthoritySelectionDialog.select(shell, (GrantedAuthorityImpl)currentSelection);
193
		}
194
		if (clazz.equals(Person.class)){
195
			return (T) PersonSelectionDialog.select(shell, (Person)currentSelection);
196
		}
197
		if(clazz.equals(Group.class) &&  parentElement instanceof GroupsByUserDetailElement){
198
		    GroupsByUserDetailSection section =(GroupsByUserDetailSection)((GroupsByUserDetailElement)parentElement).getParentElement();
199
			return (T) GroupSelectionDialog.select(shell, (Group)currentSelection, section.getEntity());
200
		}
201
		if(clazz.equals(Institution.class)){
202
			return (T) InstitutionSelectionDialog.select(shell, (Institution)currentSelection);
203
		}
204
		if(clazz.equals(Primer.class)){
205
		    return (T) PrimerSelectionDialog.select(shell, (Primer)currentSelection);
206
		}
207
		if(clazz.equals(Amplification.class)){
208
		    return (T) AmplificationSelectionDialog.select(shell, (Amplification)currentSelection);
209
		}
210
		if(clazz.equals(Media.class)){
211
		    return (T) MediaSelectionDialog.select(shell, (Media)currentSelection);
212
		}
213
		if(clazz.equals(Rights.class)){
214
            return (T) RightsSelectionDialog.select(shell, (Rights)currentSelection);
215
        }
216

    
217
		return null;
218
	}
219

    
220
	public static <T extends ICdmBase> T getSelectionFromExtDialog(Class<T> clazz, Shell shell,
221
	        ICdmFormElement parentElement){
222
	    return (T) ExtReferenceSelectionDialog.select(shell, null);
223
	}
224
}
(36-36/46)