1 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
;
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
;
17 import eu
.etaxonomy
.cdm
.api
.facade
.DerivedUnitFacadeCacheStrategy
;
18 import eu
.etaxonomy
.cdm
.model
.molecular
.Amplification
;
19 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
20 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
21 import eu
.etaxonomy
.cdm
.model
.molecular
.SingleRead
;
22 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
23 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEventType
;
24 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
25 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldUnit
;
26 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
27 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
28 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
31 * Context menu for the creation of sub-derivates.
34 public class CreateDerivateContextMenu
extends CompoundContributionItem
{
37 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
40 protected IContributionItem
[] getContributionItems() {
41 IContributionItem
[] contributionItems
= new IContributionItem
[] {
42 new ContributionItem() {
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 FieldUnit fieldUnit
= (FieldUnit
) selectedElement
;
52 createMenuItem(menu
, "Specimen", fieldUnit
, DerivedUnit
.class, SpecimenOrObservationType
.PreservedSpecimen
);
53 new MenuItem(menu
, SWT
.SEPARATOR
);
54 createMenuItem(menu
, "Tissue Sample", fieldUnit
, DerivedUnit
.class, SpecimenOrObservationType
.TissueSample
);
55 createMenuItem(menu
, "DNA Sample", fieldUnit
, DnaSample
.class, SpecimenOrObservationType
.DnaSample
);
56 createMenuItem(menu
, "Specimen Scan", fieldUnit
, DerivedUnit
.class, SpecimenOrObservationType
.StillImage
);
57 createMenuItem(menu
, "Artwork", fieldUnit
, DerivedUnit
.class, SpecimenOrObservationType
.StillImage
);
58 createMenuItem(menu
, "Living Plant Photo", fieldUnit
, DerivedUnit
.class, SpecimenOrObservationType
.StillImage
);
60 //context menu for Specimen
61 else if(selectedElement
instanceof DerivedUnit
&& ((DerivedUnit
)selectedElement
).getRecordBasis()==SpecimenOrObservationType
.PreservedSpecimen
){
62 DerivedUnit derivedUnit
= (DerivedUnit
) selectedElement
;
64 createMenuItem(menu
, "Tissue Sample", derivedUnit
, DerivedUnit
.class, SpecimenOrObservationType
.TissueSample
);
65 createMenuItem(menu
, "DNA Sample", derivedUnit
, DnaSample
.class, SpecimenOrObservationType
.DnaSample
);
66 createMenuItem(menu
, "Specimen Scan", derivedUnit
, DerivedUnit
.class, SpecimenOrObservationType
.StillImage
);
67 createMenuItem(menu
, "Artwork", derivedUnit
, DerivedUnit
.class, SpecimenOrObservationType
.StillImage
);
68 createMenuItem(menu
, "Living Plant Photo", derivedUnit
, DerivedUnit
.class, SpecimenOrObservationType
.StillImage
);
70 //context menu for DnaSample
71 else if(selectedElement
instanceof DnaSample
){
72 DnaSample dnaSample
= (DnaSample
) selectedElement
;
73 createMenuItem(menu
, "Consensus Sequence", dnaSample
, Sequence
.class, null);
74 createMenuItem(menu
, "Amplification", dnaSample
, Amplification
.class, null);
76 //context menu for Amplification
77 else if(selectedElement
instanceof Amplification
){
78 Amplification amplification
= (Amplification
) selectedElement
;
79 createMenuItem(menu
, "Single Read", amplification
, SingleRead
.class, null);
81 //context menu for Sequence
82 else if(selectedElement
instanceof Sequence
){
83 Sequence sequence
= (Sequence
) selectedElement
;
84 createMenuItem(menu
, "Single Read", sequence
, SingleRead
.class, null);
88 MenuItem menuItem
= new MenuItem(menu
, SWT
.None
);
89 menuItem
.setText("No child derivates");
90 menuItem
.setEnabled(false);
95 private void createMenuItem(Menu menu
, String menuLabel
, Object parent
, Class
<?
> childClass
, SpecimenOrObservationType specimenType
) {
96 MenuItem menuItem
= new MenuItem(menu
, SWT
.None
);
97 menuItem
.setText(menuLabel
);
98 menuItem
.addSelectionListener(new WidgetSelectionListener(parent
, childClass
, specimenType
));
103 return contributionItems
;
106 private class WidgetSelectionListener
implements SelectionListener
{
108 private final Object parent
;
109 //TODO: we need a common interface for the generic like e.g. "IDerivateHierarchyNode"
110 private final Class
<?
> childClass
;
111 private final SpecimenOrObservationType specimenType
;
115 * @param specimenType
117 public WidgetSelectionListener(Object parent
, Class
<?
> childClass
, SpecimenOrObservationType specimenType
) {
118 this.parent
= parent
;
119 this.childClass
= childClass
;
120 this.specimenType
= specimenType
;
124 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
127 public void widgetSelected(SelectionEvent e
) {
128 if(parent
instanceof DnaSample
){
129 DnaSample dnaSample
= (DnaSample
)parent
;
130 if(childClass
.equals(Amplification
.class)){
131 Amplification
.NewInstance(dnaSample
);
133 else if(childClass
.equals(Sequence
.class)){
134 dnaSample
.addSequence(Sequence
.NewInstance(""));//why does this not have DnaSample as constructor parameter?
137 else if(parent
instanceof Amplification
){
138 ((Amplification
) parent
).addSingleRead(SingleRead
.NewInstance());
140 else if(parent
instanceof Sequence
){
141 ((Sequence
) parent
).addSingleRead(SingleRead
.NewInstance());
143 else if(parent
instanceof SpecimenOrObservationBase
&& DerivedUnit
.class.isAssignableFrom(childClass
)){
144 SpecimenOrObservationBase
<?
> specimenOrObservationBase
= (SpecimenOrObservationBase
<?
>)parent
;
145 DerivedUnit derivedUnit
;
146 if(childClass
.equals(DnaSample
.class)){
147 derivedUnit
= DnaSample
.NewInstance();
150 derivedUnit
= DerivedUnit
.NewInstance(specimenType
);
152 specimenOrObservationBase
.addDerivationEvent(DerivationEvent
.NewSimpleInstance(specimenOrObservationBase
, derivedUnit
, DerivationEventType
.GATHERING_IN_SITU()));
153 derivedUnit
.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
154 derivedUnit
.getTitleCache(); //update title cache
156 IWorkbenchPart activePart
= AbstractUtility
.getActivePart();
157 if(activePart
instanceof DerivateView
){
158 DerivateView derivateView
= (DerivateView
)activePart
;
159 derivateView
.changed(null);
160 derivateView
.viewer
.refresh();
165 * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
168 public void widgetDefaultSelected(SelectionEvent e
) {
169 // TODO Auto-generated method stub