Merge branch 'release/4.3.0'
[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
90 List<Abcd206ImportConfigurator> abcdConfigurators = new ArrayList<Abcd206ImportConfigurator>();
91 DataSetResponse dataSetResponse;
92 OccurenceQuery bioCaseOccurrenceQuery = null;
93 for (GbifResponse response: biocaseResponses){
94 try {
95 dataSetResponse = new GbifQueryServiceWrapper().queryOriginalDataSet(response);
96 dataSetUri = dataSetResponse.getEndpoint();
97 } catch (ClientProtocolException e) {
98 // TODO Auto-generated catch block
99 e.printStackTrace();
100 } catch (IOException e) {
101 // TODO Auto-generated catch block
102 e.printStackTrace();
103 }
104 if (!response.getDataSetUri().equals(dataSetUri)){
105 configuratorAbcd = Abcd206ImportConfigurator.NewInstance(dataSetUri, null, false);
106 configuratorAbcd.addMediaAsMediaSpecimen(true);
107 if (configuratorAbcd != null){
108 abcdConfigurators.add(configuratorAbcd);
109 }
110 unitIdsBioCase = new HashSet<String[]>();
111 bioCaseOccurrenceQuery = new OccurenceQuery(unitIdsBioCase);
112 configuratorAbcd.setOccurenceQuery(bioCaseOccurrenceQuery);
113 }
114 tripleId = response.getTripleID();
115 unitIdsBioCase.add(tripleId);
116 }
117
118 OccurenceQuery query = new OccurenceQuery(unitIdsGbif);
119 GbifImportConfigurator configurator = GbifImportConfigurator.newInstance(query);
120 configurator.setSourceReferenceTitle("Import Gbif data");
121
122
123
124 // configurator.setQuery(query);
125
126 Job bioCaseJob = CdmStore.getImportManager().createIOServiceJob(abcdConfigurators);
127 CdmStore.getImportManager().run(bioCaseJob);
128
129 Job gbifJob = CdmStore.getImportManager().createIOServiceJob(configurator);
130 CdmStore.getImportManager().run(gbifJob);
131
132
133
134 }
135 }
136
137
138 private void persistTerm(DefinedTermBase<?> term, ITermService termService, ConversationHolder conversation){
139 if(term!=null){
140 //if the term does not exist in the DB save it
141 if(termService.find(term.getUuid())==null){
142 termService.saveOrUpdate(term);
143 }
144 }
145 }
146
147 /* (non-Javadoc)
148 * @see org.eclipse.jface.action.Action#getText()
149 */
150 @Override
151 public String getText() {
152 return "Import";
153 }
154
155 private Comparator<GbifResponse> getComparator(){
156 if (comparator == null){
157 comparator = new GbifResponseComparator();
158 }
159 return comparator;
160 }
161
162
163 }