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