Project

General

Profile

Download (6.75 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(11-11/16)