Merge branch 'develop' into feature/cdm-4.7
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / dataimport / DataImportEditorContextMenu.java
1 package eu.etaxonomy.taxeditor.view.dataimport;
2
3 import java.io.IOException;
4 import java.util.HashSet;
5 import java.util.Set;
6
7 import org.apache.http.client.ClientProtocolException;
8 import org.apache.log4j.Logger;
9 import org.eclipse.jface.action.ContributionItem;
10 import org.eclipse.jface.action.IContributionItem;
11 import org.eclipse.jface.viewers.ISelection;
12 import org.eclipse.jface.viewers.StructuredSelection;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.widgets.Event;
15 import org.eclipse.swt.widgets.Listener;
16 import org.eclipse.swt.widgets.Menu;
17 import org.eclipse.swt.widgets.MenuItem;
18 import org.eclipse.ui.IWorkbenchWindow;
19 import org.eclipse.ui.PlatformUI;
20 import org.eclipse.ui.actions.CompoundContributionItem;
21
22 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
23 import eu.etaxonomy.cdm.ext.occurrence.gbif.DataSetResponse;
24 import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifDataSetProtocol;
25 import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifQueryServiceWrapper;
26 import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifResponse;
27 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
28 import eu.etaxonomy.taxeditor.model.AbstractUtility;
29 import eu.etaxonomy.taxeditor.store.CdmStore;
30
31 public class DataImportEditorContextMenu extends CompoundContributionItem {
32
33 private final Logger logger = Logger.getLogger(DataImportEditorContextMenu.class);
34
35 /* (non-Javadoc)
36 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
37 */
38 @Override
39 protected IContributionItem[] getContributionItems() {
40 IContributionItem[] contributionItems = new IContributionItem[] {
41 new ContributionItem() {
42 @Override
43 public void fill(Menu menu, int index) {
44 final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
45 final Object activeEditor = AbstractUtility.getActiveE4Editor();
46 final ISelection selection = window.getActivePage().getSelection();
47 if(selection instanceof StructuredSelection){
48 final StructuredSelection structuredSelection = (StructuredSelection)selection;
49
50 //Save Specimen
51 MenuItem saveSpecimenItem = new MenuItem(menu, SWT.NONE);
52 saveSpecimenItem.setText("Save Specimen");
53 saveSpecimenItem.addListener(SWT.Selection, new Listener() {
54
55 @Override
56 public void handleEvent(Event event) {
57 if(structuredSelection.iterator().hasNext()){
58 Object next = structuredSelection.iterator().next();
59 if(next instanceof GbifResponse){
60 //unwrap DerivedUnit from GbifResponse
61 next = ((GbifResponse) next).getDerivedUnitFacade().innerDerivedUnit();
62 }
63 if(next instanceof SpecimenOrObservationBase){
64 if(activeEditor instanceof DataImportEditor){
65 DataImportEditor<?> dataImportEditor = (DataImportEditor<?>)activeEditor;
66 CdmStore.getService(IOccurrenceService.class).saveOrUpdate((SpecimenOrObservationBase<?>) next);
67 dataImportEditor.getConversationHolder().commit(true);
68 }
69 }
70 }
71 }
72 });
73
74 //Query original data provider
75 if(structuredSelection.size()==1
76 && structuredSelection.iterator().next() instanceof GbifResponse
77 && ((GbifResponse)structuredSelection.iterator().next()).getDataSetProtocol()!=null
78 && ((GbifResponse)structuredSelection.iterator().next()).getDataSetProtocol()==GbifDataSetProtocol.BIOCASE){
79 final GbifResponse gbifResponse = (GbifResponse)structuredSelection.iterator().next();
80 MenuItem queryOriginalItem = new MenuItem(menu, SWT.NONE);
81 queryOriginalItem.setText("Query original data provider");
82 queryOriginalItem.addListener(SWT.Selection, new Listener() {
83
84 @Override
85 public void handleEvent(Event event) {
86 try{
87 DataSetResponse response = new GbifQueryServiceWrapper().queryOriginalDataSet(gbifResponse);
88 Set<String[]> unitIds = new HashSet<String[]>();
89 String[] tripleId = {response.getUnitId()};
90 unitIds.add(tripleId);
91 /* final BioCaseEditorInput input = new BioCaseEditorInput(new OccurenceQuery(unitIds), response.getEndpoint());
92 // EditorUtil.open(input);
93 Job queryJob = new Job("Querying for original record...") {
94
95 @Override
96 protected IStatus run(IProgressMonitor monitor) {
97 input.query();
98 return Status.OK_STATUS;
99 }
100 };
101 queryJob.schedule();*/
102 } catch (ClientProtocolException e) {
103 logger.error("Query for single record failed.", e);
104 } catch (IOException e) {
105 logger.error("Query for single record failed.", e);
106 }
107 // } catch (PartInitException e) {
108 // logger.error("Could not open editor.", e);
109 // }
110 }
111 });
112 }
113 }
114 }
115 }};
116 return contributionItems;
117 }
118
119 }