Project

General

Profile

Download (8.72 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 java.util.Collections;
14
import java.util.List;
15
import java.util.Map;
16

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

    
23
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
24
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
25
import eu.etaxonomy.cdm.api.service.IService;
26
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
27
import eu.etaxonomy.cdm.model.agent.Institution;
28
import eu.etaxonomy.cdm.model.agent.Person;
29
import eu.etaxonomy.cdm.model.agent.Team;
30
import eu.etaxonomy.cdm.model.common.CdmBase;
31
import eu.etaxonomy.cdm.model.common.User;
32
import eu.etaxonomy.cdm.model.molecular.Amplification;
33
import eu.etaxonomy.cdm.model.molecular.Primer;
34
import eu.etaxonomy.cdm.model.name.NonViralName;
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.taxeditor.model.MessagingUtils;
42
import eu.etaxonomy.taxeditor.model.TextHelper;
43
import eu.etaxonomy.taxeditor.newWizard.AmplificationGeneralWizardPage;
44
import eu.etaxonomy.taxeditor.newWizard.PrimerWizardPage;
45
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
46
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
47
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
48
import eu.etaxonomy.taxeditor.store.CdmStore;
49
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
50
import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionWizardPage;
51
import eu.etaxonomy.taxeditor.ui.section.agent.PersonWizardPage;
52
import eu.etaxonomy.taxeditor.ui.section.agent.TeamWizardPage;
53
import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameWizardPage;
54
import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectionWizardPage;
55
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseWizardPage;
56
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralWizardPage;
57
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitWizardPage;
58
import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventWizardPage;
59
import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceWizardPage;
60
import eu.etaxonomy.taxeditor.ui.section.user.UserDetailWizardPage;
61

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

    
70
    private ICdmEntitySession cdmEntitySession;
71
    private ICdmEntitySession previousCdmEntitySession;
72
	private final EntitySelectionElement selectionElement;
73
	private CdmBase rootElement;
74

    
75
	public EditFromSelectionWizard(EntitySelectionElement selectionElement) {
76
        if (CdmStore.isActive() && CdmStore.getCurrentSessionManager().isRemoting()) {
77
            previousCdmEntitySession = CdmStore.getCurrentSessionManager().getActiveSession();
78
            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
79
            cdmEntitySession.bind();
80
        }
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
		CdmBase entity = (CdmBase) 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)) {
101
			addPage(new ReferenceWizardPage(formFactory,
102
					selectionElement.getConversationHolder(),
103
					(HibernateProxyHelper.deproxy(rootElement, Reference.class))));
104
		} else if (rootElement.isInstanceOf(Team.class)) {
105
			addPage(new TeamWizardPage(formFactory,
106
					selectionElement.getConversationHolder(), HibernateProxyHelper.deproxy(rootElement, Team.class)));
107
		} else if (rootElement.isInstanceOf(Person.class)) {
108
			addPage(new PersonWizardPage(formFactory,
109
					selectionElement.getConversationHolder(), HibernateProxyHelper.deproxy(rootElement, Person.class)));
110
		} else if (rootElement.isInstanceOf(NonViralName.class)) {
111
			addPage(new NonViralNameWizardPage(formFactory,
112
					selectionElement.getConversationHolder(),
113
					HibernateProxyHelper.deproxy(rootElement, NonViralName.class)));
114
		} else if (rootElement.isInstanceOf(SpecimenOrObservationBase.class)) {
115

    
116
			DerivedUnitFacade facade;
117
			try {
118
			    if(rootElement.isInstanceOf(DerivedUnit.class)){
119
			        facade = DerivedUnitFacade.NewInstance(
120
			                HibernateProxyHelper.deproxy(rootElement, DerivedUnit.class),
121
			                PreferencesUtil.getDerivedUnitConfigurator());
122
			    }
123
			    else {
124
                    facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit,
125
                            HibernateProxyHelper.deproxy(rootElement, FieldUnit.class),
126
                            PreferencesUtil.getDerivedUnitConfigurator());
127
			    }
128

    
129
			} catch (DerivedUnitFacadeNotSupportedException e) {
130
				// we should never get here
131
				throw new IllegalStateException();
132
			}
133

    
134
			addPage(new DerivedUnitGeneralWizardPage(formFactory,
135
					selectionElement.getConversationHolder(), facade));
136
			addPage(new GatheringEventWizardPage(formFactory,
137
					selectionElement.getConversationHolder(), facade));
138
			addPage(new FieldUnitWizardPage(formFactory,
139
					selectionElement.getConversationHolder(), facade));
140
			if(facade.innerDerivedUnit()!=null){
141
			    addPage(new DerivedUnitBaseWizardPage(formFactory,
142
			            selectionElement.getConversationHolder(), facade));
143
			}
144
		} else if (rootElement.isInstanceOf(Collection.class)) {
145
			addPage(new CollectionWizardPage(formFactory,
146
					selectionElement.getConversationHolder(),
147
					HibernateProxyHelper.deproxy(rootElement, Collection.class)));
148
		} else if (rootElement instanceof Institution) {
149
			addPage(new InstitutionWizardPage(formFactory,
150
					selectionElement.getConversationHolder(),
151
					HibernateProxyHelper.deproxy(rootElement, Institution.class)));
152
		} else if (rootElement instanceof User) {
153
			addPage(new UserDetailWizardPage(formFactory,
154
					selectionElement.getConversationHolder(),
155
					HibernateProxyHelper.deproxy(rootElement, User.class)));
156
		} else if (rootElement instanceof Primer) {
157
            addPage(new PrimerWizardPage(formFactory,
158
                    selectionElement.getConversationHolder(),
159
                    HibernateProxyHelper.deproxy(rootElement, Primer.class)));
160
        } else if (rootElement instanceof Amplification) {
161
            addPage(new AmplificationGeneralWizardPage(formFactory,
162
                    selectionElement.getConversationHolder(),
163
                    HibernateProxyHelper.deproxy(rootElement, Amplification.class)));
164
        } else {
165
			MessagingUtils.warningDialog("Missing interface", this,
166
					"No detail element for current selection");
167
		}
168

    
169
	}
170

    
171
	/** {@inheritDoc} */
172
	@Override
173
	public boolean performFinish() {
174
	    IService<CdmBase> service = CdmStore.getService(rootElement);
175
	    service.merge(rootElement, true);
176
	    if(previousCdmEntitySession!=null){
177
	    	previousCdmEntitySession.load(rootElement, true);
178
	    }
179
		return true;
180
	}
181

    
182
	/** {@inheritDoc} */
183
	@Override
184
	public void widgetSelected(SelectionEvent e) {
185
		WizardDialog dialog = new WizardDialog(selectionElement.getShell(),
186
				this);
187
		if (dialog.open() == IStatus.OK) {
188
			selectionElement.updateFromWizard();
189
		}
190
	}
191

    
192
	/** {@inheritDoc} */
193
	@Override
194
	public void widgetDefaultSelected(SelectionEvent e) {
195
	}
196

    
197
    @Override
198
    public void dispose() {
199
        super.dispose();
200
        if(cdmEntitySession != null) {
201
            cdmEntitySession.dispose();
202
        }
203
        if(previousCdmEntitySession!=null){
204
            previousCdmEntitySession.bind();
205
        }
206
    }
207

    
208
    @Override
209
    public ICdmEntitySession getCdmEntitySession() {
210
        return cdmEntitySession;
211
    }
212

    
213
    @Override
214
    public java.util.Collection<CdmBase> getRootEntities() {
215
        return Collections.singleton(rootElement);
216
    }
217

    
218
    @Override
219
    public Map<Object, List<String>> getPropertyPathsMap() {
220
        return null;
221
    }
222
}
(2-2/6)