Merge branch 'develop' into remoting-4.0
[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 import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateSearchCompositeController;
51
52 /**
53 * @author n.hoffmann
54 * @created Jun 16, 2010
55 * @version 1.0
56 */
57 public class NewDerivedUnitBaseWizard extends AbstractNewEntityWizard<SpecimenOrObservationBase> implements IDerivedUnitFacadePart{
58 private SpecimenOrObservationType specOrObsType = null;
59
60 public NewDerivedUnitBaseWizard() {
61 super();
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 CdmStore.getService(IOccurrenceService.class).merge(getEntity());
117 }
118
119
120 @Override
121 protected String getEntityName() {
122 return "Specimen";
123 }
124
125 /**
126 * {@inheritDoc}
127 */
128 @Override
129 public boolean performFinish() {
130 boolean performFinish = super.performFinish();
131 int returnCode = IDialogConstants.NO_ID;
132 if (!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.PROMPT_FOR_OPEN_SPECIMEN_IN_EDITOR)){
133 MessageDialogWithToggle messageDialog = MessageDialogWithToggle.openYesNoQuestion(getShell(),
134 "Choose opening option", "Do you want to open the specimen in the specimen editor?",
135 "Remember my decision?", false, PreferencesUtil.getPreferenceStore(),
136 IPreferenceKeys.ALWAYS_OPEN_SPECIMEN_IN_EDITOR);
137 returnCode = messageDialog.getReturnCode();
138 PreferencesUtil.getPreferenceStore().setValue(IPreferenceKeys.PROMPT_FOR_OPEN_SPECIMEN_IN_EDITOR, messageDialog.getToggleState());
139 if (returnCode != IDialogConstants.YES_ID) {
140 return performFinish;
141 }
142 }
143 if (returnCode==IDialogConstants.YES_ID ||
144 PreferencesUtil.getPreferenceStore().getString(IPreferenceKeys.ALWAYS_OPEN_SPECIMEN_IN_EDITOR)
145 .equals(MessageDialogWithToggle.ALWAYS)) {
146 IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
147
148 // get the command from plugin.xml
149 IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
150 ICommandService cmdService = (ICommandService) window.getService(ICommandService.class);
151 Command command = cmdService.getCommand("eu.etaxonomy.taxeditor.editor.openSpecimenEditor");
152 Map<String, UUID> parameters = new HashMap<String, UUID>();
153 parameters.put("eu.etaxonomy.taxeditor.specimenUuidParameter", getEntity().getUuid());
154 ParameterizedCommand parameterizedCommand = ParameterizedCommand.generateCommand(command, parameters);
155
156
157 // execute the command
158 try {
159 handlerService.executeCommand(parameterizedCommand, null);
160 } catch (ExecutionException e) {
161 MessagingUtils.error(DerivateSearchCompositeController.class, e);
162 } catch (NotDefinedException e) {
163 MessagingUtils.error(DerivateSearchCompositeController.class, e);
164 } catch (NotEnabledException e) {
165 MessagingUtils.error(DerivateSearchCompositeController.class, e);
166 } catch (NotHandledException e) {
167 MessagingUtils.error(DerivateSearchCompositeController.class, e);
168 }
169 }
170 return performFinish;
171 }
172
173
174 }