Project

General

Profile

Download (6.22 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

    
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
                List<Abcd206ImportConfigurator> abcdConfigurators = new ArrayList<Abcd206ImportConfigurator>();
90
                DataSetResponse dataSetResponse;
91
                OccurenceQuery bioCaseOccurrenceQuery = null;
92
                for (GbifResponse response: biocaseResponses){
93
                	try {
94
						dataSetResponse = new GbifQueryServiceWrapper().queryOriginalDataSet(response);
95
						dataSetUri = dataSetResponse.getEndpoint();
96
					} catch (ClientProtocolException e) {
97
						// TODO Auto-generated catch block
98
						e.printStackTrace();
99
					} catch (IOException e) {
100
						// TODO Auto-generated catch block
101
						e.printStackTrace();
102
					}
103
                	if (!response.getDataSetUri().equals(dataSetUri)){
104
                		configuratorAbcd = Abcd206ImportConfigurator.NewInstance(dataSetUri, null, false);
105
                		if (configuratorAbcd != null){
106
                			abcdConfigurators.add(configuratorAbcd);
107
                		}
108
                		unitIdsBioCase = new HashSet<String[]>();
109
                		bioCaseOccurrenceQuery = new OccurenceQuery(unitIdsBioCase);
110
                		configuratorAbcd.setOccurenceQuery(bioCaseOccurrenceQuery);
111
                	}
112
                	tripleId = response.getTripleID();
113
                	unitIdsBioCase.add(tripleId);
114
                }
115
              
116
                OccurenceQuery query = new OccurenceQuery(unitIdsGbif);
117
                GbifImportConfigurator configurator = GbifImportConfigurator.newInstance(query);
118
                configurator.setSourceReferenceTitle("Import Gbif data");
119
                
120
               
121
                
122
                //  configurator.setQuery(query);
123
               
124
               Job bioCaseJob = CdmStore.getImportManager().createIOServiceJob(abcdConfigurators);
125
               CdmStore.getImportManager().run(bioCaseJob);
126
               
127
               Job gbifJob = CdmStore.getImportManager().createIOServiceJob(configurator);
128
               CdmStore.getImportManager().run(gbifJob);
129
               
130
               
131
                
132
            }
133
        }
134
 
135

    
136
    private void persistTerm(DefinedTermBase<?> term, ITermService termService, ConversationHolder conversation){
137
        if(term!=null){
138
            //if the term does not exist in the DB save it
139
            if(termService.find(term.getUuid())==null){
140
                termService.saveOrUpdate(term);
141
            }
142
        }
143
    }
144
     
145
    /* (non-Javadoc)
146
     * @see org.eclipse.jface.action.Action#getText()
147
     */
148
    @Override
149
    public String getText() {
150
        return "Import";
151
    }
152
    
153
    private Comparator<GbifResponse> getComparator(){
154
    	if (comparator == null){
155
    		comparator = new GbifResponseComparator();
156
    	}
157
    	return comparator;
158
    }
159
    
160
    
161
}
(11-11/16)