Project

General

Profile

Download (10.5 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
package eu.etaxonomy.taxeditor.ui.selection;
10

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

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

    
21
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
22
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
23
import eu.etaxonomy.cdm.api.service.IService;
24
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
25
import eu.etaxonomy.cdm.model.agent.Institution;
26
import eu.etaxonomy.cdm.model.agent.Person;
27
import eu.etaxonomy.cdm.model.agent.Team;
28
import eu.etaxonomy.cdm.model.common.CdmBase;
29
import eu.etaxonomy.cdm.model.permission.User;
30
import eu.etaxonomy.cdm.model.description.PolytomousKey;
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.occurrence.SpecimenOrObservationType;
39
import eu.etaxonomy.cdm.model.reference.Reference;
40
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
41
import eu.etaxonomy.taxeditor.model.MessagingUtils;
42
import eu.etaxonomy.taxeditor.model.TextHelper;
43
import eu.etaxonomy.taxeditor.newWizard.AmplificationGeneralWizardPage;
44
import eu.etaxonomy.taxeditor.newWizard.PolytomousKeyWizardPage;
45
import eu.etaxonomy.taxeditor.newWizard.PrimerWizardPage;
46
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
47
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
48
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
49
import eu.etaxonomy.taxeditor.store.CdmStore;
50
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
51
import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionWizardPage;
52
import eu.etaxonomy.taxeditor.ui.section.agent.PersonWizardPage;
53
import eu.etaxonomy.taxeditor.ui.section.agent.TeamWizardPage;
54
import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameWizardPage;
55
import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectionWizardPage;
56
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseWizardPage;
57
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralWizardPage;
58
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitWizardPage;
59
import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventWizardPage;
60
import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceWizardPage;
61
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonWizardPage;
62
import eu.etaxonomy.taxeditor.ui.section.user.UserDetailWizardPage;
63

    
64
/**
65
 * @author n.hoffmann
66
 * @created Jun 1, 2010
67
 */
68
public class EditFromSelectionWizard extends Wizard implements
69
		SelectionListener, ICdmEntitySessionEnabled<CdmBase> {
70

    
71
    private ICdmEntitySession cdmEntitySession;
72
    private ICdmEntitySession previousCdmEntitySession;
73
	private final EntitySelectionElement<CdmBase> selectionElement;
74
	private CdmBase rootElement;
75

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

    
86
	@Override
87
	public void addPages() {
88

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

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

    
142
			} catch (DerivedUnitFacadeNotSupportedException e) {
143
				// we should never get here
144
				throw new IllegalStateException();
145
			}
146

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

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

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

    
200
		return true;
201
	}
202

    
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
	@Override
213
	public void widgetDefaultSelected(SelectionEvent e) {
214
	}
215

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

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

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

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