3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.taxeditor
.ui
.selection
;
13 import java
.util
.Collections
;
14 import java
.util
.List
;
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
;
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
;
64 * @created Jun 1, 2010
67 public class EditFromSelectionWizard
extends Wizard
implements
68 SelectionListener
, ICdmEntitySessionEnabled
{
70 private ICdmEntitySession cdmEntitySession
;
71 private ICdmEntitySession previousCdmEntitySession
;
72 private final EntitySelectionElement selectionElement
;
73 private CdmBase rootElement
;
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();
81 this.selectionElement
= selectionElement
;
82 this.setWindowTitle(String
.format("Edit %s", TextHelper
.deproxyClassName(selectionElement
.getEntity().getClass())));
87 public void addPages() {
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){
95 cdmEntitySession
.addNewCdmEntity(rootElement
);
98 IService
<CdmBase
> service
= CdmStore
.getService(entity
);
99 rootElement
= service
.load(entity
.getUuid());
101 if (rootElement
.isInstanceOf(Reference
.class)) {
102 addPage(new ReferenceWizardPage(formFactory
,
103 selectionElement
.getConversationHolder(),
104 (HibernateProxyHelper
.deproxy(rootElement
, Reference
.class))));
105 } else if (rootElement
.isInstanceOf(Team
.class)) {
106 addPage(new TeamWizardPage(formFactory
,
107 selectionElement
.getConversationHolder(), HibernateProxyHelper
.deproxy(rootElement
, Team
.class)));
108 } else if (rootElement
.isInstanceOf(Person
.class)) {
109 addPage(new PersonWizardPage(formFactory
,
110 selectionElement
.getConversationHolder(), HibernateProxyHelper
.deproxy(rootElement
, Person
.class)));
111 } else if (rootElement
.isInstanceOf(NonViralName
.class)) {
112 addPage(new NonViralNameWizardPage(formFactory
,
113 selectionElement
.getConversationHolder(),
114 HibernateProxyHelper
.deproxy(rootElement
, NonViralName
.class)));
115 } else if (rootElement
.isInstanceOf(SpecimenOrObservationBase
.class)) {
117 DerivedUnitFacade facade
;
119 if(rootElement
.isInstanceOf(DerivedUnit
.class)){
120 facade
= DerivedUnitFacade
.NewInstance(
121 HibernateProxyHelper
.deproxy(rootElement
, DerivedUnit
.class),
122 PreferencesUtil
.getDerivedUnitConfigurator());
125 facade
= DerivedUnitFacade
.NewInstance(SpecimenOrObservationType
.FieldUnit
,
126 HibernateProxyHelper
.deproxy(rootElement
, FieldUnit
.class),
127 PreferencesUtil
.getDerivedUnitConfigurator());
130 } catch (DerivedUnitFacadeNotSupportedException e
) {
131 // we should never get here
132 throw new IllegalStateException();
135 addPage(new DerivedUnitGeneralWizardPage(formFactory
,
136 selectionElement
.getConversationHolder(), facade
));
137 addPage(new GatheringEventWizardPage(formFactory
,
138 selectionElement
.getConversationHolder(), facade
));
139 addPage(new FieldUnitWizardPage(formFactory
,
140 selectionElement
.getConversationHolder(), facade
));
141 if(facade
.innerDerivedUnit()!=null){
142 addPage(new DerivedUnitBaseWizardPage(formFactory
,
143 selectionElement
.getConversationHolder(), facade
));
145 } else if (rootElement
.isInstanceOf(Collection
.class)) {
146 addPage(new CollectionWizardPage(formFactory
,
147 selectionElement
.getConversationHolder(),
148 HibernateProxyHelper
.deproxy(rootElement
, Collection
.class)));
149 } else if (rootElement
instanceof Institution
) {
150 addPage(new InstitutionWizardPage(formFactory
,
151 selectionElement
.getConversationHolder(),
152 HibernateProxyHelper
.deproxy(rootElement
, Institution
.class)));
153 } else if (rootElement
instanceof User
) {
154 addPage(new UserDetailWizardPage(formFactory
,
155 selectionElement
.getConversationHolder(),
156 HibernateProxyHelper
.deproxy(rootElement
, User
.class)));
157 } else if (rootElement
instanceof Primer
) {
158 addPage(new PrimerWizardPage(formFactory
,
159 selectionElement
.getConversationHolder(),
160 HibernateProxyHelper
.deproxy(rootElement
, Primer
.class)));
161 } else if (rootElement
instanceof Amplification
) {
162 addPage(new AmplificationGeneralWizardPage(formFactory
,
163 selectionElement
.getConversationHolder(),
164 HibernateProxyHelper
.deproxy(rootElement
, Amplification
.class)));
166 MessagingUtils
.warningDialog("Missing interface", this,
167 "No detail element for current selection");
174 public boolean performFinish() {
175 IService
<CdmBase
> service
= CdmStore
.getService(rootElement
);
176 if(rootElement
.getId()!=0){
177 service
.merge(rootElement
, true);
179 if(previousCdmEntitySession
!=null){
180 selectionElement
.setEntity(previousCdmEntitySession
.load(rootElement
, true));
187 public void widgetSelected(SelectionEvent e
) {
188 WizardDialog dialog
= new WizardDialog(selectionElement
.getShell(),
190 if (dialog
.open() == IStatus
.OK
) {
191 selectionElement
.updateFromWizard();
197 public void widgetDefaultSelected(SelectionEvent e
) {
201 public void dispose() {
203 if(cdmEntitySession
!= null) {
204 cdmEntitySession
.dispose();
206 if(previousCdmEntitySession
!=null){
207 previousCdmEntitySession
.dispose();
212 public ICdmEntitySession
getCdmEntitySession() {
213 return cdmEntitySession
;
217 public java
.util
.Collection
<CdmBase
> getRootEntities() {
218 return Collections
.singleton(rootElement
);
222 public Map
<Object
, List
<String
>> getPropertyPathsMap() {