Project

General

Profile

Download (9.96 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 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

    
10
package eu.etaxonomy.taxeditor.ui.selection;
11

    
12
import java.util.Collections;
13
import java.util.List;
14
import java.util.Map;
15

    
16
import org.eclipse.core.runtime.IStatus;
17
import org.eclipse.jface.wizard.Wizard;
18
import org.eclipse.jface.wizard.WizardDialog;
19
import org.eclipse.swt.events.SelectionEvent;
20
import org.eclipse.swt.events.SelectionListener;
21

    
22
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
23
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
24
import eu.etaxonomy.cdm.api.service.IService;
25
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
26
import eu.etaxonomy.cdm.model.agent.Institution;
27
import eu.etaxonomy.cdm.model.agent.Person;
28
import eu.etaxonomy.cdm.model.agent.Team;
29
import eu.etaxonomy.cdm.model.common.CdmBase;
30
import eu.etaxonomy.cdm.model.common.User;
31
import eu.etaxonomy.cdm.model.description.PolytomousKey;
32
import eu.etaxonomy.cdm.model.molecular.Amplification;
33
import eu.etaxonomy.cdm.model.molecular.Primer;
34
import eu.etaxonomy.cdm.model.name.TaxonName;
35
import eu.etaxonomy.cdm.model.occurrence.Collection;
36
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
37
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
38
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
39
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
40
import eu.etaxonomy.cdm.model.reference.Reference;
41
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
42
import eu.etaxonomy.taxeditor.model.MessagingUtils;
43
import eu.etaxonomy.taxeditor.model.TextHelper;
44
import eu.etaxonomy.taxeditor.newWizard.AmplificationGeneralWizardPage;
45
import eu.etaxonomy.taxeditor.newWizard.PolytomousKeyWizardPage;
46
import eu.etaxonomy.taxeditor.newWizard.PrimerWizardPage;
47
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
48
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
49
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
50
import eu.etaxonomy.taxeditor.store.CdmStore;
51
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
52
import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionWizardPage;
53
import eu.etaxonomy.taxeditor.ui.section.agent.PersonWizardPage;
54
import eu.etaxonomy.taxeditor.ui.section.agent.TeamWizardPage;
55
import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameWizardPage;
56
import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectionWizardPage;
57
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseWizardPage;
58
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralWizardPage;
59
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitWizardPage;
60
import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventWizardPage;
61
import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceWizardPage;
62
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonWizardPage;
63
import eu.etaxonomy.taxeditor.ui.section.user.UserDetailWizardPage;
64

    
65
/**
66
 * @author n.hoffmann
67
 * @created Jun 1, 2010
68
 * @version 1.0
69
 */
70
public class EditFromSelectionWizard extends Wizard implements
71
		SelectionListener, ICdmEntitySessionEnabled {
72

    
73
    private ICdmEntitySession cdmEntitySession;
74
    private ICdmEntitySession previousCdmEntitySession;
75
	private final EntitySelectionElement selectionElement;
76
	private CdmBase rootElement;
77

    
78
	public EditFromSelectionWizard(EntitySelectionElement selectionElement) {
79
        if (CdmStore.isActive()) {
80
            previousCdmEntitySession = CdmStore.getCurrentSessionManager().getActiveSession();
81
            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
82
            cdmEntitySession.bind();
83
        }
84
		this.selectionElement = selectionElement;
85
		this.setWindowTitle(String.format("Edit %s", TextHelper.deproxyClassName(selectionElement.getEntity().getClass())));
86
	}
87

    
88
	/** {@inheritDoc} */
89
	@Override
90
	public void addPages() {
91

    
92
		CdmFormFactory formFactory = selectionElement.getFormFactory();
93
		CdmBase entity = HibernateProxyHelper
94
				.deproxy(selectionElement.getEntity());
95
		//check if entity has already been persisted
96
		if(entity.getId()==0){
97
			rootElement = entity;
98
		}
99
		else{
100
			IService<CdmBase> service = CdmStore.getService(entity);
101
			rootElement = service.load(entity.getUuid());
102
		}
103
		if (rootElement.isInstanceOf(Reference.class)) {
104
			addPage(new ReferenceWizardPage(formFactory,
105
					selectionElement.getConversationHolder(),
106
					(HibernateProxyHelper.deproxy(rootElement, Reference.class))));
107
		} else if (rootElement.isInstanceOf(Team.class) && selectionElement instanceof EntitySelectionElementWithAbbreviatedTitle<?>) {
108
			addPage(new TeamWizardPage(formFactory,
109
					selectionElement.getConversationHolder(), HibernateProxyHelper.deproxy(rootElement, Team.class), true));
110
		} else if (rootElement.isInstanceOf(Team.class) && !(selectionElement instanceof EntitySelectionElementWithAbbreviatedTitle<?>)) {
111
            addPage(new TeamWizardPage(formFactory,
112
                    selectionElement.getConversationHolder(), HibernateProxyHelper.deproxy(rootElement, Team.class), false));
113
        } else if (rootElement.isInstanceOf(Person.class)) {
114
			addPage(new PersonWizardPage(formFactory,
115
					selectionElement.getConversationHolder(), HibernateProxyHelper.deproxy(rootElement, Person.class)));
116
		} else if (rootElement.isInstanceOf(TaxonName.class)) {
117
			addPage(new NonViralNameWizardPage(formFactory,
118
					selectionElement.getConversationHolder(),
119
					HibernateProxyHelper.deproxy(rootElement, TaxonName.class)));
120
		} else if (rootElement.isInstanceOf(TaxonBase.class)) {
121
            addPage(new TaxonWizardPage(formFactory,
122
                    selectionElement.getConversationHolder(),
123
                    HibernateProxyHelper.deproxy(rootElement, TaxonBase.class)));
124
        }  else if (rootElement.isInstanceOf(SpecimenOrObservationBase.class)) {
125

    
126
			DerivedUnitFacade facade;
127
			try {
128
			    if(rootElement.isInstanceOf(DerivedUnit.class)){
129
			        facade = DerivedUnitFacade.NewInstance(
130
			                HibernateProxyHelper.deproxy(rootElement, DerivedUnit.class),
131
			                PreferencesUtil.getDerivedUnitConfigurator());
132
			    }
133
			    else {
134
                    facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit,
135
                            HibernateProxyHelper.deproxy(rootElement, FieldUnit.class),
136
                            PreferencesUtil.getDerivedUnitConfigurator());
137
			    }
138

    
139
			} catch (DerivedUnitFacadeNotSupportedException e) {
140
				// we should never get here
141
				throw new IllegalStateException();
142
			}
143

    
144
			addPage(new DerivedUnitGeneralWizardPage(formFactory,
145
					selectionElement.getConversationHolder(), facade));
146
			addPage(new GatheringEventWizardPage(formFactory,
147
					selectionElement.getConversationHolder(), facade));
148
			addPage(new FieldUnitWizardPage(formFactory,
149
					selectionElement.getConversationHolder(), facade));
150
			if(facade.innerDerivedUnit()!=null){
151
			    addPage(new DerivedUnitBaseWizardPage(formFactory,
152
			            selectionElement.getConversationHolder(), facade));
153
			}
154
		} else if (rootElement.isInstanceOf(Collection.class)) {
155
			addPage(new CollectionWizardPage(formFactory,
156
					selectionElement.getConversationHolder(),
157
					HibernateProxyHelper.deproxy(rootElement, Collection.class)));
158
		} else if (rootElement instanceof Institution) {
159
			addPage(new InstitutionWizardPage(formFactory,
160
					selectionElement.getConversationHolder(),
161
					HibernateProxyHelper.deproxy(rootElement, Institution.class)));
162
		} else if (rootElement instanceof User) {
163
			addPage(new UserDetailWizardPage(formFactory,
164
					selectionElement.getConversationHolder(),
165
					HibernateProxyHelper.deproxy(rootElement, User.class)));
166
		} else if (rootElement instanceof Primer) {
167
            addPage(new PrimerWizardPage(formFactory,
168
                    selectionElement.getConversationHolder(),
169
                    HibernateProxyHelper.deproxy(rootElement, Primer.class)));
170
        } else if (rootElement instanceof Amplification) {
171
            addPage(new AmplificationGeneralWizardPage(formFactory,
172
                    selectionElement.getConversationHolder(),
173
                    HibernateProxyHelper.deproxy(rootElement, Amplification.class)));
174
        } else if (rootElement instanceof PolytomousKey) {
175
            addPage(new PolytomousKeyWizardPage(formFactory,
176
                    selectionElement.getConversationHolder(),
177
                    HibernateProxyHelper.deproxy(rootElement, PolytomousKey.class)));
178
        } else {
179
			MessagingUtils.warningDialog("Missing interface", this,
180
					"No detail element for current selection");
181
		}
182

    
183
	}
184

    
185
	/** {@inheritDoc} */
186
	@Override
187
	public boolean performFinish() {
188
	    IService<CdmBase> service = CdmStore.getService(rootElement);
189
	    if(rootElement.getId()!=0){
190
	        service.merge(rootElement, true);
191

    
192
	    }else{
193
	        rootElement = service.save(rootElement);
194
	    }
195
	    if(previousCdmEntitySession!=null){
196
            selectionElement.setEntity(previousCdmEntitySession.load(rootElement, true));
197
        }
198

    
199
		return true;
200
	}
201

    
202
	/** {@inheritDoc} */
203
	@Override
204
	public void widgetSelected(SelectionEvent e) {
205
		WizardDialog dialog = new WizardDialog(selectionElement.getShell(),
206
				this);
207
		if (dialog.open() == IStatus.OK) {
208
			selectionElement.updateFromWizard();
209
		}
210
	}
211

    
212
	/** {@inheritDoc} */
213
	@Override
214
	public void widgetDefaultSelected(SelectionEvent e) {
215
	}
216

    
217
    @Override
218
    public void dispose() {
219
        super.dispose();
220
        if(cdmEntitySession != null) {
221
            cdmEntitySession.dispose();
222
            cdmEntitySession = null;
223
        }
224
        if(previousCdmEntitySession!=null){
225
            previousCdmEntitySession.bind();
226
        }
227
    }
228

    
229
    @Override
230
    public ICdmEntitySession getCdmEntitySession() {
231
        return cdmEntitySession;
232
    }
233

    
234
    @Override
235
    public java.util.Collection<CdmBase> getRootEntities() {
236
        return Collections.singleton(rootElement);
237
    }
238

    
239
    @Override
240
    public Map<Object, List<String>> getPropertyPathsMap() {
241
        return null;
242
    }
243
}
(3-3/7)