- removed obsolete Primer page for AmplificationWizard
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / selection / EditFromSelectionWizard.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 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
11 package eu.etaxonomy.taxeditor.ui.selection;
12
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;
19
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.reference.Reference;
34 import eu.etaxonomy.taxeditor.model.AbstractUtility;
35 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
36 import eu.etaxonomy.taxeditor.model.MessagingUtils;
37 import eu.etaxonomy.taxeditor.model.TextHelper;
38 import eu.etaxonomy.taxeditor.newWizard.AmplificationCloningWizardPage;
39 import eu.etaxonomy.taxeditor.newWizard.AmplificationGelPhotoWizardPage;
40 import eu.etaxonomy.taxeditor.newWizard.AmplificationGeneralWizardPage;
41 import eu.etaxonomy.taxeditor.newWizard.PrimerWizardPage;
42 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
43 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
44 import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionWizardPage;
45 import eu.etaxonomy.taxeditor.ui.section.agent.PersonWizardPage;
46 import eu.etaxonomy.taxeditor.ui.section.agent.TeamWizardPage;
47 import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameWizardPage;
48 import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectionWizardPage;
49 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseWizardPage;
50 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralWizardPage;
51 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitWizardPage;
52 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventWizardPage;
53 import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceWizardPage;
54 import eu.etaxonomy.taxeditor.ui.section.user.UserDetailWizardPage;
55
56 /**
57 * <p>
58 * EditFromSelectionWizard class.
59 * </p>
60 *
61 * @author n.hoffmann
62 * @created Jun 1, 2010
63 * @version 1.0
64 */
65 public class EditFromSelectionWizard extends Wizard implements
66 SelectionListener {
67
68 private final EntitySelectionElement selectionElement;
69
70 /**
71 * <p>
72 * Constructor for EditFromSelectionWizard.
73 * </p>
74 *
75 * @param selectionElement
76 * a
77 * {@link eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement}
78 * object.
79 */
80 public EditFromSelectionWizard(EntitySelectionElement selectionElement) {
81 this.selectionElement = selectionElement;
82 this.setWindowTitle(String.format("Edit %s", TextHelper.deproxyClassName(selectionElement.getEntity().getClass())));
83 }
84
85 /** {@inheritDoc} */
86 @Override
87 public void addPages() {
88
89 CdmFormFactory formFactory = selectionElement.getFormFactory();
90 ICdmBase entity = (ICdmBase) HibernateProxyHelper
91 .deproxy(selectionElement.getEntity());
92
93 if (entity instanceof Reference) {
94 addPage(new ReferenceWizardPage(formFactory,
95 selectionElement.getConversationHolder(),
96 (Reference) entity));
97 } else if (entity instanceof Team) {
98 addPage(new TeamWizardPage(formFactory,
99 selectionElement.getConversationHolder(), (Team) entity));
100 } else if (entity instanceof Person) {
101 addPage(new PersonWizardPage(formFactory,
102 selectionElement.getConversationHolder(), (Person) entity));
103 } else if (entity instanceof NonViralName) {
104 addPage(new NonViralNameWizardPage(formFactory,
105 selectionElement.getConversationHolder(),
106 (NonViralName) entity));
107 } else if (entity instanceof DerivedUnit) {
108
109 DerivedUnitFacade facade;
110 try {
111 facade = DerivedUnitFacade.NewInstance(
112 (DerivedUnit) entity,
113 PreferencesUtil.getDerivedUnitConfigurator());
114 } catch (DerivedUnitFacadeNotSupportedException e) {
115 // we should never get here
116 throw new IllegalStateException();
117 }
118
119 addPage(new DerivedUnitGeneralWizardPage(formFactory,
120 selectionElement.getConversationHolder(), facade));
121 addPage(new GatheringEventWizardPage(formFactory,
122 selectionElement.getConversationHolder(), facade));
123 addPage(new FieldUnitWizardPage(formFactory,
124 selectionElement.getConversationHolder(), facade));
125 addPage(new DerivedUnitBaseWizardPage(formFactory,
126 selectionElement.getConversationHolder(), facade));
127 } else if (entity instanceof Collection) {
128 addPage(new CollectionWizardPage(formFactory,
129 selectionElement.getConversationHolder(),
130 (Collection) entity));
131 } else if (entity instanceof Institution) {
132 addPage(new InstitutionWizardPage(formFactory,
133 selectionElement.getConversationHolder(),
134 (Institution) entity));
135 } else if (entity instanceof User) {
136 addPage(new UserDetailWizardPage(formFactory,
137 selectionElement.getConversationHolder(),
138 (User) entity));
139 } else if (entity instanceof Primer) {
140 addPage(new PrimerWizardPage(formFactory,
141 selectionElement.getConversationHolder(),
142 (Primer) entity));
143 } else if (entity instanceof Amplification) {
144 addPage(new AmplificationGeneralWizardPage(formFactory,
145 selectionElement.getConversationHolder(),
146 (Amplification) entity));
147 addPage(new AmplificationCloningWizardPage(formFactory,
148 selectionElement.getConversationHolder(),
149 (Amplification) entity));
150 addPage(new AmplificationGelPhotoWizardPage(formFactory,
151 selectionElement.getConversationHolder(),
152 (Amplification) entity));
153 } else {
154 MessagingUtils.warningDialog("Missing interface", this,
155 "No detail element for current selection");
156 }
157
158 }
159
160 /*
161 * (non-Javadoc)
162 *
163 * @see org.eclipse.jface.wizard.Wizard#performFinish()
164 */
165 /** {@inheritDoc} */
166 @Override
167 public boolean performFinish() {
168 IEditorPart activeEditor = AbstractUtility.getActiveEditor();
169 /*
170 * forceDirty() for cases when one or more EditFromSelectionWizards are
171 * opened cascadingly to trigger the save button. Otherwise the dirty
172 * state would not be set and the user will have no feedback that he/she
173 * actually still has ounsaved changes. This is necessary because
174 * editing in these wizards is done on clones of the CDM entities which
175 * are merged back with the original when pressing "Finish"
176 */
177 if (activeEditor instanceof IDirtyMarkable){
178 ((IDirtyMarkable) activeEditor).forceDirty();
179 }
180 return true;
181 }
182
183 /** {@inheritDoc} */
184 @Override
185 public void widgetSelected(SelectionEvent e) {
186 WizardDialog dialog = new WizardDialog(selectionElement.getShell(),
187 this);
188 if (dialog.open() == IStatus.OK) {
189 selectionElement.updateFromWizard();
190 }
191 }
192
193 /** {@inheritDoc} */
194 @Override
195 public void widgetDefaultSelected(SelectionEvent e) {
196 }
197 }