Project

General

Profile

Download (7.71 KB) Statistics
| Branch: | Tag: | Revision:
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.AmplificationPrimerWizardPage;
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;
56

    
57
/**
58
 * <p>
59
 * EditFromSelectionWizard class.
60
 * </p>
61
 *
62
 * @author n.hoffmann
63
 * @created Jun 1, 2010
64
 * @version 1.0
65
 */
66
public class EditFromSelectionWizard extends Wizard implements
67
		SelectionListener {
68

    
69
	private final EntitySelectionElement selectionElement;
70

    
71
	/**
72
	 * <p>
73
	 * Constructor for EditFromSelectionWizard.
74
	 * </p>
75
	 *
76
	 * @param selectionElement
77
	 *            a
78
	 *            {@link eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement}
79
	 *            object.
80
	 */
81
	public EditFromSelectionWizard(EntitySelectionElement selectionElement) {
82
		this.selectionElement = selectionElement;
83
		this.setWindowTitle(String.format("Edit %s", TextHelper.deproxyClassName(selectionElement.getEntity().getClass())));
84
	}
85

    
86
	/** {@inheritDoc} */
87
	@Override
88
	public void addPages() {
89

    
90
		CdmFormFactory formFactory = selectionElement.getFormFactory();
91
		ICdmBase entity = (ICdmBase) HibernateProxyHelper
92
				.deproxy(selectionElement.getEntity());
93

    
94
		if (entity instanceof Reference) {
95
			addPage(new ReferenceWizardPage(formFactory,
96
					selectionElement.getConversationHolder(),
97
					(Reference) entity));
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 DerivedUnit) {
109

    
110
			DerivedUnitFacade facade;
111
			try {
112
				facade = DerivedUnitFacade.NewInstance(
113
						(DerivedUnit) entity,
114
						PreferencesUtil.getDerivedUnitConfigurator());
115
			} catch (DerivedUnitFacadeNotSupportedException e) {
116
				// we should never get here
117
				throw new IllegalStateException();
118
			}
119

    
120
			addPage(new DerivedUnitGeneralWizardPage(formFactory,
121
					selectionElement.getConversationHolder(), facade));
122
			addPage(new GatheringEventWizardPage(formFactory,
123
					selectionElement.getConversationHolder(), facade));
124
			addPage(new FieldUnitWizardPage(formFactory,
125
					selectionElement.getConversationHolder(), facade));
126
			addPage(new DerivedUnitBaseWizardPage(formFactory,
127
					selectionElement.getConversationHolder(), facade));
128
		} else if (entity instanceof Collection) {
129
			addPage(new CollectionWizardPage(formFactory,
130
					selectionElement.getConversationHolder(),
131
					(Collection) entity));
132
		} else if (entity instanceof Institution) {
133
			addPage(new InstitutionWizardPage(formFactory,
134
					selectionElement.getConversationHolder(),
135
					(Institution) entity));
136
		} else if (entity instanceof User) {
137
			addPage(new UserDetailWizardPage(formFactory,
138
					selectionElement.getConversationHolder(),
139
					(User) entity));
140
		} else if (entity instanceof Primer) {
141
            addPage(new PrimerWizardPage(formFactory,
142
                    selectionElement.getConversationHolder(),
143
                    (Primer) entity));
144
        } else if (entity instanceof Amplification) {
145
            addPage(new AmplificationGeneralWizardPage(formFactory,
146
                    selectionElement.getConversationHolder(),
147
                    (Amplification) entity));
148
            addPage(new AmplificationPrimerWizardPage(formFactory,
149
                    selectionElement.getConversationHolder(),
150
                    (Amplification) entity));
151
            addPage(new AmplificationCloningWizardPage(formFactory,
152
                    selectionElement.getConversationHolder(),
153
                    (Amplification) entity));
154
            addPage(new AmplificationGelPhotoWizardPage(formFactory,
155
                    selectionElement.getConversationHolder(),
156
                    (Amplification) entity));
157
        } else {
158
			MessagingUtils.warningDialog("Missing interface", this,
159
					"No detail element for current selection");
160
		}
161

    
162
	}
163

    
164
	/*
165
	 * (non-Javadoc)
166
	 *
167
	 * @see org.eclipse.jface.wizard.Wizard#performFinish()
168
	 */
169
	/** {@inheritDoc} */
170
	@Override
171
	public boolean performFinish() {
172
	    IEditorPart activeEditor = AbstractUtility.getActiveEditor();
173
        /*
174
         * forceDirty() for cases when one or more EditFromSelectionWizards are
175
         * opened cascadingly to trigger the save button. Otherwise the dirty
176
         * state would not be set and the user will have no feedback that he/she
177
         * actually still has ounsaved changes. This is necessary because
178
         * editing in these wizards is done on clones of the CDM entities which
179
         * are merged back with the original when pressing "Finish"
180
         */
181
        if (activeEditor instanceof IDirtyMarkable){
182
	        ((IDirtyMarkable) activeEditor).forceDirty();
183
	    }
184
		return true;
185
	}
186

    
187
	/** {@inheritDoc} */
188
	@Override
189
	public void widgetSelected(SelectionEvent e) {
190
		WizardDialog dialog = new WizardDialog(selectionElement.getShell(),
191
				this);
192
		if (dialog.open() == IStatus.OK) {
193
			selectionElement.updateFromWizard();
194
		}
195
	}
196

    
197
	/** {@inheritDoc} */
198
	@Override
199
	public void widgetDefaultSelected(SelectionEvent e) {
200
	}
201
}
(1-1/4)