a2223117700e5a9b5d22487a7969d3a346904146
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / dataimport / SaveImportedSpecimenAction.java
1 package eu.etaxonomy.taxeditor.view.dataimport;
2
3 import java.io.IOException;
4 import java.net.URI;
5 import java.util.ArrayList;
6 import java.util.Collection;
7 import java.util.Collections;
8 import java.util.Comparator;
9 import java.util.HashSet;
10 import java.util.List;
11 import java.util.Set;
12
13 import org.apache.http.client.ClientProtocolException;
14 import org.apache.log4j.Logger;
15 import org.eclipse.core.runtime.jobs.Job;
16 import org.eclipse.jface.action.Action;
17 import org.eclipse.jface.text.source.Annotation;
18 import org.eclipse.swt.widgets.Table;
19 import org.eclipse.swt.widgets.TableItem;
20 import org.eclipse.ui.IWorkbenchPart;
21 import org.eclipse.ui.IWorkbenchWindow;
22 import org.eclipse.ui.PlatformUI;
23
24 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
25 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
26 import eu.etaxonomy.cdm.api.service.ITermService;
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.io.specimen.abcd206.in.Abcd206ImportConfigurator;
33 import eu.etaxonomy.cdm.io.specimen.gbif.in.*;
34 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
35 import eu.etaxonomy.cdm.model.common.ICdmBase;
36 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
37 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
38 import eu.etaxonomy.taxeditor.store.CdmStore;
39
40 public class SaveImportedSpecimenAction extends Action {
41
42 private final Logger logger = Logger.getLogger(SaveImportedSpecimenAction.class);
43
44 private Comparator<GbifResponse> comparator;
45
46 /* (non-Javadoc)
47 * @see org.eclipse.jface.action.Action#run()
48 */
49 @Override
50 public void run() {
51 final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
52 IWorkbenchPart activePart = window.getActivePage().getActivePart();
53 if(activePart instanceof DataImportView<?>){
54 DataImportView<?> dataImportView = (DataImportView<?>)activePart;
55 Table table = dataImportView.getTable();
56 Collection<GbifResponse> checkedResults = new HashSet<GbifResponse>();
57 Object data;
58 Set<String[]> unitIdsGbif = new HashSet<String[]>();
59 Set<String[]> unitIdsBioCase = new HashSet<String[]>();
60 List<GbifResponse> biocaseResponses = new ArrayList<GbifResponse>();
61
62 for(TableItem item:table.getItems()){
63 if(item.getChecked()){
64 //Save Specimen
65 data = item.getData();
66 if(data instanceof GbifResponse){
67 checkedResults.add((GbifResponse)item.getData());
68 }
69 }
70 }
71 String[] tripleId ;
72 for (GbifResponse response:checkedResults){
73 if (response != null){
74 tripleId = response.getTripleID();
75
76 if (response.getDataSetProtocol().equals(GbifDataSetProtocol.BIOCASE)){
77 biocaseResponses.add(response);
78
79 }else{
80 unitIdsGbif.add(tripleId);
81 }
82
83
84 }
85 }
86 Collections.sort(biocaseResponses, getComparator());
87 URI dataSetUri = null;
88 Abcd206ImportConfigurator configuratorAbcd;
89 List<Abcd206ImportConfigurator> abcdConfigurators = new ArrayList<Abcd206ImportConfigurator>();
90 DataSetResponse dataSetResponse;
91 OccurenceQuery bioCaseOccurrenceQuery = null;
92 for (GbifResponse response: biocaseResponses){
93 try {
94 dataSetResponse = new GbifQueryServiceWrapper().queryOriginalDataSet(response);
95 dataSetUri = dataSetResponse.getEndpoint();
96 } catch (ClientProtocolException e) {
97 // TODO Auto-generated catch block
98 e.printStackTrace();
99 } catch (IOException e) {
100 // TODO Auto-generated catch block
101 e.printStackTrace();
102 }
103 if (!response.getDataSetUri().equals(dataSetUri)){
104 configuratorAbcd = Abcd206ImportConfigurator.NewInstance(dataSetUri, null, false);
105 if (configuratorAbcd != null){
106 abcdConfigurators.add(configuratorAbcd);
107 }
108 unitIdsBioCase = new HashSet<String[]>();
109 bioCaseOccurrenceQuery = new OccurenceQuery(unitIdsBioCase);
110 configuratorAbcd.setOccurenceQuery(bioCaseOccurrenceQuery);
111 }
112 tripleId = response.getTripleID();
113 unitIdsBioCase.add(tripleId);
114 }
115
116 OccurenceQuery query = new OccurenceQuery(unitIdsGbif);
117 GbifImportConfigurator configurator = GbifImportConfigurator.newInstance(query);
118 configurator.setSourceReferenceTitle("Import Gbif data");
119
120
121
122 // configurator.setQuery(query);
123
124 Job bioCaseJob = CdmStore.getImportManager().createIOServiceJob(abcdConfigurators);
125 CdmStore.getImportManager().run(bioCaseJob);
126
127 Job gbifJob = CdmStore.getImportManager().createIOServiceJob(configurator);
128 CdmStore.getImportManager().run(gbifJob);
129
130
131
132 }
133 }
134
135
136 private void persistTerm(DefinedTermBase<?> term, ITermService termService, ConversationHolder conversation){
137 if(term!=null){
138 //if the term does not exist in the DB save it
139 if(termService.find(term.getUuid())==null){
140 termService.saveOrUpdate(term);
141 }
142 }
143 }
144
145 /* (non-Javadoc)
146 * @see org.eclipse.jface.action.Action#getText()
147 */
148 @Override
149 public String getText() {
150 return "Import";
151 }
152
153 private Comparator<GbifResponse> getComparator(){
154 if (comparator == null){
155 comparator = new GbifResponseComparator();
156 }
157 return comparator;
158 }
159
160
161 }