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