3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.taxeditor
.ui
.selection
;
13 import org
.eclipse
.core
.runtime
.IStatus
;
14 import org
.eclipse
.jface
.wizard
.Wizard
;
15 import org
.eclipse
.jface
.wizard
.WizardDialog
;
16 import org
.eclipse
.swt
.events
.SelectionEvent
;
17 import org
.eclipse
.swt
.events
.SelectionListener
;
18 import org
.eclipse
.ui
.IEditorPart
;
20 import eu
.etaxonomy
.cdm
.api
.facade
.DerivedUnitFacade
;
21 import eu
.etaxonomy
.cdm
.api
.facade
.DerivedUnitFacadeNotSupportedException
;
22 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
23 import eu
.etaxonomy
.cdm
.model
.agent
.Institution
;
24 import eu
.etaxonomy
.cdm
.model
.agent
.Person
;
25 import eu
.etaxonomy
.cdm
.model
.agent
.Team
;
26 import eu
.etaxonomy
.cdm
.model
.common
.ICdmBase
;
27 import eu
.etaxonomy
.cdm
.model
.common
.User
;
28 import eu
.etaxonomy
.cdm
.model
.molecular
.Amplification
;
29 import eu
.etaxonomy
.cdm
.model
.molecular
.Primer
;
30 import eu
.etaxonomy
.cdm
.model
.name
.NonViralName
;
31 import eu
.etaxonomy
.cdm
.model
.occurrence
.Collection
;
32 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
33 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldUnit
;
34 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
35 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
36 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
37 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
38 import eu
.etaxonomy
.taxeditor
.model
.IDirtyMarkable
;
39 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
40 import eu
.etaxonomy
.taxeditor
.model
.TextHelper
;
41 import eu
.etaxonomy
.taxeditor
.newWizard
.AmplificationGeneralWizardPage
;
42 import eu
.etaxonomy
.taxeditor
.newWizard
.PrimerWizardPage
;
43 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
44 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
45 import eu
.etaxonomy
.taxeditor
.ui
.section
.agent
.InstitutionWizardPage
;
46 import eu
.etaxonomy
.taxeditor
.ui
.section
.agent
.PersonWizardPage
;
47 import eu
.etaxonomy
.taxeditor
.ui
.section
.agent
.TeamWizardPage
;
48 import eu
.etaxonomy
.taxeditor
.ui
.section
.name
.NonViralNameWizardPage
;
49 import eu
.etaxonomy
.taxeditor
.ui
.section
.occurrence
.CollectionWizardPage
;
50 import eu
.etaxonomy
.taxeditor
.ui
.section
.occurrence
.DerivedUnitBaseWizardPage
;
51 import eu
.etaxonomy
.taxeditor
.ui
.section
.occurrence
.DerivedUnitGeneralWizardPage
;
52 import eu
.etaxonomy
.taxeditor
.ui
.section
.occurrence
.FieldUnitWizardPage
;
53 import eu
.etaxonomy
.taxeditor
.ui
.section
.occurrence
.GatheringEventWizardPage
;
54 import eu
.etaxonomy
.taxeditor
.ui
.section
.reference
.ReferenceWizardPage
;
55 import eu
.etaxonomy
.taxeditor
.ui
.section
.user
.UserDetailWizardPage
;
59 * EditFromSelectionWizard class.
63 * @created Jun 1, 2010
66 public class EditFromSelectionWizard
extends Wizard
implements
69 private final EntitySelectionElement selectionElement
;
73 * Constructor for EditFromSelectionWizard.
76 * @param selectionElement
78 * {@link eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement}
81 public EditFromSelectionWizard(EntitySelectionElement selectionElement
) {
82 this.selectionElement
= selectionElement
;
83 this.setWindowTitle(String
.format("Edit %s", TextHelper
.deproxyClassName(selectionElement
.getEntity().getClass())));
88 public void addPages() {
90 CdmFormFactory formFactory
= selectionElement
.getFormFactory();
91 ICdmBase entity
= (ICdmBase
) HibernateProxyHelper
92 .deproxy(selectionElement
.getEntity());
94 if (entity
instanceof Reference
) {
95 addPage(new ReferenceWizardPage(formFactory
,
96 selectionElement
.getConversationHolder(),
98 } else if (entity
instanceof Team
) {
99 addPage(new TeamWizardPage(formFactory
,
100 selectionElement
.getConversationHolder(), (Team
) entity
));
101 } else if (entity
instanceof Person
) {
102 addPage(new PersonWizardPage(formFactory
,
103 selectionElement
.getConversationHolder(), (Person
) entity
));
104 } else if (entity
instanceof NonViralName
) {
105 addPage(new NonViralNameWizardPage(formFactory
,
106 selectionElement
.getConversationHolder(),
107 (NonViralName
) entity
));
108 } else if (entity
instanceof SpecimenOrObservationBase
) {
110 DerivedUnitFacade facade
;
112 if(((SpecimenOrObservationBase
) entity
).isInstanceOf(DerivedUnit
.class)){
113 facade
= DerivedUnitFacade
.NewInstance(
114 HibernateProxyHelper
.deproxy(entity
, DerivedUnit
.class),
115 PreferencesUtil
.getDerivedUnitConfigurator());
118 facade
= DerivedUnitFacade
.NewInstance(SpecimenOrObservationType
.FieldUnit
,
119 HibernateProxyHelper
.deproxy(entity
, FieldUnit
.class),
120 PreferencesUtil
.getDerivedUnitConfigurator());
123 } catch (DerivedUnitFacadeNotSupportedException e
) {
124 // we should never get here
125 throw new IllegalStateException();
128 addPage(new DerivedUnitGeneralWizardPage(formFactory
,
129 selectionElement
.getConversationHolder(), facade
));
130 addPage(new GatheringEventWizardPage(formFactory
,
131 selectionElement
.getConversationHolder(), facade
));
132 addPage(new FieldUnitWizardPage(formFactory
,
133 selectionElement
.getConversationHolder(), facade
));
134 if(facade
.innerDerivedUnit()!=null){
135 addPage(new DerivedUnitBaseWizardPage(formFactory
,
136 selectionElement
.getConversationHolder(), facade
));
138 } else if (entity
instanceof Collection
) {
139 addPage(new CollectionWizardPage(formFactory
,
140 selectionElement
.getConversationHolder(),
141 (Collection
) entity
));
142 } else if (entity
instanceof Institution
) {
143 addPage(new InstitutionWizardPage(formFactory
,
144 selectionElement
.getConversationHolder(),
145 (Institution
) entity
));
146 } else if (entity
instanceof User
) {
147 addPage(new UserDetailWizardPage(formFactory
,
148 selectionElement
.getConversationHolder(),
150 } else if (entity
instanceof Primer
) {
151 addPage(new PrimerWizardPage(formFactory
,
152 selectionElement
.getConversationHolder(),
154 } else if (entity
instanceof Amplification
) {
155 addPage(new AmplificationGeneralWizardPage(formFactory
,
156 selectionElement
.getConversationHolder(),
157 (Amplification
) entity
));
159 MessagingUtils
.warningDialog("Missing interface", this,
160 "No detail element for current selection");
168 * @see org.eclipse.jface.wizard.Wizard#performFinish()
172 public boolean performFinish() {
173 IEditorPart activeEditor
= AbstractUtility
.getActiveEditor();
175 * forceDirty() for cases when one or more EditFromSelectionWizards are
176 * opened cascadingly to trigger the save button. Otherwise the dirty
177 * state would not be set and the user will have no feedback that he/she
178 * actually still has ounsaved changes. This is necessary because
179 * editing in these wizards is done on clones of the CDM entities which
180 * are merged back with the original when pressing "Finish"
182 if (activeEditor
instanceof IDirtyMarkable
){
183 ((IDirtyMarkable
) activeEditor
).forceDirty();
190 public void widgetSelected(SelectionEvent e
) {
191 WizardDialog dialog
= new WizardDialog(selectionElement
.getShell(),
193 if (dialog
.open() == IStatus
.OK
) {
194 selectionElement
.updateFromWizard();
200 public void widgetDefaultSelected(SelectionEvent e
) {