d624967e35bc5250814e9984fda9560df78a86fd
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / dataimport / e4 / SaveImportedSpecimenActionE4.java
1 package eu.etaxonomy.taxeditor.view.dataimport.e4;
2
3 import java.net.URI;
4 import java.time.LocalDate;
5 import java.time.format.DateTimeFormatter;
6 import java.util.ArrayList;
7 import java.util.Collection;
8 import java.util.Collections;
9 import java.util.Comparator;
10 import java.util.HashSet;
11 import java.util.List;
12 import java.util.Set;
13
14 import org.eclipse.core.runtime.jobs.Job;
15 import org.eclipse.jface.action.Action;
16 import org.eclipse.swt.widgets.Table;
17 import org.eclipse.swt.widgets.TableItem;
18
19 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
20 import eu.etaxonomy.cdm.api.service.ITermService;
21 import eu.etaxonomy.cdm.ext.occurrence.OccurenceQuery;
22 import eu.etaxonomy.cdm.ext.occurrence.bioCase.BioCaseResponse;
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.GbifResponse;
26 import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
27 import eu.etaxonomy.cdm.io.specimen.gbif.in.GbifImportConfigurator;
28 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
29 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
30 import eu.etaxonomy.taxeditor.store.CdmStore;
31 import eu.etaxonomy.taxeditor.view.dataimport.GbifResponseComparator;
32
33 /**
34 *
35 * @author pplitzner
36 * @since Oct 4, 2017
37 *
38 */
39 public class SaveImportedSpecimenActionE4 extends Action {
40
41 private Comparator<GbifResponse> comparator;
42
43 private DataImportViewE4<?> dataImportView;
44
45 public SaveImportedSpecimenActionE4(DataImportViewE4<?> dataImportView) {
46 super();
47 this.dataImportView = dataImportView;
48 }
49
50 @Override
51 public void run() {
52 Table table = dataImportView.getTable();
53 Collection<GbifResponse> checkedResults = new HashSet<GbifResponse>();
54 Collection<BioCaseResponse> checkedAbcdResults = new HashSet<BioCaseResponse>();
55 Object data;
56 Set<String[]> unitIdsGbif = new HashSet<String[]>();
57 Set<String[]> unitIdsBioCase = new HashSet<String[]>();
58 List<GbifResponse> biocaseResponses = new ArrayList<GbifResponse>();
59
60 for(TableItem item:table.getItems()){
61 if(item.getChecked()){
62 //Save Specimen
63 data = item.getData();
64 if(data instanceof GbifResponse){
65 checkedResults.add((GbifResponse)item.getData());
66 }
67 if(data instanceof BioCaseResponse){
68 checkedAbcdResults.add((BioCaseResponse)data);
69 }
70 }
71 }
72 String[] tripleId ;
73 for (GbifResponse response:checkedResults){
74 if (response != null){
75 tripleId = response.getTripleID();
76
77 if (response.getDataSetProtocol()!=null && response.getDataSetProtocol().equals(GbifDataSetProtocol.BIOCASE)){
78 biocaseResponses.add(response);
79
80 }else{
81 unitIdsGbif.add(tripleId);
82 }
83
84
85 }
86 }
87 Collections.sort(biocaseResponses, getComparator());
88
89 Abcd206ImportConfigurator configuratorAbcd;
90 List<Abcd206ImportConfigurator> abcdConfigurators = new ArrayList<Abcd206ImportConfigurator>();
91 DataSetResponse dataSetResponse;
92 OccurenceQuery bioCaseOccurrenceQuery = null;
93 URI dataSetUri = null;
94 for (BioCaseResponse response:checkedAbcdResults){
95
96 if (!response.getDataSetUri().equals(dataSetUri)){
97 dataSetUri = response.getDataSetUri();
98 //configuratorAbcd = Abcd206ImportConfigurator.NewInstance(null, null);
99 configuratorAbcd = PreferencesUtil.getLastUsedAbcdImportConfigurator();
100 if (configuratorAbcd != null){
101
102 if (configuratorAbcd.getNomenclaturalCode() == null){
103 configuratorAbcd.setNomenclaturalCode(PreferencesUtil.getPreferredNomenclaturalCode());
104 }
105 }else{
106 configuratorAbcd = Abcd206ImportConfigurator.NewInstance(null, null);
107
108 if (configuratorAbcd.getNomenclaturalCode() == null){
109 configuratorAbcd.setNomenclaturalCode(PreferencesUtil.getPreferredNomenclaturalCode());
110 }
111 }
112 configuratorAbcd.setSourceUri(dataSetUri);
113 if (configuratorAbcd.getSourceReference() == null && configuratorAbcd.getSourceRefUuid() == null){
114 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
115 LocalDate localDate = LocalDate.now();
116
117 String sourceRef ="Specimen Import " + localDate.toString();
118 configuratorAbcd.setSourceReferenceTitle(sourceRef);
119 }
120
121 unitIdsBioCase = new HashSet<String[]>();
122 bioCaseOccurrenceQuery = new OccurenceQuery(unitIdsBioCase);
123 configuratorAbcd.setOccurenceQuery(bioCaseOccurrenceQuery);
124
125 // if (dataImportView.getClassification() != null){
126 // configuratorAbcd.setClassificationUuid(dataImportView.getClassification().getUuid());
127 // }
128 // if (dataImportView.getReferenceString() != null){
129 // configuratorAbcd.setSourceReferenceTitle(dataImportView.getReferenceString());
130 // }
131 abcdConfigurators.add(configuratorAbcd);
132
133
134 }
135 tripleId = response.getTripleID();
136 unitIdsBioCase.add(tripleId);
137
138 }
139
140
141 // if (!unitIdsBioCase.isEmpty()){
142 // configuratorAbcd = Abcd206ImportConfigurator.NewInstance(dataSetUri, null, false);
143 // configuratorAbcd.addMediaAsMediaSpecimen(true);
144 // configuratorAbcd.setIgnoreAuthorship(true);
145 // configuratorAbcd.setMoveNewTaxaToDefaultClassification(false);
146 // if (configuratorAbcd != null){
147 // abcdConfigurators.add(configuratorAbcd);
148 // }
149 //// unitIdsBioCase = new HashSet<String[]>();
150 // bioCaseOccurrenceQuery = new OccurenceQuery(unitIdsBioCase);
151 // configuratorAbcd.setOccurenceQuery(bioCaseOccurrenceQuery);
152 // configuratorAbcd.setGetSiblings(true);
153 // if (dataImportView.getClassification() != null){
154 // configuratorAbcd.setClassificationUuid(dataImportView.getClassification().getUuid());
155 // }
156 // }
157
158 // for (GbifResponse response: biocaseResponses){
159 // try {
160 // dataSetResponse = new GbifQueryServiceWrapper().queryOriginalDataSet(response);
161 // dataSetUri = dataSetResponse.getEndpoint();
162 // } catch (ClientProtocolException e) {
163 // // TODO Auto-generated catch block
164 // e.printStackTrace();
165 // } catch (IOException e) {
166 // // TODO Auto-generated catch block
167 // e.printStackTrace();
168 // }
169 // if (!response.getDataSetUri().equals(dataSetUri)){
170 // configuratorAbcd = Abcd206ImportConfigurator.NewInstance(dataSetUri, null, false);
171 // configuratorAbcd.addMediaAsMediaSpecimen(true);
172 // configuratorAbcd.setIgnoreAuthorship(true);
173 // configuratorAbcd.setMoveNewTaxaToDefaultClassification(false);
174 // if (configuratorAbcd != null){
175 // abcdConfigurators.add(configuratorAbcd);
176 // }
177 // unitIdsBioCase = new HashSet<String[]>();
178 // bioCaseOccurrenceQuery = new OccurenceQuery(unitIdsBioCase);
179 // configuratorAbcd.setOccurenceQuery(bioCaseOccurrenceQuery);
180 // configuratorAbcd.setGetSiblings(true);
181 // if (dataImportView.getClassification() != null){
182 // configuratorAbcd.setClassificationUuid(dataImportView.getClassification().getUuid());
183 // }
184 //
185 // }
186 // tripleId = response.getTripleID();
187 // unitIdsBioCase.add(tripleId);
188 // }
189
190
191 // configurator.setQuery(query);
192 if (!checkedAbcdResults.isEmpty()){
193 Job bioCaseJob = CdmStore.getImportManager().createIOServiceJob(abcdConfigurators);
194 CdmStore.getImportManager().run(bioCaseJob);
195 }
196
197 if (!unitIdsGbif.isEmpty()){
198 OccurenceQuery query = new OccurenceQuery(unitIdsGbif);
199 GbifImportConfigurator configurator = GbifImportConfigurator.newInstance(query);
200 configurator.setSourceReferenceTitle("Import Gbif data");
201
202 Job gbifJob = CdmStore.getImportManager().createIOServiceJob(configurator);
203 CdmStore.getImportManager().run(gbifJob);
204 }
205
206 }
207
208 private void persistTerm(DefinedTermBase<?> term, ITermService termService, ConversationHolder conversation){
209 if(term!=null){
210 //if the term does not exist in the DB save it
211 if(termService.find(term.getUuid())==null){
212 termService.saveOrUpdate(term);
213 }
214 }
215 }
216
217 @Override
218 public String getText() {
219 return "Import";
220 }
221
222 private Comparator<GbifResponse> getComparator(){
223 if (comparator == null){
224 comparator = new GbifResponseComparator();
225 }
226 return comparator;
227 }
228
229 }