Project

General

Profile

Download (9.68 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.view.dataimport.e4;
2

    
3
import java.net.URI;
4
import java.util.ArrayList;
5
import java.util.Collection;
6
import java.util.Collections;
7
import java.util.Comparator;
8
import java.util.HashSet;
9
import java.util.List;
10
import java.util.Set;
11

    
12
import org.apache.commons.lang.StringUtils;
13
import org.eclipse.core.runtime.jobs.Job;
14
import org.eclipse.jface.action.Action;
15
import org.eclipse.swt.widgets.Table;
16
import org.eclipse.swt.widgets.TableItem;
17

    
18
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
19
import eu.etaxonomy.cdm.api.service.ITermService;
20
import eu.etaxonomy.cdm.ext.occurrence.OccurenceQuery;
21
import eu.etaxonomy.cdm.ext.occurrence.bioCase.BioCaseResponse;
22
import eu.etaxonomy.cdm.ext.occurrence.gbif.DataSetResponse;
23
import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifDataSetProtocol;
24
import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifResponse;
25
import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
26
import eu.etaxonomy.cdm.io.specimen.gbif.in.GbifImportConfigurator;
27
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
28
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
29
import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
30
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
31
import eu.etaxonomy.taxeditor.store.CdmStore;
32
import eu.etaxonomy.taxeditor.view.dataimport.GbifResponseComparator;
33

    
34
/**
35
 *
36
 * @author pplitzner
37
 * @since Oct 4, 2017
38
 *
39
 */
40
public class SaveImportedSpecimenActionE4 extends Action {
41

    
42
    private Comparator<GbifResponse> comparator;
43

    
44
    private DataImportViewE4<?> dataImportView;
45

    
46
    public SaveImportedSpecimenActionE4(DataImportViewE4<?> dataImportView) {
47
        super();
48
        this.dataImportView = dataImportView;
49
    }
50

    
51
    @Override
52
    public void run() {
53
        Table table = dataImportView.getTable();
54
        Collection<GbifResponse> checkedResults = new HashSet<GbifResponse>();
55
        Collection<BioCaseResponse> checkedAbcdResults = new HashSet<BioCaseResponse>();
56
        Object data;
57
        Set<String[]> unitIdsGbif = new HashSet<String[]>();
58
        Set<String[]> unitIdsBioCase = new HashSet<String[]>();
59
        List<GbifResponse> biocaseResponses = new ArrayList<GbifResponse>();
60

    
61
        for(TableItem item:table.getItems()){
62
            if(item.getChecked()){
63
                //Save Specimen
64
                data = item.getData();
65
                if(data instanceof GbifResponse){
66
                    checkedResults.add((GbifResponse)item.getData());
67
                }
68
                if(data instanceof BioCaseResponse){
69
                    checkedAbcdResults.add((BioCaseResponse)data);
70
                }
71
            }
72
        }
73
        String[] tripleId ;
74
        for (GbifResponse response:checkedResults){
75
            if (response != null){
76
                tripleId = response.getTripleID();
77

    
78
                if (response.getDataSetProtocol()!=null && response.getDataSetProtocol().equals(GbifDataSetProtocol.BIOCASE)){
79
                    biocaseResponses.add(response);
80

    
81
                }else{
82
                    unitIdsGbif.add(tripleId);
83
                }
84

    
85

    
86
            }
87
        }
88
        Collections.sort(biocaseResponses, getComparator());
89

    
90
        Abcd206ImportConfigurator configuratorAbcd;
91
        List<Abcd206ImportConfigurator> abcdConfigurators = new ArrayList<Abcd206ImportConfigurator>();
92
        DataSetResponse dataSetResponse;
93
        OccurenceQuery bioCaseOccurrenceQuery = null;
94
        URI dataSetUri = null;
95
        for (BioCaseResponse response:checkedAbcdResults){
96

    
97
            if (!response.getDataSetUri().equals(dataSetUri)){
98
                dataSetUri = response.getDataSetUri();
99
                configuratorAbcd = Abcd206ImportConfigurator.NewInstance(null, null);
100
                String configString = PreferencesUtil.getStringValue(IPreferenceKeys.LAST_USED_ABCD_CONFIG);
101
                if (StringUtils.isBlank(configString)){
102
                    configString = PreferencesUtil.getStringValue(PreferencePredicate.AbcdImportConfig.getKey(), false);
103
                    PreferencesUtil.extractAbcdConfiguratorFromPreferenceString(configuratorAbcd, configString);
104
                    if (configuratorAbcd.getNomenclaturalCode() == null){
105
                        configuratorAbcd.setNomenclaturalCode(PreferencesUtil.getPreferredNomenclaturalCode());
106
                    }
107
                }else{
108
                    configuratorAbcd = Abcd206ImportConfigurator.NewInstance(null, null);
109
                    PreferencesUtil.extractAbcdConfiguratorFromPreferenceString(configuratorAbcd, configString);
110
                    if (configuratorAbcd.getNomenclaturalCode() == null){
111
                        configuratorAbcd.setNomenclaturalCode(PreferencesUtil.getPreferredNomenclaturalCode());
112
                    }
113
                }
114
                configuratorAbcd.setSourceUri(dataSetUri);
115

    
116

    
117
                unitIdsBioCase = new HashSet<String[]>();
118
                bioCaseOccurrenceQuery = new OccurenceQuery(unitIdsBioCase);
119
                configuratorAbcd.setOccurenceQuery(bioCaseOccurrenceQuery);
120

    
121
                if (dataImportView.getClassification() != null){
122
                    configuratorAbcd.setClassificationUuid(dataImportView.getClassification().getUuid());
123
                }
124
                if (dataImportView.getReferenceString() != null){
125
                    configuratorAbcd.setSourceReferenceTitle(dataImportView.getReferenceString());
126
                }
127
                abcdConfigurators.add(configuratorAbcd);
128

    
129

    
130
            }
131
            tripleId = response.getTripleID();
132
            unitIdsBioCase.add(tripleId);
133

    
134
        }
135

    
136

    
137
        //                if (!unitIdsBioCase.isEmpty()){
138
        //                    configuratorAbcd = Abcd206ImportConfigurator.NewInstance(dataSetUri, null, false);
139
        //                    configuratorAbcd.addMediaAsMediaSpecimen(true);
140
        //                    configuratorAbcd.setIgnoreAuthorship(true);
141
        //                    configuratorAbcd.setMoveNewTaxaToDefaultClassification(false);
142
        //                    if (configuratorAbcd != null){
143
        //                        abcdConfigurators.add(configuratorAbcd);
144
        //                    }
145
        ////                    unitIdsBioCase = new HashSet<String[]>();
146
        //                    bioCaseOccurrenceQuery = new OccurenceQuery(unitIdsBioCase);
147
        //                    configuratorAbcd.setOccurenceQuery(bioCaseOccurrenceQuery);
148
        //                    configuratorAbcd.setGetSiblings(true);
149
        //                    if (dataImportView.getClassification() != null){
150
        //                        configuratorAbcd.setClassificationUuid(dataImportView.getClassification().getUuid());
151
        //                    }
152
        //                }
153

    
154
        //                for (GbifResponse response: biocaseResponses){
155
        //                	try {
156
        //						dataSetResponse = new GbifQueryServiceWrapper().queryOriginalDataSet(response);
157
        //						dataSetUri = dataSetResponse.getEndpoint();
158
        //					} catch (ClientProtocolException e) {
159
        //						// TODO Auto-generated catch block
160
        //						e.printStackTrace();
161
        //					} catch (IOException e) {
162
        //						// TODO Auto-generated catch block
163
        //						e.printStackTrace();
164
        //					}
165
        //                	if (!response.getDataSetUri().equals(dataSetUri)){
166
        //                		configuratorAbcd = Abcd206ImportConfigurator.NewInstance(dataSetUri, null, false);
167
        //                		configuratorAbcd.addMediaAsMediaSpecimen(true);
168
        //                		configuratorAbcd.setIgnoreAuthorship(true);
169
        //                		configuratorAbcd.setMoveNewTaxaToDefaultClassification(false);
170
        //                		if (configuratorAbcd != null){
171
        //                			abcdConfigurators.add(configuratorAbcd);
172
        //                		}
173
        //                		unitIdsBioCase = new HashSet<String[]>();
174
        //                		bioCaseOccurrenceQuery = new OccurenceQuery(unitIdsBioCase);
175
        //                		configuratorAbcd.setOccurenceQuery(bioCaseOccurrenceQuery);
176
        //                		configuratorAbcd.setGetSiblings(true);
177
        //                		if (dataImportView.getClassification() != null){
178
        //                			configuratorAbcd.setClassificationUuid(dataImportView.getClassification().getUuid());
179
        //                		}
180
        //
181
        //                	}
182
        //                	tripleId = response.getTripleID();
183
        //                	unitIdsBioCase.add(tripleId);
184
        //                }
185

    
186

    
187
        //  configurator.setQuery(query);
188
        if (!checkedAbcdResults.isEmpty()){
189
            Job bioCaseJob = CdmStore.getImportManager().createIOServiceJob(abcdConfigurators);
190
            CdmStore.getImportManager().run(bioCaseJob);
191
        }
192

    
193
        if (!unitIdsGbif.isEmpty()){
194
            OccurenceQuery query = new OccurenceQuery(unitIdsGbif);
195
            GbifImportConfigurator configurator = GbifImportConfigurator.newInstance(query);
196
            configurator.setSourceReferenceTitle("Import Gbif data");
197

    
198
            Job gbifJob = CdmStore.getImportManager().createIOServiceJob(configurator);
199
            CdmStore.getImportManager().run(gbifJob);
200
        }
201

    
202
    }
203

    
204
    private void persistTerm(DefinedTermBase<?> term, ITermService termService, ConversationHolder conversation){
205
        if(term!=null){
206
            //if the term does not exist in the DB save it
207
            if(termService.find(term.getUuid())==null){
208
                termService.saveOrUpdate(term);
209
            }
210
        }
211
    }
212

    
213
    @Override
214
    public String getText() {
215
        return "Import";
216
    }
217

    
218
    private Comparator<GbifResponse> getComparator(){
219
        if (comparator == null){
220
            comparator = new GbifResponseComparator();
221
        }
222
        return comparator;
223
    }
224

    
225
}
(3-3/7)