Project

General

Profile

Download (6.71 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.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.PlatformUI;
23
import org.eclipse.ui.actions.CompoundContributionItem;
24

    
25
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
26
import eu.etaxonomy.cdm.ext.occurrence.OccurenceQuery;
27
import eu.etaxonomy.cdm.ext.occurrence.gbif.DataSetResponse;
28
import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifDataSetProtocol;
29
import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifQueryServiceWrapper;
30
import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifResponse;
31
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
32
import eu.etaxonomy.taxeditor.model.AbstractUtility;
33
import eu.etaxonomy.taxeditor.store.CdmStore;
34

    
35
public class DataImportEditorContextMenu extends CompoundContributionItem {
36

    
37
    private final Logger logger = Logger.getLogger(DataImportEditorContextMenu.class);
38

    
39
    /* (non-Javadoc)
40
     * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
41
     */
42
    @Override
43
    protected IContributionItem[] getContributionItems() {
44
        IContributionItem[] contributionItems = new IContributionItem[] {
45
                new ContributionItem() {
46
                    @Override
47
                    public void fill(Menu menu, int index) {
48
                        final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
49
                        final IEditorPart activeEditor = AbstractUtility.getActiveEditor();
50
                        final ISelection selection = window.getActivePage().getSelection();
51
                        if(selection instanceof StructuredSelection){
52
                            final StructuredSelection structuredSelection = (StructuredSelection)selection;
53

    
54
                            //Save Specimen
55
                            MenuItem saveSpecimenItem = new MenuItem(menu, SWT.NONE);
56
                            saveSpecimenItem.setText("Save Specimen");
57
                            saveSpecimenItem.addListener(SWT.Selection, new Listener() {
58

    
59
                                @Override
60
                                public void handleEvent(Event event) {
61
                                    if(structuredSelection.iterator().hasNext()){
62
                                        Object next = structuredSelection.iterator().next();
63
                                        if(next instanceof GbifResponse){
64
                                            //unwrap DerivedUnit from GbifResponse
65
                                            next = ((GbifResponse) next).getDerivedUnitFacade().innerDerivedUnit();
66
                                        }
67
                                        if(next instanceof SpecimenOrObservationBase){
68
                                            if(activeEditor instanceof DataImportEditor){
69
                                                DataImportEditor<?> dataImportEditor = (DataImportEditor<?>)activeEditor;
70
                                                CdmStore.getService(IOccurrenceService.class).saveOrUpdate((SpecimenOrObservationBase<?>) next);
71
                                                dataImportEditor.getConversationHolder().commit(true);
72
                                            }
73
                                        }
74
                                    }
75
                                }
76
                            });
77

    
78
                            //Query original data provider
79
                            if(structuredSelection.size()==1
80
                                    && structuredSelection.iterator().next() instanceof GbifResponse
81
                                    && ((GbifResponse)structuredSelection.iterator().next()).getDataSetProtocol()!=null
82
                                    && ((GbifResponse)structuredSelection.iterator().next()).getDataSetProtocol()==GbifDataSetProtocol.BIOCASE){
83
                                final GbifResponse gbifResponse = (GbifResponse)structuredSelection.iterator().next();
84
                                MenuItem queryOriginalItem = new MenuItem(menu, SWT.NONE);
85
                                queryOriginalItem.setText("Query original data provider");
86
                                queryOriginalItem.addListener(SWT.Selection, new Listener() {
87

    
88
                                    @Override
89
                                    public void handleEvent(Event event) {
90
                                        try{
91
                                            DataSetResponse response = new GbifQueryServiceWrapper().queryOriginalDataSet(gbifResponse);
92
                                            final BioCaseEditorInput input = new BioCaseEditorInput(new OccurenceQuery(response.getUnitId()), response.getEndpoint());
93
                                           // EditorUtil.open(input);
94
                                            Job queryJob = new Job("Querying for original record...") {
95

    
96
                                                @Override
97
                                                protected IStatus run(IProgressMonitor monitor) {
98
                                                    input.query();
99
                                                    return Status.OK_STATUS;
100
                                                }
101
                                            };
102
                                            queryJob.schedule();
103
                                        } catch (ClientProtocolException e) {
104
                                            logger.error("Query for single record failed.", e);
105
                                        } catch (IOException e) {
106
                                            logger.error("Query for single record failed.", e);
107
                                        }
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
}
(3-3/15)