- fixed saving problem due to cloning of FieldUnit
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / CreateDerivateContextMenu.java
1 package eu.etaxonomy.taxeditor.editor.view.derivate;
2
3 import java.util.UUID;
4
5 import org.eclipse.core.runtime.NullProgressMonitor;
6 import org.eclipse.jface.action.ContributionItem;
7 import org.eclipse.jface.action.IContributionItem;
8 import org.eclipse.jface.viewers.ISelection;
9 import org.eclipse.jface.viewers.TreeSelection;
10 import org.eclipse.swt.SWT;
11 import org.eclipse.swt.events.SelectionEvent;
12 import org.eclipse.swt.events.SelectionListener;
13 import org.eclipse.swt.widgets.Menu;
14 import org.eclipse.swt.widgets.MenuItem;
15 import org.eclipse.ui.IWorkbenchPart;
16 import org.eclipse.ui.IWorkbenchWindow;
17 import org.eclipse.ui.PlatformUI;
18 import org.eclipse.ui.actions.CompoundContributionItem;
19 import org.eclipse.ui.handlers.IHandlerService;
20
21 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
22 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
23 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
24 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
25 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
26 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
27 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
28 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
29 import eu.etaxonomy.taxeditor.model.AbstractUtility;
30 import eu.etaxonomy.taxeditor.store.CdmStore;
31
32 public class CreateDerivateContextMenu extends CompoundContributionItem {
33
34 private final IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
35
36 /* (non-Javadoc)
37 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
38 */
39 @Override
40 protected IContributionItem[] getContributionItems() {
41 IContributionItem[] contributionItems = new IContributionItem[] {
42 new ContributionItem() {
43 @Override
44 public void fill(Menu menu, int index) {
45 final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
46 final ISelection selection = window.getActivePage().getSelection();
47 if(selection instanceof TreeSelection){
48 final Object selectedElement = ((TreeSelection) selection).getFirstElement();
49 //context menu for FieldUnit
50 if(selectedElement instanceof FieldUnit){
51 MenuItem createSpecimen = new MenuItem(menu, SWT.None);
52 createSpecimen.setText("Specimen");
53 createSpecimen.addSelectionListener(new SelectionListener() {
54
55 @Override
56 public void widgetSelected(SelectionEvent e) {
57 ICdmApplicationConfiguration currentApplicationConfiguration = CdmStore.getCurrentApplicationConfiguration();
58 // TransactionStatus transaction = currentApplicationConfiguration.startTransaction();
59 IOccurrenceService occurrenceService = currentApplicationConfiguration.getOccurrenceService();
60 FieldUnit fieldUnit = (FieldUnit)selectedElement;
61 UUID uuid = fieldUnit.getUuid();
62 fieldUnit = (FieldUnit) occurrenceService.load(uuid);
63 // fieldUnit = (FieldUnit)HibernateProxyHelper.deproxy(fieldUnit);
64
65 DerivedUnit specimen = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
66 fieldUnit.addDerivationEvent(DerivationEvent.NewSimpleInstance(fieldUnit, specimen, DerivationEventType.GATHERING_IN_SITU()));
67 specimen.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
68 specimen.getTitleCache(); //update title cache
69 IWorkbenchPart activePart = AbstractUtility.getActivePart();
70 // occurrenceService.saveOrUpdate(fieldUnit);
71 // occurrenceService.saveOrUpdate(specimen);
72 // currentApplicationConfiguration.commitTransaction(transaction);
73 if(activePart instanceof DerivateView){
74 DerivateView derivateView = (DerivateView)activePart;
75 derivateView.viewer.refresh();
76 derivateView.getEditor().doSave(new NullProgressMonitor());
77 }
78 }
79
80 @Override
81 public void widgetDefaultSelected(SelectionEvent e) {
82 // TODO Auto-generated method stub
83
84 }
85 });
86 MenuItem createLivingPlantPhoto = new MenuItem(menu, SWT.None);
87 createLivingPlantPhoto.setText("Living Plant Photo");
88 }
89 //context menu for Specimen
90 else if(selectedElement instanceof DerivedUnit && ((DerivedUnit)selectedElement).getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
91 MenuItem createTissueSample = new MenuItem(menu, SWT.None);
92 createTissueSample.setText("Tissue Sample");
93 MenuItem createDNASample = new MenuItem(menu, SWT.None);
94 createDNASample.setText("DNA Sample");
95 MenuItem createSpecimenScan = new MenuItem(menu, SWT.None);
96 createSpecimenScan.setText("Specimen Scan");
97 MenuItem createArtwork = new MenuItem(menu, SWT.None);
98 createArtwork.setText("Artwork");
99 MenuItem createLivingPlantPhoto = new MenuItem(menu, SWT.None);
100 createLivingPlantPhoto.setText("Living Plant Photo");
101 }
102 else{
103 MenuItem menuItem = new MenuItem(menu, SWT.None);
104 menuItem.setText("No child derivates");
105 menuItem.setEnabled(false);
106 }
107 }
108 }
109 }
110 };
111 return contributionItems;
112 }
113
114 }