minor changes in l10n files and ExportToFileWizardPage
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / io / wizard / ExportToFileDestinationWizardPage.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The content 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
10 package eu.etaxonomy.taxeditor.io.wizard;
11
12 import java.text.SimpleDateFormat;
13 import java.util.Calendar;
14 import java.util.Collections;
15 import java.util.Comparator;
16 import java.util.List;
17 import java.util.UUID;
18
19 import org.eclipse.jface.wizard.WizardPage;
20 import org.eclipse.swt.SWT;
21 import org.eclipse.swt.events.SelectionAdapter;
22 import org.eclipse.swt.events.SelectionEvent;
23 import org.eclipse.swt.events.SelectionListener;
24 import org.eclipse.swt.layout.GridData;
25 import org.eclipse.swt.layout.GridLayout;
26 import org.eclipse.swt.widgets.Button;
27 import org.eclipse.swt.widgets.Combo;
28 import org.eclipse.swt.widgets.Composite;
29 import org.eclipse.swt.widgets.DirectoryDialog;
30 import org.eclipse.swt.widgets.Event;
31 import org.eclipse.swt.widgets.Label;
32 import org.eclipse.swt.widgets.Listener;
33 import org.eclipse.swt.widgets.Text;
34
35 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
36 import eu.etaxonomy.cdm.api.service.IClassificationService;
37 import eu.etaxonomy.cdm.io.cdmLight.CdmLightExportConfigurator;
38 import eu.etaxonomy.cdm.io.common.ExportConfiguratorBase;
39 import eu.etaxonomy.cdm.io.csv.caryophyllales.out.CsvNameExportConfigurator;
40 import eu.etaxonomy.cdm.io.csv.redlist.demo.CsvDemoExportConfigurator;
41 import eu.etaxonomy.cdm.io.dwca.out.DwcaTaxExportConfigurator;
42 import eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator;
43 import eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator;
44 import eu.etaxonomy.cdm.io.tcsxml.out.TcsXmlExportConfigurator;
45 import eu.etaxonomy.cdm.model.taxon.Classification;
46 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
47 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
48 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
49 import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSourceException;
50 import eu.etaxonomy.taxeditor.store.CdmStore;
51
52 /**
53 * <p>
54 * ExportToFileDestinationWizardPage class.
55 * </p>
56 *
57 * @author n.hoffmann
58 * @created 15.06.2009
59 * @version 1.0
60 */
61 public class ExportToFileDestinationWizardPage extends WizardPage implements SelectionListener {
62
63 /** Constant <code>DATE_FORMAT_NOW="yyyyMMddHHmm"</code> */
64 public static final String DATE_FORMAT_NOW = "yyyyMMddHHmm";
65
66 /** Constant <code>JAXB_EXPORT="JAXB_EXPORT"</code> */
67 public static final String JAXB_EXPORT = "JAXB_EXPORT";
68
69 /** Constant <code>TCS_EXPORT="TCS_EXPORT"</code> */
70 public static final String TCS_EXPORT = "TCS_EXPORT";
71
72 /** Constant <code>SDD_EXPORT="SDD_EXPORT"</code> */
73 public static final String SDD_EXPORT = "SDD_EXPORT";
74
75 public static final String DWCA_EXPORT = "DWCA_EXPORT";
76 public static final String OUTPUT_MODEL_EXPORT = "CDM_LIGHT(CSV)";
77 public static final String CSV_EXPORT = "CSV_EXPORT";
78 public static final String CSV_NAME_EXPORT = "CSV_NAME_EXPORT";
79 private static final String CSV_PRINT_EXPORT ="CSV_PRINT_EXPORT";
80 private static final String EXPORT_FOLDER ="EXPORT_FOLDER";
81 public static final String XML = "xml";
82
83 public static final String CSV = "csv";
84
85 public static final String ZIP = "zip";
86
87 private boolean csvExport = false;
88
89 private boolean csvNameExport = false;
90
91 private boolean csvPrintExport = false;
92
93 private boolean outputModelExport = false;
94 private boolean dwcaExport = false;
95
96 private DirectoryDialog folderDialog;
97 private Text text_exportFileName;
98
99 private Text text_folder;
100
101 private final String type;
102
103 private final String extension;
104
105 private Combo classificationSelectionCombo;
106
107 private List<Classification> classifications;
108
109 private Classification selectedClassification;
110
111 private Label classificationLabel;
112
113 private ExportConfiguratorBase configurator;
114 private Button checkUseSelectedtaxonNode;
115
116 private Button checkUseSelectedClassification;
117
118 protected ExportToFileDestinationWizardPage(String pageName, String type,
119 String title, String description, String extension, ExportConfiguratorBase configurator) {
120 super(pageName);
121 this.configurator = configurator;
122 this.type = type;
123 switch(type) {
124 case CSV_EXPORT :
125 csvExport = true;
126 break;
127 case CSV_NAME_EXPORT:
128 csvNameExport = true;
129 break;
130 case OUTPUT_MODEL_EXPORT:
131 outputModelExport = true;
132 break;
133 case CSV_PRINT_EXPORT:
134 csvPrintExport = true;
135 break;
136 case DWCA_EXPORT:
137 dwcaExport = true;
138 break;
139
140 }
141 this.extension = extension;
142 this.setTitle(title);
143 this.setDescription(description);
144 }
145
146 public static ExportToFileDestinationWizardPage Jaxb(JaxbExportConfigurator configurator) {
147 return new ExportToFileDestinationWizardPage(
148 JAXB_EXPORT,
149 "jaxb",
150 "JAXB Export",
151 "Exports the content of the currently selected database into the cdm jaxb format.",
152 XML, configurator);
153 }
154
155 public static ExportToFileDestinationWizardPage Tcs(TcsXmlExportConfigurator config) {
156 return new ExportToFileDestinationWizardPage(
157 TCS_EXPORT,
158 "tcs",
159 "Tcs Export",
160 "Export the content of the currently selected database into TCS format.",
161 XML, config);
162 }
163
164 public static ExportToFileDestinationWizardPage Sdd(SDDExportConfigurator config) {
165 return new ExportToFileDestinationWizardPage(
166 SDD_EXPORT,
167 "sdd",
168 "Sdd Export",
169 "Export the content of the currently selected database into SDD format.",
170 XML, config);
171 }
172
173 public static ExportToFileDestinationWizardPage Dwca(DwcaTaxExportConfigurator config) {
174 return new ExportToFileDestinationWizardPage(
175 DWCA_EXPORT,
176 DWCA_EXPORT,
177 "DwC-Archive Export",
178 "Export the content of the currently selected database into Darwin Core Archive format.",
179 ZIP, config);
180 }
181
182 public static ExportToFileDestinationWizardPage OutputModel(CdmLightExportConfigurator config) {
183
184 return new ExportToFileDestinationWizardPage(
185 OUTPUT_MODEL_EXPORT,
186 OUTPUT_MODEL_EXPORT,
187 "CDM Light Export (csv)",
188 "Export the content of the currently selected database into the CDM light (csv) format.",
189 CSV,config);
190 }
191
192 public static ExportToFileDestinationWizardPage Csv(CsvDemoExportConfigurator config) {
193
194 return new ExportToFileDestinationWizardPage(
195 CSV_EXPORT,
196 CSV_EXPORT,
197 "CSV Export",
198 "Export the content of the currently selected database into Comma Separated Value format.",
199 CSV, config);
200 }
201
202 public static ExportToFileDestinationWizardPage CsvNames(CsvNameExportConfigurator config) {
203
204 return new ExportToFileDestinationWizardPage(
205 CSV_NAME_EXPORT,
206 CSV_NAME_EXPORT,
207 "CSV Name Export",
208 "Export the names of the currently selected database into Semicolon Separated Value format.",
209 CSV, config);
210 }
211
212 public static ExportToFileDestinationWizardPage CsvPrint(CsvNameExportConfigurator config) {
213
214 return new ExportToFileDestinationWizardPage(
215 CSV_PRINT_EXPORT,
216 CSV_NAME_EXPORT,
217 "CSV Print Export",
218 "Export the content of the currently selected database into Semicolon Separated Value format.",
219 CSV, config);
220 }
221
222 /** {@inheritDoc} */
223 @Override
224 public void createControl(Composite parent) {
225
226 setPageComplete(false);
227
228 Composite composite = new Composite(parent, SWT.NONE);
229 GridLayout gridLayout = new GridLayout();
230
231 gridLayout.numColumns = 2;
232 TaxonNode node = null;
233
234 composite.setLayout(gridLayout);
235 if(classifications == null){
236 classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, null);
237 Collections.sort(classifications, new Comparator<Classification>() {
238
239 @Override
240 public int compare(Classification o1, Classification o2) {
241 if (o1.equals(o2)){
242 return 0;
243 }
244 int result = o1.getTitleCache().compareTo(o2.getTitleCache());
245 if (result == 0){
246 return o1.getUuid().compareTo(o2.getUuid());
247 }
248 return result;
249 }
250 });
251 if (!configurator.getTaxonNodeFilter().getClassificationFilter().isEmpty()){
252 selectedClassification = CdmStore.getService(IClassificationService.class).load(configurator.getTaxonNodeFilter().getClassificationFilter().get(0).getUuid());
253 }else{
254
255 selectedClassification = classifications.iterator().next();
256 }
257 }
258
259
260 if(csvExport || csvPrintExport || outputModelExport|| csvNameExport || dwcaExport){
261
262 // Label comboBoxLabel = new Label(composite, SWT.NONE);
263 // comboBoxLabel.setText("Classification");
264 Composite selectNodeOrClassification = new Composite(composite, SWT.NONE);
265 GridLayout grid = new GridLayout();
266 grid.numColumns = 1;
267 selectNodeOrClassification.setLayout(grid);
268 if ((outputModelExport || dwcaExport)&& !configurator.getTaxonNodeFilter().getSubtreeFilter().isEmpty()){
269 checkUseSelectedtaxonNode= new Button(selectNodeOrClassification, SWT.RADIO);
270 String taxonStr = "";
271 node = CdmApplicationState.getCurrentAppConfig().getTaxonNodeService().load(configurator.getTaxonNodeFilter().getSubtreeFilter().get(0).getUuid());
272 if (node.hasTaxon()){
273 taxonStr = node.getTaxon().getName().getTitleCache();
274 }
275 checkUseSelectedtaxonNode.setText("Export selected subtree ("+ taxonStr+")");
276 checkUseSelectedtaxonNode.addListener(SWT.Selection, new Listener() {
277 @Override
278 public void handleEvent(Event e) {
279 Button b = (Button) e.widget;
280 GridData data = (GridData) classificationSelectionCombo.getLayoutData();
281 data.exclude = b.getSelection();
282 classificationSelectionCombo.setVisible(!data.exclude);
283
284 }
285 });
286 checkUseSelectedtaxonNode.setSelection(true);
287 checkUseSelectedClassification= new Button(selectNodeOrClassification, SWT.RADIO);
288 checkUseSelectedClassification.setText("Export complete classification");
289 checkUseSelectedClassification.addListener(SWT.Selection, new Listener() {
290 @Override
291 public void handleEvent(Event e) {
292 Button b = (Button) e.widget;
293 GridData data = (GridData) classificationSelectionCombo.getLayoutData();
294 data.exclude = b.getSelection();
295 classificationSelectionCombo.setVisible(data.exclude);
296
297 }
298 });
299 }
300 if (node!= null){
301 selectedClassification = node.getClassification();
302 }
303 createClassificationSelectionCombo(selectNodeOrClassification);
304
305
306
307 if (checkUseSelectedtaxonNode != null){
308
309 if (checkUseSelectedtaxonNode.getSelection()){
310 classificationSelectionCombo.setVisible(false);
311
312 }
313 }else{
314 classificationSelectionCombo.setVisible(true);
315 classificationSelectionCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
316 true, false, 2, 1));
317 }
318
319 }
320
321 Label folderLabel = new Label(composite, SWT.NONE);
322 folderLabel.setText("Select Folder for exported files");
323 folderLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
324 true, false, 2, 1));
325 folderDialog = new DirectoryDialog(parent.getShell());
326 folderDialog.setFilterPath(PreferencesUtil.getPreferenceStore().getString(EXPORT_FOLDER));
327
328 text_folder = new Text(composite, SWT.BORDER);
329 text_folder.setEditable(false);
330 text_folder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
331 false));
332 if (PreferencesUtil.getPreferenceStore().getString(EXPORT_FOLDER) != null){
333 text_folder.setText(PreferencesUtil.getPreferenceStore().getString(EXPORT_FOLDER));
334 setPageComplete(true);
335 }
336
337 Button button = new Button(composite, SWT.PUSH);
338 button.setText("Browse...");
339
340 button.addSelectionListener(new SelectionAdapter() {
341 @Override
342 public void widgetSelected(SelectionEvent e) {
343 super.widgetSelected(e);
344
345 String path = folderDialog.open();
346 if (path != null) { // a folder was selected
347 text_folder.setText(path);
348 PreferencesUtil.getPreferenceStore().setValue(EXPORT_FOLDER, path);
349 setPageComplete(true);
350 }
351 }
352 });
353 if (!outputModelExport){
354
355 Label fileLabel = new Label(composite, SWT.NONE);
356 fileLabel.setText("File");
357 text_exportFileName = new Text(composite, SWT.BORDER);
358 text_exportFileName.setText(generateFilename());
359 text_exportFileName.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
360 true, false));
361 }
362 // make the composite the wizard pages control
363 setControl(composite);
364 }
365
366 protected String generateFilename() {
367 StringBuffer buffer = new StringBuffer();
368
369 Calendar cal = Calendar.getInstance();
370 SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
371 buffer.append(sdf.format(cal.getTime()));
372
373 buffer.append("-");
374
375 buffer.append(type + "_export-");
376 try {
377 buffer.append(CdmDataSourceRepository.getCurrentCdmSource());
378 } catch (CdmRemoteSourceException e) {
379 buffer.append("Unknown");
380 }
381
382 buffer.append(".");
383 buffer.append(extension);
384
385 return buffer.toString();
386 }
387
388 public String getExportFileName() {
389 return text_exportFileName.getText();
390 }
391
392 public String getFolderText() {
393 return text_folder.getText();
394 }
395
396 public Text getFolderComposite() {
397 return text_folder;
398 }
399
400 private void createClassificationSelectionCombo(Composite parent){
401
402 // Composite classificationSelection = new Composite(parent, SWT.NULL);
403 // classificationSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
404
405 // GridLayout layout = new GridLayout();
406 // classificationSelection.setLayout(layout);
407 GridData gridData = new GridData();
408 gridData = new GridData(GridData.BEGINNING, GridData.CENTER, true, false);
409 gridData.horizontalIndent = 5;
410 // classificationSelection.setLayoutData(gridData);
411
412 classificationSelectionCombo = new Combo(parent, SWT.BORDER| SWT.READ_ONLY);
413 classificationSelectionCombo.setLayoutData(gridData);
414 for(Classification tree : classifications){
415 classificationSelectionCombo.add(tree.getName().getText(), classifications.indexOf(tree));
416
417 }
418
419 classificationSelectionCombo.select(classifications.indexOf(selectedClassification));
420
421 // TODO remember last selection
422 classificationSelectionCombo.addSelectionListener(this);
423
424
425
426 //return classificationSelection;
427 }
428
429 public Combo getCombo(){
430 return classificationSelectionCombo;
431 }
432
433 @Override
434 public void widgetSelected(SelectionEvent e) {
435 selectedClassification = classifications.get(classificationSelectionCombo.getSelectionIndex());
436
437 }
438
439 @Override
440 public void widgetDefaultSelected(SelectionEvent e) {
441 //not needed here
442
443 }
444
445 public UUID getSelectedClassificationUUID() {
446
447 return selectedClassification.getUuid();
448 }
449
450 public boolean getCheckUseSelectedTaxonNode() {
451 if (checkUseSelectedtaxonNode== null){
452 return false;
453 }
454 return checkUseSelectedtaxonNode.getSelection();
455 }
456
457 @Override
458 public boolean canFlipToNextPage() {
459 return getFolderText() != null;
460 }
461
462 }