Revision e44f328b
Added by Patrick Plitzner over 10 years ago
- implemented context menu functionality (create specimen)
eu.etaxonomy.taxeditor.editor/plugin.xml | ||
---|---|---|
545 | 545 |
<menuContribution |
546 | 546 |
locationURI="popup:eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView"> |
547 | 547 |
<menu |
548 |
label="New"> |
|
548 |
label="New Derivate">
|
|
549 | 549 |
<dynamic |
550 |
class="eu.etaxonomy.taxeditor.bulkeditor.command.DynamicNewObjectMenu"
|
|
551 |
id="eu.etaxonomy.taxeditor.bulkeditor.dynamicNewMenu">
|
|
550 |
class="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu"
|
|
551 |
id="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu">
|
|
552 | 552 |
</dynamic> |
553 | 553 |
<visibleWhen |
554 | 554 |
checkEnabled="true"> |
555 |
<or> |
|
556 |
<reference |
|
557 |
definitionId="isFieldUnit"> |
|
558 |
</reference> |
|
559 |
<reference |
|
560 |
definitionId="isDerivedUnit"> |
|
561 |
</reference> |
|
562 |
</or> |
|
555 |
<reference |
|
556 |
definitionId="isSpecimenOrObservation"> |
|
557 |
</reference> |
|
563 | 558 |
</visibleWhen> |
564 | 559 |
</menu> |
565 |
<separator |
|
566 |
name="eu.etaxonomy.taxeditor.editor.separator1" |
|
567 |
visible="true"> |
|
568 |
</separator> |
|
569 |
<dynamic |
|
570 |
class="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu" |
|
571 |
id="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu"> |
|
572 |
</dynamic> |
|
573 | 560 |
</menuContribution> |
574 | 561 |
|
575 | 562 |
|
... | ... | |
1215 | 1202 |
</with> |
1216 | 1203 |
</definition> |
1217 | 1204 |
<definition |
1218 |
id="isFieldUnit"> |
|
1219 |
<with |
|
1220 |
variable="selection"> |
|
1221 |
<test |
|
1222 |
property="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester.isFieldUnit"> |
|
1223 |
</test> |
|
1224 |
</with> |
|
1225 |
</definition> |
|
1226 |
<definition |
|
1227 |
id="isDerivedUnit"> |
|
1205 |
id="isSpecimenOrObservation"> |
|
1228 | 1206 |
<with |
1229 | 1207 |
variable="selection"> |
1230 | 1208 |
<test |
1231 |
property="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester.isSpecimen"> |
|
1209 |
property="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester.isSpecimenOrObservation">
|
|
1232 | 1210 |
</test> |
1233 | 1211 |
</with> |
1234 | 1212 |
</definition> |
... | ... | |
1260 | 1238 |
class="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester" |
1261 | 1239 |
id="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester" |
1262 | 1240 |
namespace="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester" |
1263 |
properties="isFieldUnit,isSpecimen"
|
|
1241 |
properties="isSpecimenOrObservation"
|
|
1264 | 1242 |
type="org.eclipse.jface.viewers.TreeSelection"> |
1265 | 1243 |
</propertyTester> |
1266 | 1244 |
</extension> |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/CreateDerivateContextMenu.java | ||
---|---|---|
3 | 3 |
import org.eclipse.jface.action.ContributionItem; |
4 | 4 |
import org.eclipse.jface.action.IContributionItem; |
5 | 5 |
import org.eclipse.jface.viewers.ISelection; |
6 |
import org.eclipse.jface.viewers.TreeSelection; |
|
6 | 7 |
import org.eclipse.swt.SWT; |
8 |
import org.eclipse.swt.events.SelectionEvent; |
|
9 |
import org.eclipse.swt.events.SelectionListener; |
|
7 | 10 |
import org.eclipse.swt.widgets.Menu; |
8 | 11 |
import org.eclipse.swt.widgets.MenuItem; |
9 | 12 |
import org.eclipse.ui.IWorkbenchWindow; |
10 | 13 |
import org.eclipse.ui.PlatformUI; |
11 | 14 |
import org.eclipse.ui.actions.CompoundContributionItem; |
15 |
import org.eclipse.ui.handlers.IHandlerService; |
|
12 | 16 |
|
17 |
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; |
|
18 |
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent; |
|
19 |
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType; |
|
13 | 20 |
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; |
14 | 21 |
import eu.etaxonomy.cdm.model.occurrence.FieldUnit; |
22 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType; |
|
23 |
import eu.etaxonomy.taxeditor.editor.EditorUtil; |
|
15 | 24 |
|
16 | 25 |
public class CreateDerivateContextMenu extends CompoundContributionItem { |
17 | 26 |
|
27 |
private final IHandlerService handlerService = (IHandlerService) EditorUtil.getService(IHandlerService.class); |
|
28 |
private final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
|
29 |
private final ISelection selection = window.getActivePage().getSelection(); |
|
30 |
|
|
18 | 31 |
/* (non-Javadoc) |
19 | 32 |
* @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems() |
20 | 33 |
*/ |
... | ... | |
24 | 37 |
new ContributionItem() { |
25 | 38 |
@Override |
26 | 39 |
public void fill(Menu menu, int index) { |
27 |
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
|
28 |
ISelection selection = window.getActivePage().getSelection(); |
|
29 |
MenuItem menuItem = new MenuItem(menu, SWT.None); |
|
30 |
menuItem.setText("menuItem"); |
|
31 |
//selection is intance of TreeSelection |
|
32 |
if(selection instanceof FieldUnit){ |
|
33 |
menuItem.setText("fieldUnit"); |
|
34 |
} |
|
35 |
else if(selection instanceof DerivedUnit){ |
|
36 |
menuItem.setText("derivedUnit"); |
|
40 |
if(selection instanceof TreeSelection){ |
|
41 |
final Object selectedElement = ((TreeSelection) selection).getFirstElement(); |
|
42 |
//context menu for FieldUnit |
|
43 |
if(selectedElement instanceof FieldUnit){ |
|
44 |
MenuItem createSpecimen = new MenuItem(menu, SWT.None); |
|
45 |
createSpecimen.setText("Specimen"); |
|
46 |
createSpecimen.addSelectionListener(new SelectionListener() { |
|
47 |
|
|
48 |
@Override |
|
49 |
public void widgetSelected(SelectionEvent e) { |
|
50 |
FieldUnit fieldUnit = HibernateProxyHelper.deproxy(selectedElement, FieldUnit.class); |
|
51 |
DerivedUnit specimen = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen); |
|
52 |
fieldUnit.addDerivationEvent(DerivationEvent.NewSimpleInstance(fieldUnit, specimen, DerivationEventType.GATHERING_IN_SITU())); |
|
53 |
} |
|
54 |
|
|
55 |
@Override |
|
56 |
public void widgetDefaultSelected(SelectionEvent e) { |
|
57 |
// TODO Auto-generated method stub |
|
58 |
|
|
59 |
} |
|
60 |
}); |
|
61 |
MenuItem createLivingPlantPhoto = new MenuItem(menu, SWT.None); |
|
62 |
createLivingPlantPhoto.setText("Living Plant Photo"); |
|
63 |
} |
|
64 |
//context menu for Specimen |
|
65 |
else if(selectedElement instanceof DerivedUnit && ((DerivedUnit)selectedElement).getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){ |
|
66 |
MenuItem createTissueSample = new MenuItem(menu, SWT.None); |
|
67 |
createTissueSample.setText("Tissue Sample"); |
|
68 |
MenuItem createDNASample = new MenuItem(menu, SWT.None); |
|
69 |
createDNASample.setText("DNA Sample"); |
|
70 |
MenuItem createSpecimenScan = new MenuItem(menu, SWT.None); |
|
71 |
createSpecimenScan.setText("Specimen Scan"); |
|
72 |
MenuItem createArtwork = new MenuItem(menu, SWT.None); |
|
73 |
createArtwork.setText("Artwork"); |
|
74 |
MenuItem createLivingPlantPhoto = new MenuItem(menu, SWT.None); |
|
75 |
createLivingPlantPhoto.setText("Living Plant Photo"); |
|
76 |
} |
|
77 |
else{ |
|
78 |
MenuItem menuItem = new MenuItem(menu, SWT.None); |
|
79 |
menuItem.setText("No child derivates"); |
|
80 |
menuItem.setEnabled(false); |
|
81 |
} |
|
37 | 82 |
} |
38 | 83 |
} |
39 | 84 |
} |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateMenuPropertyTester.java | ||
---|---|---|
3 | 3 |
*/ |
4 | 4 |
package eu.etaxonomy.taxeditor.editor.view.derivate; |
5 | 5 |
|
6 |
import java.util.Arrays; |
|
7 |
|
|
8 | 6 |
import org.eclipse.core.expressions.PropertyTester; |
9 | 7 |
import org.eclipse.jface.viewers.IStructuredSelection; |
10 | 8 |
|
11 |
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; |
|
12 |
import eu.etaxonomy.cdm.model.occurrence.FieldUnit; |
|
9 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; |
|
13 | 10 |
|
14 | 11 |
/** |
15 | 12 |
* Property tester used by the DerivateView tree menu. |
... | ... | |
17 | 14 |
*/ |
18 | 15 |
public class DerivateMenuPropertyTester extends PropertyTester { |
19 | 16 |
|
20 |
private static final String IS_FIELD_UNIT = "isFieldUnit"; |
|
21 |
private static final String IS_SPECIMEN = "isSpecimen"; |
|
17 |
private static final String IS_SPECIMEN_OR_OBSERVATION = "isSpecimenOrObservation"; |
|
22 | 18 |
|
23 | 19 |
/* (non-Javadoc) |
24 | 20 |
* @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object) |
... | ... | |
26 | 22 |
/** {@inheritDoc} */ |
27 | 23 |
@Override |
28 | 24 |
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { |
29 |
System.out.println(receiver.toString() + receiver.getClass().toString()); |
|
30 |
System.out.println(property); |
|
31 |
System.out.println(Arrays.asList(args)); |
|
32 |
System.out.println(expectedValue); |
|
25 |
//TODO: these simple instanceof-checks can be unified in one class because there are several |
|
26 |
// PropertyTesters that do the same, that is just checking which class the selection is of |
|
33 | 27 |
|
34 |
Object[] selectedElements = ((IStructuredSelection) receiver).toArray();
|
|
28 |
Object[] selectedElements = ((IStructuredSelection) receiver).toArray();
|
|
35 | 29 |
|
36 | 30 |
if(selectedElements.length == 0){ |
37 | 31 |
// nothing selected so all tests should fail |
38 | 32 |
return false; |
39 | 33 |
} |
40 | 34 |
|
41 |
if(IS_FIELD_UNIT.equals(property)){ |
|
42 |
return isFieldUnit(selectedElements); |
|
43 |
} |
|
44 |
else if(IS_SPECIMEN.equals(property)){ |
|
45 |
return isSpecimen(selectedElements); |
|
35 |
if(IS_SPECIMEN_OR_OBSERVATION.equals(property)){ |
|
36 |
return isSpecimenOrObservation(selectedElements); |
|
46 | 37 |
} |
47 | 38 |
else{ |
48 | 39 |
return false; |
49 | 40 |
} |
50 | 41 |
} |
51 | 42 |
|
52 |
private boolean isFieldUnit(Object[] selectedElements) { |
|
53 |
for (Object object : selectedElements){ |
|
54 |
if(!(object instanceof FieldUnit)){ |
|
55 |
return false; |
|
56 |
} |
|
57 |
} |
|
58 |
return true; |
|
59 |
} |
|
60 |
|
|
61 |
private boolean isSpecimen(Object[] selectedElements) { |
|
43 |
private boolean isSpecimenOrObservation(Object[] selectedElements) { |
|
62 | 44 |
for (Object object : selectedElements){ |
63 |
if(!(object instanceof DerivedUnit)){
|
|
45 |
if(!(object instanceof SpecimenOrObservationBase)){
|
|
64 | 46 |
return false; |
65 | 47 |
} |
66 | 48 |
} |
67 | 49 |
return true; |
68 | 50 |
} |
51 |
|
|
69 | 52 |
} |
Also available in: Unified diff