- Changed DerivateViewEditorInput to hold the FieldUnit itself
[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 org.eclipse.jface.action.ContributionItem;
4 import org.eclipse.jface.action.IContributionItem;
5 import org.eclipse.jface.viewers.ISelection;
6 import org.eclipse.jface.viewers.TreeSelection;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.events.SelectionEvent;
9 import org.eclipse.swt.events.SelectionListener;
10 import org.eclipse.swt.widgets.Menu;
11 import org.eclipse.swt.widgets.MenuItem;
12 import org.eclipse.ui.IWorkbenchPart;
13 import org.eclipse.ui.IWorkbenchWindow;
14 import org.eclipse.ui.PlatformUI;
15 import org.eclipse.ui.actions.CompoundContributionItem;
16
17 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
18 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
19 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
20 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
21 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
22 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
23 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
24 import eu.etaxonomy.taxeditor.model.AbstractUtility;
25
26 /**
27 * Context menu for the creation of sub-derivates.
28 *
29 */
30 public class CreateDerivateContextMenu extends CompoundContributionItem {
31
32 /* (non-Javadoc)
33 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
34 */
35 @Override
36 protected IContributionItem[] getContributionItems() {
37 IContributionItem[] contributionItems = new IContributionItem[] {
38 new ContributionItem() {
39 @Override
40 public void fill(Menu menu, int index) {
41 final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
42 final ISelection selection = window.getActivePage().getSelection();
43 if(selection instanceof TreeSelection){
44 final Object selectedElement = ((TreeSelection) selection).getFirstElement();
45 //context menu for FieldUnit
46 if(selectedElement instanceof FieldUnit){
47 MenuItem createSpecimen = new MenuItem(menu, SWT.None);
48 createSpecimen.setText("Specimen");
49 FieldUnit fieldUnit = (FieldUnit) selectedElement;
50 createSpecimen.addSelectionListener(new WidgetSelectionListener(fieldUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen)));
51
52 MenuItem createLivingPlantPhoto = new MenuItem(menu, SWT.None);
53 createLivingPlantPhoto.setText("Living Plant Photo");
54 createLivingPlantPhoto.addSelectionListener(new WidgetSelectionListener(fieldUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage)));
55 }
56 //context menu for Specimen
57 else if(selectedElement instanceof DerivedUnit && ((DerivedUnit)selectedElement).getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
58 DerivedUnit derivedUnit = (DerivedUnit) selectedElement;
59 MenuItem createTissueSample = new MenuItem(menu, SWT.None);
60 createTissueSample.setText("Tissue Sample");
61 createTissueSample.addSelectionListener(new WidgetSelectionListener(derivedUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample)));
62
63 MenuItem createDNASample = new MenuItem(menu, SWT.None);
64 createDNASample.setText("DNA Sample");
65 createDNASample.addSelectionListener(new WidgetSelectionListener(derivedUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample)));
66
67 MenuItem createSpecimenScan = new MenuItem(menu, SWT.None);
68 createSpecimenScan.setText("Specimen Scan");
69 createSpecimenScan.addSelectionListener(new WidgetSelectionListener(derivedUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage)));
70
71 MenuItem createArtwork = new MenuItem(menu, SWT.None);
72 createArtwork.setText("Artwork");
73 createArtwork.addSelectionListener(new WidgetSelectionListener(derivedUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage)));
74
75 MenuItem createLivingPlantPhoto = new MenuItem(menu, SWT.None);
76 createLivingPlantPhoto.setText("Living Plant Photo");
77 createLivingPlantPhoto.addSelectionListener(new WidgetSelectionListener(derivedUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage)));
78 }
79 else{
80 MenuItem menuItem = new MenuItem(menu, SWT.None);
81 menuItem.setText("No child derivates");
82 menuItem.setEnabled(false);
83 }
84 }
85 }
86 }
87 };
88 return contributionItems;
89 }
90
91 private class WidgetSelectionListener implements SelectionListener{
92
93 private final SpecimenOrObservationBase<?> parent;
94 private final DerivedUnit derivate;
95
96 /**
97 * @param parent
98 */
99 public WidgetSelectionListener(SpecimenOrObservationBase<?> parent, DerivedUnit derivate) {
100 this.parent = parent;
101 this.derivate = derivate;
102 }
103
104 /* (non-Javadoc)
105 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
106 */
107 @Override
108 public void widgetSelected(SelectionEvent e) {
109 parent.addDerivationEvent(DerivationEvent.NewSimpleInstance(parent, derivate, DerivationEventType.GATHERING_IN_SITU()));
110 derivate.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
111 derivate.getTitleCache(); //update title cache
112 IWorkbenchPart activePart = AbstractUtility.getActivePart();
113 if(activePart instanceof DerivateView){
114 DerivateView derivateView = (DerivateView)activePart;
115 derivateView.changed(derivate);
116 derivateView.viewer.refresh();
117 }
118 }
119
120 /* (non-Javadoc)
121 * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
122 */
123 @Override
124 public void widgetDefaultSelected(SelectionEvent e) {
125 // TODO Auto-generated method stub
126
127 }
128
129 }
130
131 }