1 package eu
.etaxonomy
.taxeditor
.view
.dataimport
;
3 import java
.io
.IOException
;
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
;
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
;
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
;
40 public class SaveImportedSpecimenAction
extends Action
{
42 private final Logger logger
= Logger
.getLogger(SaveImportedSpecimenAction
.class);
44 private Comparator
<GbifResponse
> comparator
;
47 * @see org.eclipse.jface.action.Action#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
>();
58 Set
<String
[]> unitIdsGbif
= new HashSet
<String
[]>();
59 Set
<String
[]> unitIdsBioCase
= new HashSet
<String
[]>();
60 List
<GbifResponse
> biocaseResponses
= new ArrayList
<GbifResponse
>();
62 for(TableItem item
:table
.getItems()){
63 if(item
.getChecked()){
65 data
= item
.getData();
66 if(data
instanceof GbifResponse
){
67 checkedResults
.add((GbifResponse
)item
.getData());
72 for (GbifResponse response
:checkedResults
){
73 if (response
!= null){
74 tripleId
= response
.getTripleID();
76 if (response
.getDataSetProtocol().equals(GbifDataSetProtocol
.BIOCASE
)){
77 biocaseResponses
.add(response
);
80 unitIdsGbif
.add(tripleId
);
86 Collections
.sort(biocaseResponses
, getComparator());
87 URI dataSetUri
= null;
88 Abcd206ImportConfigurator configuratorAbcd
;
90 List
<Abcd206ImportConfigurator
> abcdConfigurators
= new ArrayList
<Abcd206ImportConfigurator
>();
91 DataSetResponse dataSetResponse
;
92 OccurenceQuery bioCaseOccurrenceQuery
= null;
93 for (GbifResponse response
: biocaseResponses
){
95 dataSetResponse
= new GbifQueryServiceWrapper().queryOriginalDataSet(response
);
96 dataSetUri
= dataSetResponse
.getEndpoint();
97 } catch (ClientProtocolException e
) {
98 // TODO Auto-generated catch block
100 } catch (IOException e
) {
101 // TODO Auto-generated catch block
104 if (!response
.getDataSetUri().equals(dataSetUri
)){
105 configuratorAbcd
= Abcd206ImportConfigurator
.NewInstance(dataSetUri
, null, false);
106 configuratorAbcd
.addMediaAsMediaSpecimen(true);
107 if (configuratorAbcd
!= null){
108 abcdConfigurators
.add(configuratorAbcd
);
110 unitIdsBioCase
= new HashSet
<String
[]>();
111 bioCaseOccurrenceQuery
= new OccurenceQuery(unitIdsBioCase
);
112 configuratorAbcd
.setOccurenceQuery(bioCaseOccurrenceQuery
);
114 tripleId
= response
.getTripleID();
115 unitIdsBioCase
.add(tripleId
);
118 OccurenceQuery query
= new OccurenceQuery(unitIdsGbif
);
119 GbifImportConfigurator configurator
= GbifImportConfigurator
.newInstance(query
);
120 configurator
.setSourceReferenceTitle("Import Gbif data");
124 // configurator.setQuery(query);
126 Job bioCaseJob
= CdmStore
.getImportManager().createIOServiceJob(abcdConfigurators
);
127 CdmStore
.getImportManager().run(bioCaseJob
);
129 Job gbifJob
= CdmStore
.getImportManager().createIOServiceJob(configurator
);
130 CdmStore
.getImportManager().run(gbifJob
);
138 private void persistTerm(DefinedTermBase
<?
> term
, ITermService termService
, ConversationHolder conversation
){
140 //if the term does not exist in the DB save it
141 if(termService
.find(term
.getUuid())==null){
142 termService
.saveOrUpdate(term
);
148 * @see org.eclipse.jface.action.Action#getText()
151 public String
getText() {
155 private Comparator
<GbifResponse
> getComparator(){
156 if (comparator
== null){
157 comparator
= new GbifResponseComparator();