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
= (CdmBase
) HibernateProxyHelper
91 .deproxy(selectionElement
.getEntity());
92 IService
<CdmBase
> service
= EntitySelectionElement
.getService(entity
);
93 rootElement
= service
.load(entity
.getUuid());
94 if (rootElement
.isInstanceOf(Reference
.class)) {
95 addPage(new ReferenceWizardPage(formFactory
,
96 selectionElement
.getConversationHolder(),
97 (HibernateProxyHelper
.deproxy(rootElement
, Reference
.class))));
98 } else if (rootElement
.isInstanceOf(Team
.class)) {
99 addPage(new TeamWizardPage(formFactory
,
100 selectionElement
.getConversationHolder(), HibernateProxyHelper
.deproxy(rootElement
, Team
.class)));
101 } else if (rootElement
.isInstanceOf(Person
.class)) {
102 addPage(new PersonWizardPage(formFactory
,
103 selectionElement
.getConversationHolder(), HibernateProxyHelper
.deproxy(rootElement
, Person
.class)));
104 } else if (rootElement
.isInstanceOf(NonViralName
.class)) {
105 addPage(new NonViralNameWizardPage(formFactory
,
106 selectionElement
.getConversationHolder(),
107 HibernateProxyHelper
.deproxy(rootElement
, NonViralName
.class)));
108 } else if (rootElement
.isInstanceOf(SpecimenOrObservationBase
.class)) {
110 DerivedUnitFacade facade
;
112 if(rootElement
.isInstanceOf(DerivedUnit
.class)){
113 facade
= DerivedUnitFacade
.NewInstance(
114 HibernateProxyHelper
.deproxy(rootElement
, DerivedUnit
.class),
115 PreferencesUtil
.getDerivedUnitConfigurator());
118 facade
= DerivedUnitFacade
.NewInstance(SpecimenOrObservationType
.FieldUnit
,
119 HibernateProxyHelper
.deproxy(rootElement
, FieldUnit
.class),
120 PreferencesUtil
.getDerivedUnitConfigurator());
123 } catch (DerivedUnitFacadeNotSupportedException e
) {
124 // we should never get here
125 throw new IllegalStateException();
128 addPage(new DerivedUnitGeneralWizardPage(formFactory
,
129 selectionElement
.getConversationHolder(), facade
));
130 addPage(new GatheringEventWizardPage(formFactory
,
131 selectionElement
.getConversationHolder(), facade
));
132 addPage(new FieldUnitWizardPage(formFactory
,
133 selectionElement
.getConversationHolder(), facade
));
134 if(facade
.innerDerivedUnit()!=null){
135 addPage(new DerivedUnitBaseWizardPage(formFactory
,
136 selectionElement
.getConversationHolder(), facade
));
138 } else if (rootElement
.isInstanceOf(Collection
.class)) {
139 addPage(new CollectionWizardPage(formFactory
,
140 selectionElement
.getConversationHolder(),
141 HibernateProxyHelper
.deproxy(rootElement
, Collection
.class)));
142 } else if (rootElement
instanceof Institution
) {
143 addPage(new InstitutionWizardPage(formFactory
,
144 selectionElement
.getConversationHolder(),
145 HibernateProxyHelper
.deproxy(rootElement
, Institution
.class)));
146 } else if (rootElement
instanceof User
) {
147 addPage(new UserDetailWizardPage(formFactory
,
148 selectionElement
.getConversationHolder(),
149 HibernateProxyHelper
.deproxy(rootElement
, User
.class)));
150 } else if (rootElement
instanceof Primer
) {
151 addPage(new PrimerWizardPage(formFactory
,
152 selectionElement
.getConversationHolder(),
153 HibernateProxyHelper
.deproxy(rootElement
, Primer
.class)));
154 } else if (rootElement
instanceof Amplification
) {
155 addPage(new AmplificationGeneralWizardPage(formFactory
,
156 selectionElement
.getConversationHolder(),
157 HibernateProxyHelper
.deproxy(rootElement
, Amplification
.class)));
159 MessagingUtils
.warningDialog("Missing interface", this,
160 "No detail element for current selection");
167 public boolean performFinish() {
168 IService
<CdmBase
> service
= EntitySelectionElement
.getService(rootElement
);
169 service
.merge(rootElement
, true);
170 previousCdmEntitySession
.load(rootElement
, true);
176 public void widgetSelected(SelectionEvent e
) {
177 WizardDialog dialog
= new WizardDialog(selectionElement
.getShell(),
179 if (dialog
.open() == IStatus
.OK
) {
180 selectionElement
.updateFromWizard();
186 public void widgetDefaultSelected(SelectionEvent e
) {
190 public void dispose() {
192 if(cdmEntitySession
!= null) {
193 cdmEntitySession
.dispose();
195 if(previousCdmEntitySession
!=null){
196 previousCdmEntitySession
.bind();
201 public ICdmEntitySession
getCdmEntitySession() {
202 return cdmEntitySession
;
206 public java
.util
.Collection
<CdmBase
> getRootEntities() {
207 return Collections
.singleton(rootElement
);
211 public Map
<Object
, List
<String
>> getPropertyPathsMap() {