1c5ea07fb1c2b24d73808622d96bf23021983c30
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / newWizard / NewDerivedUnitBaseWizard.java
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.newWizard;
12
13 import java.util.HashMap;
14 import java.util.Map;
15 import java.util.UUID;
16
17 import org.eclipse.core.commands.Command;
18 import org.eclipse.core.commands.ExecutionException;
19 import org.eclipse.core.commands.NotEnabledException;
20 import org.eclipse.core.commands.NotHandledException;
21 import org.eclipse.core.commands.ParameterizedCommand;
22 import org.eclipse.core.commands.common.NotDefinedException;
23 import org.eclipse.jface.dialogs.IDialogConstants;
24 import org.eclipse.jface.dialogs.MessageDialogWithToggle;
25 import org.eclipse.ui.IWorkbenchWindow;
26 import org.eclipse.ui.PlatformUI;
27 import org.eclipse.ui.commands.ICommandService;
28 import org.eclipse.ui.handlers.IHandlerService;
29
30 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
31 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
32 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
33 import eu.etaxonomy.cdm.model.media.Media;
34 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
35 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
36 import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
37 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
38 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
39 import eu.etaxonomy.taxeditor.model.AbstractUtility;
40 import eu.etaxonomy.taxeditor.model.IDerivedUnitFacadePart;
41 import eu.etaxonomy.taxeditor.model.MessagingUtils;
42 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
43 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
44 import eu.etaxonomy.taxeditor.store.CdmStore;
45 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseWizardPage;
46 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralWizardPage;
47 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralWizardPage;
48 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitWizardPage;
49 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventWizardPage;
50
51 /**
52 * @author n.hoffmann
53 * @created Jun 16, 2010
54 * @version 1.0
55 */
56 public class NewDerivedUnitBaseWizard extends AbstractNewEntityWizard<SpecimenOrObservationBase> implements IDerivedUnitFacadePart{
57 private SpecimenOrObservationType specOrObsType = null;
58
59 public NewDerivedUnitBaseWizard() {
60 super();
61 CdmStore.getCurrentSessionManager().bindNullSession();
62 }
63
64 public NewDerivedUnitBaseWizard(SpecimenOrObservationType specOrObsType) {
65 super();
66 this.specOrObsType = specOrObsType;
67 }
68 /** {@inheritDoc} */
69 @Override
70 public void addPages() {
71 DerivedUnitFacade facade = null;
72 try {
73 if(getEntity() instanceof DerivedUnit) {
74 facade = DerivedUnitFacade.NewInstance((DerivedUnit)getEntity(), PreferencesUtil.getDerivedUnitConfigurator());
75 addPage(new DerivedUnitGeneralWizardPage(formFactory, getConversationHolder(), facade));
76 addPage(new GatheringEventWizardPage(formFactory, getConversationHolder(), facade));
77 addPage(new FieldUnitWizardPage(formFactory, getConversationHolder(), facade));
78 addPage(new DerivedUnitBaseWizardPage(formFactory, getConversationHolder(), facade));
79 }
80 else if(getEntity() instanceof FieldUnit){
81 facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit)getEntity(), PreferencesUtil.getDerivedUnitConfigurator());
82 addPage(new FieldUnitGeneralWizardPage(formFactory, getConversationHolder(), facade));
83 addPage(new GatheringEventWizardPage(formFactory, getConversationHolder(), facade));
84 addPage(new FieldUnitWizardPage(formFactory, getConversationHolder(), facade));
85 }
86 } catch (DerivedUnitFacadeNotSupportedException e) {
87 // we should never get here
88 throw new IllegalStateException();
89 }
90 }
91
92 /** {@inheritDoc} */
93 @Override
94 protected SpecimenOrObservationBase createNewEntity() {
95 if (specOrObsType == null) {
96 return DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
97 } else {
98 if (SpecimenOrObservationType.Media.equals(specOrObsType)
99 || ((specOrObsType.getKindOf() != null) && specOrObsType.getKindOf().equals(SpecimenOrObservationType.Media))) {
100 MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(specOrObsType);
101 //a MediaSpecimen with no media attached does not make sense. Hence, we add one
102 mediaSpecimen.setMediaSpecimen(Media.NewInstance());
103 return mediaSpecimen;
104 } else if (specOrObsType.equals(SpecimenOrObservationType.FieldUnit)) {
105 return FieldUnit.NewInstance();
106 } else {
107 return DerivedUnit.NewInstance(specOrObsType);
108 }
109 }
110 }
111
112
113 /** {@inheritDoc} */
114 @Override
115 protected void saveEntity() {
116 if(CdmStore.getCurrentSessionManager().isRemoting()) {
117 CdmStore.getService(IOccurrenceService.class).merge(getEntity(), true);
118 } else {
119 CdmStore.getService(IOccurrenceService.class).save(getEntity());
120 }
121 }
122
123
124 @Override
125 protected String getEntityName() {
126 return "Specimen";
127 }
128
129 /**
130 * {@inheritDoc}
131 */
132 @Override
133 public boolean performFinish() {
134 boolean performFinish = super.performFinish();
135 int returnCode = IDialogConstants.NO_ID;
136 if (!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.PROMPT_FOR_OPEN_SPECIMEN_IN_EDITOR)){
137 MessageDialogWithToggle messageDialog = MessageDialogWithToggle.openYesNoQuestion(getShell(),
138 "Choose opening option", "Do you want to open the specimen in the specimen editor?",
139 "Remember my decision?", false, PreferencesUtil.getPreferenceStore(),
140 IPreferenceKeys.ALWAYS_OPEN_SPECIMEN_IN_EDITOR);
141 returnCode = messageDialog.getReturnCode();
142 PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.PROMPT_FOR_OPEN_SPECIMEN_IN_EDITOR, messageDialog.getToggleState());
143 if (returnCode != IDialogConstants.YES_ID) {
144 return performFinish;
145 }
146 }
147 if (returnCode==IDialogConstants.YES_ID ||
148 PreferencesUtil.getPreferenceStore().getString(IPreferenceKeys.ALWAYS_OPEN_SPECIMEN_IN_EDITOR)
149 .equals(MessageDialogWithToggle.ALWAYS)) {
150 IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
151
152 // get the command from plugin.xml
153 IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
154 ICommandService cmdService = (ICommandService) window.getService(ICommandService.class);
155 Command command = cmdService.getCommand("eu.etaxonomy.taxeditor.editor.openSpecimenEditor");
156 Map<String, UUID> parameters = new HashMap<String, UUID>();
157 parameters.put("eu.etaxonomy.taxeditor.specimenUuidParameter", getEntity().getUuid());
158 ParameterizedCommand parameterizedCommand = ParameterizedCommand.generateCommand(command, parameters);
159
160
161 // execute the command
162 try {
163 handlerService.executeCommand(parameterizedCommand, null);
164 } catch (ExecutionException e) {
165 MessagingUtils.error(NewDerivedUnitBaseWizard.class, e);
166 } catch (NotDefinedException e) {
167 MessagingUtils.error(NewDerivedUnitBaseWizard.class, e);
168 } catch (NotEnabledException e) {
169 MessagingUtils.error(NewDerivedUnitBaseWizard.class, e);
170 } catch (NotHandledException e) {
171 MessagingUtils.error(NewDerivedUnitBaseWizard.class, e);
172 }
173 }
174
175 return performFinish;
176 }
177
178
179 }