Merge branch 'develop' into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / dataimport / SpecimenSearchWizard.java
1 /**
2 * Copyright (C) 2013 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.view.dataimport;
10
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.net.URI;
14
15 import org.apache.log4j.Logger;
16 import org.eclipse.core.runtime.IProgressMonitor;
17 import org.eclipse.core.runtime.IStatus;
18 import org.eclipse.core.runtime.Status;
19 import org.eclipse.core.runtime.jobs.Job;
20 import org.eclipse.jface.viewers.IStructuredSelection;
21 import org.eclipse.jface.wizard.Wizard;
22 import org.eclipse.swt.widgets.Display;
23 import org.eclipse.ui.IImportWizard;
24 import org.eclipse.ui.IWorkbench;
25 import org.eclipse.ui.IWorkbenchPage;
26 import org.eclipse.ui.IWorkbenchWindow;
27 import org.eclipse.ui.PartInitException;
28 import org.eclipse.ui.PlatformUI;
29 import org.w3c.dom.NodeList;
30
31 import eu.etaxonomy.cdm.database.DbSchemaValidation;
32 import eu.etaxonomy.cdm.ext.common.ServiceWrapperBase;
33 import eu.etaxonomy.cdm.ext.occurrence.OccurenceQuery;
34 import eu.etaxonomy.cdm.ext.occurrence.bioCase.BioCaseQueryServiceWrapper;
35 import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
36
37 import eu.etaxonomy.cdm.io.specimen.abcd206.in.AbcdParseUtility;
38 import eu.etaxonomy.cdm.io.specimen.abcd206.in.SpecimenImportReport;
39 import eu.etaxonomy.cdm.io.specimen.abcd206.in.UnitAssociationWrapper;
40 import eu.etaxonomy.taxeditor.store.CdmStore;
41
42 /**
43 * Wizard for querying specimen provider.
44 * @author pplitzner
45 * @date 11.09.2013
46 *
47 */
48 public class SpecimenSearchWizard extends Wizard implements IImportWizard {
49 private static final Logger logger = Logger.getLogger(SpecimenSearchWizard.class);
50
51 private OccurenceQuery query = null;
52 private SpecimenProviderSelectionWizardPage providerSelectionPage;
53 private SpecimenSearchWizardPage searchPage;
54
55 /**
56 * Creates a new SpecimenSearchWizard
57 */
58 public SpecimenSearchWizard() {
59 //default constructor needed for RCP extension points
60
61 //check if connected to a data source. If not this will open an error dialog
62 CdmStore.getCurrentApplicationConfiguration();
63 this.setWindowTitle("Search Specimens");
64 }
65
66
67 /* (non-Javadoc)
68 * @see org.eclipse.jface.wizard.Wizard#performFinish()
69 */
70 @Override
71 public boolean performFinish() {
72 searchPage.getController().saveLastSate();
73 providerSelectionPage.getController().saveLastState();
74 ServiceWrapperBase serviceWrapper;
75 DataImportView<?> dataImportView = null;
76 query = searchPage.getQuery();
77 Abcd206ImportConfigurator configurator = CdmStore.getImportManager().AbcdConfigurator();
78 configurator.setOccurenceQuery(query);
79 configurator.setSourceUri(providerSelectionPage.getEndPoint());
80 configurator.setAddMediaAsMediaSpecimen(true);
81 configurator.setDbSchemaValidation(DbSchemaValidation.CREATE);
82 configurator.setIgnoreAuthorship(true);
83
84 //Job job = CdmStore.getImportManager().createIOServiceJob(configurator, new File(source), SOURCE_TYPE.INPUTSTREAM);
85 //CdmStore.getImportManager().run(job);
86 try {
87 serviceWrapper = providerSelectionPage.getQueryServiceWrapper();
88 InputStream stream = null;
89
90 final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
91 IWorkbenchPage activePart = window.getActivePage();
92 if (providerSelectionPage.getQueryType().equals(QueryType.BIOCASE)){
93 stream =((BioCaseQueryServiceWrapper) serviceWrapper).query(query, configurator.getSourceUri());
94 SpecimenImportReport report = new SpecimenImportReport();
95 UnitAssociationWrapper unitNodesList = AbcdParseUtility.parseUnitsNodeList(stream, report);
96 NodeList nodeList = unitNodesList.getAssociatedUnits();
97 String prefix = unitNodesList.getPrefix();
98 String associationType = unitNodesList.getAssociationType();
99 URI uri =AbcdParseUtility.parseFirstUri(nodeList, report);
100 String content = AbcdParseUtility.parseFirstTextContent(nodeList);
101 System.out.println(content);
102
103
104 SpecimenImportView specimenImportView = new SpecimenImportView();
105 try {
106 specimenImportView = (SpecimenImportView) activePart.showView(SpecimenImportView.ID);
107 specimenImportView.setEndpoint(providerSelectionPage.getEndPoint());
108 specimenImportView.setQuery(query);
109 dataImportView = specimenImportView;
110 } catch (PartInitException e) {
111 // TODO Auto-generated catch block
112 e.printStackTrace();
113
114 }
115
116 } else{
117 try {
118
119 dataImportView = (GbifResponseImportView) activePart.showView(GbifResponseImportView.ID, "query_"+query.toString().replaceAll(",", ""), IWorkbenchPage.VIEW_ACTIVATE);
120 dataImportView.setQuery(query);
121 // (GbifResponseImportView) activePart.showView(GbifResponseImportView.ID);getWorkbench().getActiveWorkbenchWindow().getActivePage()
122 // .showView(GbifResponseImportView.ID, "query_"+query.toString().replaceAll(",", ""),IWorkbenchPage.VIEW_ACTIVATE);
123
124 } catch (PartInitException e) {
125 // TODO Auto-generated catch block
126 e.printStackTrace();
127 }
128
129 }
130
131
132 } catch (IOException e) {
133 // TODO Auto-generated catch block
134 e.printStackTrace();
135 }
136 // CdmStore.getImportManager().run(configurator);
137
138 // try {
139 // switch (providerSelectionPage.getQueryType()) {
140 // case BIOCASE:
141 // SpecimenImportView specimenImportView = (SpecimenImportView) TaxeditorEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage()
142 // .showView(SpecimenImportView.ID, "query_"+query.toString().replaceAll(",", ""),IWorkbenchPage.VIEW_ACTIVATE);
143 // specimenImportView.setEndpoint(providerSelectionPage.getEndPoint());
144 // dataImportView = specimenImportView;
145 // break;
146 // case GBIF:
147 // dataImportView = (GbifResponseImportView) TaxeditorEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage()
148 // .showView(GbifResponseImportView.ID, "query_"+query.toString().replaceAll(",", ""),IWorkbenchPage.VIEW_ACTIVATE);
149 // break;
150 // }
151 // } catch ( PartInitException e ) {
152 // logger.error("Could not open import view for query: " + query.toString(), e);
153 // }
154 // if(dataImportView!=null){
155 // dataImportView.setQuery(query);
156 //// dataImportView.query();
157 //// Display.getDefault().asyncExec(new Runnable() {
158 ////
159 //// @Override
160 //// public void run() {
161 //// CdmStore.getContextManager().notifyContextRefresh();
162 //// }
163 //// });
164 Job queryJob = new QueryJob("Query specimen provider", dataImportView);
165 queryJob.schedule();
166
167 return true;
168 }
169
170 /* (non-Javadoc)
171 * @see org.eclipse.jface.wizard.Wizard#addPages()
172 */
173 @Override
174 public void addPages() {
175 addPage(providerSelectionPage);
176 addPage(searchPage);
177 }
178
179 /* (non-Javadoc)
180 * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
181 */
182 @Override
183 public void init(IWorkbench workbench, IStructuredSelection selection) {
184 providerSelectionPage = new SpecimenProviderSelectionWizardPage("Select specimen provider");
185 searchPage = new SpecimenSearchWizardPage("Specimen Search");
186 }
187
188 private class QueryJob extends Job{
189
190 private final DataImportView<?> view;
191
192 /**
193 * @param name
194 */
195 public QueryJob(String name, DataImportView<?> view) {
196 super(name);
197 this.view = view;
198 }
199
200 /* (non-Javadoc)
201 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
202 */
203 @Override
204 protected IStatus run(IProgressMonitor monitor) {
205 view.getConversationHolder().bind();
206 view.query();
207 Display.getDefault().asyncExec(new Runnable() {
208
209 @Override
210 public void run() {
211 CdmStore.getContextManager().notifyContextRefresh();
212 }
213 });
214 return Status.OK_STATUS;
215 }
216
217 }
218 }