99791e0798c60bca84f9fce652f4326aabd2367c
[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 org.apache.log4j.Logger;
4 import org.eclipse.jface.action.Action;
5 import org.eclipse.swt.widgets.Table;
6 import org.eclipse.swt.widgets.TableItem;
7 import org.eclipse.ui.IWorkbenchPart;
8 import org.eclipse.ui.IWorkbenchWindow;
9 import org.eclipse.ui.PlatformUI;
10
11 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
12 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
13 import eu.etaxonomy.cdm.api.service.ITermService;
14 import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifResponse;
15 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
16 import eu.etaxonomy.cdm.model.common.ICdmBase;
17 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
18 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
19 import eu.etaxonomy.taxeditor.store.CdmStore;
20
21 public class SaveImportedSpecimenAction extends Action {
22
23 private final Logger logger = Logger.getLogger(SaveImportedSpecimenAction.class);
24
25 /* (non-Javadoc)
26 * @see org.eclipse.jface.action.Action#run()
27 */
28 @Override
29 public void run() {
30 final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
31 IWorkbenchPart activePart = window.getActivePage().getActivePart();
32 if(activePart instanceof DataImportView<?>){
33 DataImportView<?> dataImportView = (DataImportView<?>)activePart;
34 Table table = dataImportView.getTable();
35 for(TableItem item:table.getItems()){
36 if(item.getChecked()){
37 //Save Specimen
38 Object data = item.getData();
39 if(data instanceof GbifResponse){
40 data = ((GbifResponse) item.getData()).getDerivedUnitFacade().innerFieldUnit();
41 }
42 if(data instanceof SpecimenOrObservationBase){
43 ConversationHolder conversation = dataImportView.getConversationHolder();
44 SpecimenOrObservationBase<?> specimen = (SpecimenOrObservationBase<?>) data;
45 conversation.bind();
46 IOccurrenceService occurrenceService = CdmStore.getService(IOccurrenceService.class);
47 for(ICdmBase cdmEntity:occurrenceService.getNonCascadedAssociatedElements(specimen)){
48 if(cdmEntity instanceof DefinedTermBase){
49 persistTerm((DefinedTermBase<?>) cdmEntity, CdmStore.getService(ITermService.class), conversation);
50 }
51 else if(cdmEntity instanceof TaxonNameBase){
52 //user interaction
53 }
54 }
55 occurrenceService.saveOrUpdate(specimen);
56 dataImportView.getConversationHolder().commit(true);
57 }
58 }
59 }
60 }
61 }
62
63 private void persistTerm(DefinedTermBase<?> term, ITermService termService, ConversationHolder conversation){
64 if(term!=null){
65 //if the term does not exist in the DB save it
66 if(termService.find(term.getUuid())==null){
67 termService.saveOrUpdate(term);
68 }
69 }
70 }
71
72
73 /* (non-Javadoc)
74 * @see org.eclipse.jface.action.Action#getText()
75 */
76 @Override
77 public String getText() {
78 return "Import";
79 }
80
81 }