source: gli/trunk/src/org/greenstone/gatherer/gui/ExportAsPrompt.java@ 20952

Last change on this file since 20952 was 20924, checked in by oranfry, 15 years ago

Since we can now have a Perl installation inside Greenstone on linux as well, GLI code for Linux also launches perl with the -S flag.

  • Property svn:keywords set to Author Date Id Revision
File size: 36.0 KB
RevLine 
[9243]1/**
2 *#########################################################################
3 *
4 * A component of the Gatherer application, part of the Greenstone digital
5 * library suite from the New Zealand Digital Library Project at the
6 * University of Waikato, New Zealand.
7 *
8 * <BR><BR>
9 *
10 * Author: John Thompson, Greenstone Digital Library, University of Waikato
11 *
12 * <BR><BR>
13 *
14 * Copyright (C) 1999 New Zealand Digital Library Project
15 *
16 * <BR><BR>
17 *
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * (at your option) any later version.
22 *
23 * <BR><BR>
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 * GNU General Public License for more details.
29 *
30 * <BR><BR>
31 *
32 * You should have received a copy of the GNU General Public License
33 * along with this program; if not, write to the Free Software
34 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
35 *########################################################################
36 */
37package org.greenstone.gatherer.gui;
38
39import java.awt.*;
40import java.awt.event.*;
41import java.io.*;
42import java.util.ArrayList;
[12336]43import java.util.HashMap;
[9243]44import javax.swing.*;
45import javax.swing.event.*;
[12336]46
[9243]47import org.greenstone.gatherer.Configuration;
48import org.greenstone.gatherer.DebugStream;
49import org.greenstone.gatherer.Dictionary;
50import org.greenstone.gatherer.Gatherer;
51import org.greenstone.gatherer.collection.BasicCollectionConfiguration;
[13594]52import org.greenstone.gatherer.greenstone.LocalGreenstone;
[9243]53import org.greenstone.gatherer.shell.GShell;
54import org.greenstone.gatherer.shell.GShellEvent;
55import org.greenstone.gatherer.shell.GShellListener;
[12336]56import org.greenstone.gatherer.shell.GDefaultProgressMonitor;
[9243]57import org.greenstone.gatherer.util.ArrayTools;
58import org.greenstone.gatherer.util.CheckList;
59import org.greenstone.gatherer.util.CheckListEntry;
60import org.greenstone.gatherer.util.StaticStrings;
61import org.greenstone.gatherer.util.Utility;
62
63/** This class provides the functionality to export a set of current
64 * collections from the GSDLHOME/collect/ directory to various formats
65 * (hence ExportAs) using export.pl. The user chooses the collection from a
66 * list, where each entry also displays details about itself, confirms the
67 * delete of a collection by checking a checkbox then presses the ok button
68 * to actually delete the collection.
69 * Copied from WriteCDImagePrompt
70 * @author John Thompson, Greenstone Digital Library, University of Waikato
71 * @version 2.3
72 */
73public class ExportAsPrompt
74 extends ModalDialog
75 implements GShellListener {
76
77 static final private Dimension LABEL_SIZE = new Dimension(120, 25);
78
79 private OKButtonListener ok_button_listener;
80
81 private JLabel saveas_label = null;
82 private JComboBox saveas_combobox = null;
83
84 private ArrayList all_collections = null;
[17145]85 private BasicCollectionConfiguration selected_collection = null;
86 /** The list of collections to export */
87 private JList list = null;
[9243]88 /** The currently selected collection for deletion. */
89 private BasicCollectionConfiguration collection = null;
90 /** A reference to ourself so any inner-classes can dispose of us. */
91 private ExportAsPrompt prompt = null;
92 /** The close button, which exits the prompt without deleting anything. */
93 private JButton cancel_button = null;
94 /** The ok button which causes the selected collection to be deleted. */
95 private JButton ok_button = null;
96 /** The label above details. */
97 private JLabel details_label = null;
98 /** The label above the list. */
99 private JLabel list_label = null;
100 /** The text area used to display details about the collection selected. */
101 private JTextArea details_textarea = null;
102 /** The text area used to display instructions for the cd-rom/dvd export */
103 private JTextArea instructions_textarea;
104 /** A string array used to pass arguments to the phrase retrieval method. */
105 private JTextField title_field = null;
106 private JLabel title_label = null;
107 private String args[] = null;
108 private String cd_title = null;
109 /** whether the exporting was successful or not */
110 private boolean successful = false;
111 /** whether we are trying to export or not */
112 private boolean exporting = false;
113 /** the error message if any */
114 private StringBuffer error_message = null;
115 /** The size of the export prompt screen. */
[13320]116 public static final Dimension SIZE = new Dimension(500, 540);
[12336]117 private GDefaultProgressMonitor progress_monitor;
[9243]118
[12336]119 private JButton convert_xml_button1 = null;
120 private JButton convert_xml_button2 = null;
[12592]121 private JButton convert_xml_button3 = null;
[13320]122 private JButton folder_button = null;
[12336]123
124 private JPanel instructions_pane = null;
125
126 private JPanel convert_xml_pane1 = null;
127 private JPanel convert_xml_pane2 = null;
[12592]128 private JPanel mapping_xml_pane = null;
[12336]129
130 private JCheckBox convert_xml_checkbox1 = null;
[12592]131 private JCheckBox convert_xml_checkbox2 = null;
132 private JCheckBox mapping_xml_checkbox = null;
133
[12336]134 private JCheckBox output_single_checkbox = null;
135
136 private JTextField convert_xml_field1 = null;
137 private JTextField convert_xml_field2 = null;
[12592]138 private JTextField mapping_xml_field = null;
[12336]139
[12592]140
[12336]141 private File xsl_file1 = null;
142 private File xsl_file2 = null;
[12592]143 private File mapping_file = null;
[12336]144
145 private JPanel convert_xml_pane = null;
146
147 private HashMap plugoutMap = new HashMap();
148
149
[9243]150 /** Constructor.
151 * @see org.greenstone.gatherer.collection.ExportAsPrompt.CancelButtonListener
152 * @see org.greenstone.gatherer.collection.ExportAsPrompt.CollectionListListener
153 * @see org.greenstone.gatherer.collection.ExportAsPrompt.OKButtonListener
154 */
155 public ExportAsPrompt() {
156 super(Gatherer.g_man, true);
[18370]157 this.setComponentOrientation(Dictionary.getOrientation());
[12336]158 plugoutMap.clear();
159 plugoutMap.put("DSpace","dublin-core.xml");
160 plugoutMap.put("MARCXML","doc.xml");
[17132]161 plugoutMap.put("GreenstoneMETS","doctxt.xml,docmets.xml");
162 plugoutMap.put("FedoraMETS","doctxt.xml,docmets.xml");
[12336]163
[17132]164 // this is the order we want them to appear in the list
[17145]165 String [] saveas_formats = {"GreenstoneMETS", "FedoraMETS", "MARCXML", "DSpace"};
[12336]166 cancel_button = new GLIButton(Dictionary.get("General.Close"), Dictionary.get("General.Close_Tooltip"));
167
[12119]168 details_textarea = new JTextArea(Dictionary.get("DeleteCollectionPrompt.No_Collection"));
[9243]169 details_textarea.setEditable(false);
[18370]170 details_textarea.setComponentOrientation(Dictionary.getOrientation());
171
[12119]172 details_label = new JLabel(Dictionary.get("DeleteCollectionPrompt.Collection_Details"));
[18372]173 details_label.setComponentOrientation(Dictionary.getOrientation());
[9243]174
[12119]175 instructions_textarea = new JTextArea(Dictionary.get("ExportAsPrompt.Instructions"));
[9243]176 instructions_textarea.setCaretPosition(0);
177 instructions_textarea.setEditable(false);
178 instructions_textarea.setLineWrap(true);
179 instructions_textarea.setRows(4);
180 instructions_textarea.setWrapStyleWord(true);
[18370]181 instructions_textarea.setComponentOrientation(Dictionary.getOrientation());
[12336]182
183
[18412]184 saveas_label = new JLabel(Dictionary.get("ExportAsPrompt.SaveAs"));
[18370]185 saveas_label.setComponentOrientation(Dictionary.getOrientation());
[9243]186 //saveas_label.setPreferredSize(LABEL_SIZE);
[12119]187
[17132]188 saveas_combobox = new JComboBox(saveas_formats);
[13195]189 saveas_combobox.setOpaque(false);
[12119]190 saveas_combobox.setToolTipText(Dictionary.get("ExportAsPrompt.SaveAs_Tooltip"));
[18370]191 saveas_combobox.setComponentOrientation(Dictionary.getOrientation());
[9243]192
[12336]193 // Add xml conversion feature
194 convert_xml_button1 = new GLIButton(Dictionary.get("ExportAsPrompt.Browse"),Dictionary.get("ExportAsPrompt.Browse_Tooltip"));
195 convert_xml_button1.setEnabled(false);
196
197 convert_xml_button2 = new GLIButton(Dictionary.get("ExportAsPrompt.Browse"),Dictionary.get("ExportAsPrompt.Browse_Tooltip"));
198 convert_xml_button2.setEnabled(false);
[12592]199
200 convert_xml_button3 = new GLIButton(Dictionary.get("ExportAsPrompt.Browse"),Dictionary.get("ExportAsPrompt.Browse_Tooltip"));
201 convert_xml_button3.setEnabled(false);
[12336]202
203 convert_xml_checkbox1 = new JCheckBox();
204 convert_xml_checkbox1.setText(Dictionary.get("ExportAsPrompt.ApplyXSL","doc.xml"));
205 convert_xml_checkbox1.setToolTipText(Dictionary.get("ExportAsPrompt.ApplyXSL_Tooltip"));
[18370]206 convert_xml_checkbox1.setComponentOrientation(Dictionary.getOrientation());
[12336]207
208 convert_xml_checkbox2 = new JCheckBox();
209 convert_xml_checkbox2.setToolTipText(Dictionary.get("ExportAsPrompt.ApplyXSL_Tooltip"));
[18370]210 convert_xml_checkbox2.setComponentOrientation(Dictionary.getOrientation());
211
[12336]212 output_single_checkbox = new JCheckBox();
[18370]213 output_single_checkbox.setComponentOrientation(Dictionary.getOrientation());
[12336]214 output_single_checkbox.setText(Dictionary.get("ExportAsPrompt.MARCXMLGroup"));
215 output_single_checkbox.setToolTipText(Dictionary.get("ExportAsPrompt.MARCXMLGroup_Tooltip"));
216
[12592]217
218 mapping_xml_checkbox = new JCheckBox();
[18370]219 mapping_xml_checkbox.setComponentOrientation(Dictionary.getOrientation());
[12592]220 mapping_xml_checkbox.setText(Dictionary.get("ExportAsPrompt.MappingXML"));
221 mapping_xml_checkbox.setToolTipText(Dictionary.get("ExportAsPrompt.MappingXML_Tooltip"));
222
[12336]223 convert_xml_field1 = new JTextField();
[18370]224 convert_xml_field1.setComponentOrientation(Dictionary.getOrientation());
[17252]225 convert_xml_field1.setEnabled(false);
[18370]226
[12336]227 convert_xml_field2 = new JTextField();
[18370]228 convert_xml_field2.setComponentOrientation(Dictionary.getOrientation());
[17252]229 convert_xml_field2.setEnabled(false);
[18370]230
[12592]231 mapping_xml_field = new JTextField();
[18370]232 mapping_xml_field.setComponentOrientation(Dictionary.getOrientation());
[17252]233 mapping_xml_field.setEnabled(false);
[12336]234
235 convert_xml_pane1 = new JPanel(new BorderLayout());
[18370]236 convert_xml_pane1.setComponentOrientation(Dictionary.getOrientation());
237
[12336]238 convert_xml_pane2 = new JPanel(new BorderLayout());
[18370]239 convert_xml_pane2.setComponentOrientation(Dictionary.getOrientation());
240
[12592]241 mapping_xml_pane = new JPanel(new BorderLayout());
[18370]242 mapping_xml_pane.setComponentOrientation(Dictionary.getOrientation());
243
[12592]244 convert_xml_pane = new JPanel(new GridLayout(3,1));
[18370]245 convert_xml_pane.setComponentOrientation(Dictionary.getOrientation());
246
[9243]247 all_collections = new ArrayList();
[17145]248 //list = new CheckList(true);
249 list = new JList(getCollectionListModel());
[18372]250 list.setComponentOrientation(Dictionary.getOrientation());
[12119]251 list_label = new JLabel(Dictionary.get("DeleteCollectionPrompt.Collection_List"));
[18370]252 list_label.setComponentOrientation(Dictionary.getOrientation());
253
[12119]254 ok_button = new GLIButton(Dictionary.get("ExportAsPrompt.Export"), Dictionary.get("ExportAsPrompt.Export_Tooltip"));
255
[9243]256 title_field = new JTextField();
[18370]257 title_field.setComponentOrientation(Dictionary.getOrientation());
[13076]258 title_field.setToolTipText(Dictionary.get("ExportAsPrompt.Export_Name_Tooltip"));
[12119]259 title_label = new JLabel(Dictionary.get("ExportAsPrompt.Export_Name"));
[18370]260 title_label.setComponentOrientation(Dictionary.getOrientation());
261
[13320]262 folder_button = new GLIButton(Dictionary.get("ExportAsPrompt.Browse"),Dictionary.get("ExportAsPrompt.Browse_Tooltip"));
263 folder_button.addActionListener(new FolderButtonListener());
264
[17145]265
[9243]266 prompt = this;
267 setSize(SIZE);
[12119]268 setTitle(Dictionary.get("ExportAsPrompt.Title"));
[9243]269
[12730]270 setJMenuBar(new SimpleMenuBar("exporting"));
[9243]271 cancel_button.addActionListener(new CancelButtonListener());
272 list.addListSelectionListener(new CollectionListListener());
273 list.clearSelection();
274 list.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
275 ok_button_listener = new OKButtonListener();
276 ok_button.addActionListener(ok_button_listener);
277 ok_button.setEnabled(false);
278 //title.getDocument().addDocumentListener(new DocumentListener());
[12336]279
280 convert_xml_button1.addActionListener(new ConvertXMLButtonListener());
281 convert_xml_checkbox1.addActionListener(new ConvertXMLCheckboxListener());
[12592]282 mapping_xml_checkbox.addActionListener(new ConvertXMLCheckboxListener());
283 convert_xml_button3.addActionListener(new ConvertXMLButtonListener());
[12336]284
285 convert_xml_button2.addActionListener(new ConvertXMLButtonListener());
286 convert_xml_checkbox2.addActionListener(new ConvertXMLCheckboxListener());
287
288 saveas_combobox.addActionListener(new SaveasListener());
289
[9243]290 }
291
292 /** Destructor. */
293 public void destroy() {
294 saveas_label = null;
295 saveas_combobox = null;
296 all_collections.clear();
297 all_collections = null;
298 cancel_button = null;
299 details_textarea = null;
300 details_label = null;
301 list = null;
302 ok_button = null;
303 prompt = null;
[17145]304 selected_collection = null;
[9243]305 title_field = null;
306 title_label = null;
307 }
308
309 /** This method causes the modal prompt to be displayed.
310 * returns true if it has exported the collections that are currently selected */
311 public boolean display() {
[18370]312 JScrollPane scrol_tmp;
[9243]313 // Top pane
[12336]314 instructions_pane = new JPanel(new BorderLayout());
[18370]315 instructions_pane.setComponentOrientation(Dictionary.getOrientation());
316 instructions_pane.setBorder(BorderFactory.createEmptyBorder(0,0,5,5));
317 scrol_tmp = new JScrollPane(instructions_textarea);
318 scrol_tmp.setComponentOrientation(Dictionary.getOrientation());
319 instructions_pane.add(scrol_tmp, BorderLayout.CENTER);
[9243]320
321 title_label.setBorder(BorderFactory.createEmptyBorder(0,5,0,15));
322
323 JPanel title_pane = new JPanel(new BorderLayout());
[18370]324 title_pane.setComponentOrientation(Dictionary.getOrientation());
325 title_pane.add(title_label, BorderLayout.LINE_START);
[9243]326 title_pane.add(title_field, BorderLayout.CENTER);
[18370]327 title_pane.add(folder_button, BorderLayout.LINE_END);
[12336]328 //apply xsl pane
329
330 convert_xml_pane1.removeAll();
331 convert_xml_pane2.removeAll();
[12592]332 mapping_xml_pane.removeAll();
[12336]333 convert_xml_pane.removeAll();
[9243]334
[18370]335 convert_xml_pane1.add(convert_xml_checkbox1, BorderLayout.LINE_START);
[12336]336 convert_xml_pane1.add(convert_xml_field1, BorderLayout.CENTER);
[18370]337 convert_xml_pane1.add(convert_xml_button1, BorderLayout.LINE_END);
[12336]338
[18370]339 convert_xml_pane2.add(convert_xml_checkbox2, BorderLayout.LINE_START);
[12336]340 convert_xml_pane2.add(convert_xml_field2, BorderLayout.CENTER);
[18370]341 convert_xml_pane2.add(convert_xml_button2, BorderLayout.LINE_END);
[12336]342
[18370]343 mapping_xml_pane.add(mapping_xml_checkbox, BorderLayout.LINE_START);
[12592]344 mapping_xml_pane.add(mapping_xml_field, BorderLayout.CENTER);
[18370]345 mapping_xml_pane.add(convert_xml_button3, BorderLayout.LINE_END);
[12592]346
[12336]347 convert_xml_pane.add(convert_xml_pane1);
348
349 String saveas = (String)saveas_combobox.getSelectedItem();
[17252]350 // force the updating of which fields we are displaying
351 saveas_combobox.setSelectedIndex(0);
[12336]352
353 // Save as pane
[9243]354 JPanel saveas_pane = new JPanel(new BorderLayout());
[18370]355 saveas_pane.setComponentOrientation(Dictionary.getOrientation());
[12336]356 saveas_label.setBorder(BorderFactory.createEmptyBorder(0,5,0,15));
[18370]357 saveas_pane.add(saveas_label, BorderLayout.LINE_START);
[9243]358 saveas_pane.add(saveas_combobox, BorderLayout.CENTER);
359
[12336]360 JPanel tmp_pane = new JPanel(new BorderLayout());
[18370]361 tmp_pane.setComponentOrientation(Dictionary.getOrientation());
[13320]362 tmp_pane.add(saveas_pane, BorderLayout.NORTH);
[12336]363 tmp_pane.add(title_pane, BorderLayout.CENTER);
364
365 instructions_pane.add(tmp_pane, BorderLayout.NORTH);
366
367 instructions_pane.add(convert_xml_pane, BorderLayout.CENTER);
368
[9243]369 // Central pane
370 JPanel list_pane = new JPanel(new BorderLayout());
[18370]371 list_pane.setComponentOrientation(Dictionary.getOrientation());
[9243]372 list_pane.add(list_label, BorderLayout.NORTH);
[18370]373 scrol_tmp = new JScrollPane(list);
374 scrol_tmp.setComponentOrientation(Dictionary.getOrientation());
375 list_pane.add(scrol_tmp, BorderLayout.CENTER);
[9243]376 list_pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0));
377
378 JPanel details_pane = new JPanel(new BorderLayout());
[18370]379 details_pane.setComponentOrientation(Dictionary.getOrientation());
[9243]380 details_pane.add(details_label, BorderLayout.NORTH);
[18370]381 scrol_tmp = new JScrollPane(details_textarea);
382 scrol_tmp.setComponentOrientation(Dictionary.getOrientation());
383 details_pane.add(scrol_tmp, BorderLayout.CENTER);
[9243]384 details_pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
385
386 JPanel central_pane = new JPanel(new GridLayout(2, 1));
[18370]387 central_pane.setComponentOrientation(Dictionary.getOrientation());
[9243]388 central_pane.add(list_pane);
389 central_pane.add(details_pane);
390 central_pane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
391
392 // Lower pane
393 JPanel button_pane = new JPanel(new GridLayout(1, 2));
[18370]394 button_pane.setComponentOrientation(Dictionary.getOrientation());
[9243]395 button_pane.add(ok_button);
396 button_pane.add(cancel_button);
397 button_pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
398
399 JPanel lower_pane = new JPanel(new BorderLayout());
[18370]400 lower_pane.setComponentOrientation(Dictionary.getOrientation());
[9243]401 lower_pane.add(button_pane, BorderLayout.SOUTH);
402 lower_pane.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
403
404 // Final.
405 JPanel content_pane = (JPanel)this.getContentPane();
[18370]406 content_pane.setComponentOrientation(Dictionary.getOrientation());
[9243]407 content_pane.setLayout(new BorderLayout());
408 content_pane.add(instructions_pane, BorderLayout.NORTH);
409 content_pane.add(central_pane, BorderLayout.CENTER);
410 content_pane.add(lower_pane, BorderLayout.SOUTH);
411
412 // Center and display.
413 Dimension screen_size = Configuration.screen_size;
414 this.setLocation((screen_size.width - SIZE.width) / 2, (screen_size.height - SIZE.height) / 2);
415 this.setVisible(true); // blocks until the dialog is killed
416 return true;
417
418 }
419
420
421 /** This method calls the builcol.pl scripts via a GShell so as to not lock up the processor.
422 * @see org.greenstone.gatherer.Configuration
423 * @see org.greenstone.gatherer.Gatherer
424 * @see org.greenstone.gatherer.collection.Collection
425 * @see org.greenstone.gatherer.gui.BuildOptions
426 * @see org.greenstone.gatherer.shell.GShell
427 * @see org.greenstone.gatherer.shell.GShellListener
428 * @see org.greenstone.gatherer.shell.GShellProgressMonitor
429 * @see org.greenstone.gatherer.util.Utility
430 */
431 public void exportAsCollections() {
432 DebugStream.println("ExportAsPrompt.exportAsCollections()");
433
[17145]434 if (selected_collection == null) return;
435
[9243]436 cd_title = title_field.getText();
437
[9755]438 String export_type = (String) saveas_combobox.getSelectedItem();
[12336]439
[9755]440 // Generate the export.pl command
441 ArrayList command_parts_list = new ArrayList();
[20924]442 if (!Gatherer.isGsdlRemote) {
[9755]443 command_parts_list.add(Configuration.perl_path);
444 command_parts_list.add("-S");
[9243]445 }
[10370]446 command_parts_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "export.pl");
[9755]447 command_parts_list.add("-gli");
448 command_parts_list.add("-language");
449 command_parts_list.add(Configuration.getLanguage());
450 command_parts_list.add("-removeold");
451 command_parts_list.add("-saveas");
452 command_parts_list.add(export_type);
453 command_parts_list.add("-exportdir");
[11753]454 String export_dir = LocalGreenstone.getTmpDirectoryPath();
[13320]455 if (cd_title.equals("")) {
456 export_dir += "exported_" + export_type;
[9755]457 }
458 else {
[13320]459 File cd_file = new File(cd_title);
460 if (cd_file.isAbsolute())
461 export_dir = cd_title + File.separator + "exported_" + export_type;
462 else{
463 cd_title = cd_title.replaceAll("\\s+","");
464 cd_title = cd_title.replaceAll("\\\\+","/");
465 cd_title = cd_title.replaceAll("/+","/");
466 export_dir +=cd_title;
467 }
[9755]468 }
[11753]469
[13320]470 command_parts_list.add(export_dir);
471
[17132]472 if (!export_type.endsWith("METS") && xsl_file1 !=null){
[12336]473 command_parts_list.add("-xsltfile");
474 command_parts_list.add(xsl_file1.getPath());
475 }
476
[12592]477 //add command specific to MARCXML
478 if (export_type.equals("MARCXML")){
479 //add default transformation file
480 if (xsl_file1 == null){
481 command_parts_list.add("-xsltfile");
482 command_parts_list.add(Configuration.gsdl_path+"etc"+File.separator+"dc2marc.xsl");
483 }
484
485 command_parts_list.add("-mapping_file");
486 //default mapping file
487 if (mapping_file == null){
488 command_parts_list.add(Configuration.gsdl_path+"etc"+File.separator+"dc2marc-mapping.xml");
489 }
490 else{
491 command_parts_list.add(mapping_file.getPath());
492 }
493
494 if (output_single_checkbox.isSelected()){
495 command_parts_list.add("-group_marc");
496 }
497
[12336]498 }
499
[12592]500
[17132]501 if (export_type.endsWith("METS") && xsl_file1 !=null){
[12336]502 command_parts_list.add("-xslt_txt");
503 command_parts_list.add(xsl_file1.getPath());
504 }
505
[17132]506 if (export_type.endsWith("METS") && xsl_file2 !=null){
[12336]507 command_parts_list.add("-xslt_mets");
508 command_parts_list.add(xsl_file2.getPath());
509 }
510
[17145]511 command_parts_list.add( selected_collection.getShortName());
512
[9243]513
514 DebugStream.print("export command = ");
[13062]515 for (int i = 0; i < command_parts_list.size(); i++) {
[9755]516 DebugStream.print(command_parts_list.get(i) + " ");
[13066]517 //System.err.print(command_parts_list.get(i) + " ");
[9243]518 }
519 DebugStream.println("");
520
[9755]521 // Run the export.pl command
522 String[] command_parts = (String[]) command_parts_list.toArray(new String[0]);
[12336]523
524 progress_monitor = new GDefaultProgressMonitor();
525
526 GShell process = new GShell(command_parts, GShell.EXPORTAS, 3, this,progress_monitor , GShell.GSHELL_EXPORTAS);
[9243]527 process.start();
528 //process.run();
529 DebugStream.println("ExportAsPrompt.exportAsCollections().return");
530
531 }
532
[12336]533
534 public void cancelExporting(){
535 progress_monitor.setStop(true);
536 }
537
538
[9243]539 /** Shows an export complete prompt.
540 * @param success A <strong>boolean</strong> indicating if the collection was successfully deleted.
541 * @see org.greenstone.gatherer.collection.Collection
542 */
543 public void resultPrompt(boolean success, String extra) {
544 args = new String[2];
545
[17145]546 // coll name
547 args[0] = selected_collection.getName() + StaticStrings.SPACE_CHARACTER + StaticStrings.OPEN_PARENTHESIS_CHARACTER + selected_collection.getShortName() + StaticStrings.CLOSE_PARENTHESIS_CHARACTER;
[13320]548
549 String export_type = (String) saveas_combobox.getSelectedItem();
550 args[1] = LocalGreenstone.getTmpDirectoryPath();
551 if (cd_title.equals("")) {
552 args[1] += "exported_" + export_type;
[9243]553 }
[13320]554 else {
555 File cd_file = new File(cd_title);
556 if (cd_file.isAbsolute())
557 args[1] = cd_title + File.separator + "exported_" + export_type;
558 else{
559 cd_title = cd_title.replaceAll("\\s+","");
560 cd_title = cd_title.replaceAll("\\\\+","/");
561 cd_title = cd_title.replaceAll("/+","/");
562 args[1] +=cd_title;
563 }
564 }
565
[9243]566
567 String title;
568 String label;
569 String details;
570
571 if (success) {
[17145]572 String successMessage = "ExportAsPrompt.Successful_ExportOne";
573 title = Dictionary.get("ExportAsPrompt.Successful_Title");
574 label = Dictionary.get(successMessage, args);
575 details = Dictionary.get("ExportAsPrompt.Successful_Details", args);
[9243]576 } else {
[17145]577 String failedMessage = "ExportAsPrompt.Failed_ExportOne";
578 title = Dictionary.get("ExportAsPrompt.Failed_Title");
579 label = Dictionary.get(failedMessage, args);
580 details = Dictionary.get("ExportAsPrompt.Failed_Details", args);
[9243]581 }
[17132]582 SimpleResultDialog result_dialog = new SimpleResultDialog(this, title, label, details);
[9243]583 result_dialog.setVisible(true); // Blocks
584 result_dialog.dispose();
585 result_dialog = null;
586 }
587
588 /** Method to scan the collect directory retrieving and reloading each collection it finds, while building the list of known collections.
589 * @see org.greenstone.gatherer.Configuration
590 * @see org.greenstone.gatherer.Gatherer
591 * @see org.greenstone.gatherer.util.ArrayTools
592 * @see org.greenstone.gatherer.util.Utility
593 */
[17145]594 private ListModel getCollectionListModel() {
595 DefaultListModel model = new DefaultListModel();
[9243]596 // Start at the collect dir.
597 File collect_directory = new File(Gatherer.getCollectDirectoryPath());
[14045]598 String file_name = (Gatherer.GS3)? Utility.CONFIG_GS3_FILE : Utility.CONFIG_FILE;
[9243]599 if (collect_directory.exists()) {
600 // Now for each child directory see if it contains a .col file and
601 // if so try to load it..
602 File collections[] = collect_directory.listFiles();
603 ArrayTools.sort(collections);
604 for(int i = 0; collections != null && i < collections.length; i++) {
605 if(collections[i].isDirectory() && !collections[i].getName().equals(StaticStrings.MODEL_COLLECTION_NAME)) {
[14045]606 File config_file = new File(collections[i], file_name);
[9243]607 if (config_file.exists()) {
608 BasicCollectionConfiguration config = new BasicCollectionConfiguration(config_file);
[17145]609 model.addElement(config);
[9243]610 config = null;
611 }
612 }
613 }
614 }
[17145]615 return model;
[9243]616 // Otherwise the collect directory doesn't actually exist, so there ain't much we can do.
[17145]617 }
[9243]618
619
620 /** All implementation of GShellListener must include this method so the listener can be informed of messages from the GShell.
621 * @param event A <strong>GShellEvent</strong> that contains, amoung other things, the message.
622 */
623 public synchronized void message(GShellEvent event) {
624 // Ignore the messages from RecPlug with 'show_progress' set (used for progress bars)
625 String message = event.getMessage();
626 if (message.startsWith("export.pl>")) {
627 message = message.substring(13);
628 //DebugStream.println("message = "+event.getMessage());
629 error_message.append(message);
630 error_message.append("\n");
631 }
632 }
633
634 /** All implementation of GShellListener must include this method so the listener can be informed when a GShell begins its task. Implementation side-effect, not actually used.
635 * @param event A <strong>GShellEvent</strong> that contains details of the initial state of the <strong>GShell</strong> before task comencement.
636 */
637 public synchronized void processBegun(GShellEvent event) {
638 // We don't care.
639 }
640 /** All implementation of GShellListener must include this method so the listener can be informed when a GShell completes its task.
641 * @param event A <strong>GShellEvent</strong> that contains details of the final state of the <strong>GShell</strong> after task completion.
642 */
643 public synchronized void processComplete(GShellEvent event) {
644 successful = false;
645 if(event.getStatus() == GShell.OK) {
646 if(event.getType() == GShell.EXPORTAS) {
647 successful = true;
648 }
649 }
650 ok_button_listener.processComplete();
651 }
652
653 /** A button listener implementation, which listens for actions on the close button and disposes of the dialog when detected. */
654 private class CancelButtonListener
655 implements ActionListener {
656 /** Any implementation of ActionListener must include this method so we can be informed when the button is actioned.
657 * @param event An <strong>ActionEvent</strong> containing all the relevant information garnered from the event itself.
658 */
659 public void actionPerformed(ActionEvent event) {
660 prompt.dispose();
661 }
662 }
663
664 /** This private class listens for selection events in from the list and then displays the appropriate details for that collection.
665 */
666 private class CollectionListListener
[9249]667 implements ListSelectionListener
668 {
[9243]669 /** Any implementation of ListSelectionListener must include this method so we can be informed when the list selection changes.
670 * @param event a <strong>ListSelectionEvent</strong> containing all the relevant information garnered from the event itself
671 */
[9249]672 public void valueChanged(ListSelectionEvent event)
673 {
674 // Can only export when something is ticked
[17145]675 //ok_button.setEnabled(!list.isNothingTicked());
[9249]676
677 if (list.isSelectionEmpty()) {
[12119]678 details_textarea.setText(Dictionary.get("DeleteCollectionPrompt.No_Collection"));
[17145]679 ok_button.setEnabled(false);
[9243]680 }
[17145]681 else {
682 BasicCollectionConfiguration collection = (BasicCollectionConfiguration) list.getSelectedValue();
683 args = new String[3];
684 args[0] = collection.getCreator();
685 args[1] = collection.getMaintainer();
686 args[2] = collection.getDescription();
687 details_textarea.setText(Dictionary.get("DeleteCollectionPrompt.Details", args));
688 details_textarea.setCaretPosition(0);
689 ok_button.setEnabled(true);
690 }
691 }
[9249]692
[9243]693 }
[9249]694 /** The OK button listener implementation. */
[9243]695 private class OKButtonListener
696 implements ActionListener {
697 private Component glass_pane;
698 private MouseListener mouse_blocker_listener;
699 private ProgressDialog progress_dialog;
700
701 /** Any implementation of ActionListener must include this method so we can be informed when the button is actioned.
702 * @param event An <strong>ActionEvent</strong> containing all the relevant information garnered from the event itself.
703 * @see org.greenstone.gatherer.Configuration
704 * @see org.greenstone.gatherer.Gatherer
705 * @see org.greenstone.gatherer.util.Utility
706 */
707 public void actionPerformed(ActionEvent event) {
708 ///ystem.err.println("OK Clicked");
709 // Make sure there are some colls specified
[17145]710 selected_collection = (BasicCollectionConfiguration)list.getSelectedValue();
[9243]711 error_message = new StringBuffer();
712
713 // Set the cursor to hourglass
714 glass_pane = getGlassPane();
715 mouse_blocker_listener = new MouseAdapter() {};
716 glass_pane.addMouseListener(mouse_blocker_listener);
717 glass_pane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
718 glass_pane.setVisible(true);
719
720 // Export the selected collection.
721 ///ystem.err.println("Exporting As for named collections");
722 exportAsCollections();
723
724 // Show progress dialog
725 ///ystem.err.println("Showing progress dialog");
726 progress_dialog = new ProgressDialog();
727 progress_dialog.setVisible(true);
728 }
729
730 public void processComplete() {
731 ///ystem.err.println("Process complete");
732 // Dispose of progress dialog
[12336]733
734
[9243]735 progress_dialog.setVisible(false);
736 progress_dialog.dispose();
737 progress_dialog = null;
738
739 // unset the cursor
740 glass_pane.setVisible(false);
741 glass_pane.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
742 glass_pane.removeMouseListener(mouse_blocker_listener);
743 glass_pane = null;
744 mouse_blocker_listener= null;
745
746 if (successful) {
747 resultPrompt(true, error_message.toString());
748 } else {
749 resultPrompt(false, error_message.toString());
750 }
751 error_message = null;
[12336]752
753 convert_xml_button1.setEnabled(false);
754 xsl_file1 = null;
755 convert_xml_field1.setText("");
756 convert_xml_checkbox1.setSelected(false);
757
758 convert_xml_button2.setEnabled(false);
759 xsl_file2 = null;
760 convert_xml_field2.setText("");
761 convert_xml_checkbox2.setSelected(false);
[12592]762
763 mapping_xml_checkbox.setSelected(false);
764 output_single_checkbox.setSelected(false);
765 convert_xml_button3.setEnabled(false);
766 mapping_xml_field.setText("");
767 mapping_file = null;
768
[9243]769 }
770
771 private class ProgressDialog
772 extends ModalDialog {
773
[12336]774 private Dimension size = new Dimension(400,110);
[9243]775
776 public ProgressDialog() {
777 super(Gatherer.g_man, Dictionary.get("ExportAsPrompt.Title"), true);
778 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
779 setSize(size);
780 JPanel content_pane = (JPanel) getContentPane();
[12119]781 JLabel progress_label = new JLabel(Dictionary.get("ExportAsPrompt.Progress_Label"));
782
[9243]783 JProgressBar progress_bar = new JProgressBar();
784 progress_bar.setIndeterminate(true);
785 content_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
[12336]786 GLIButton cancel_button = new GLIButton(Dictionary.get("ExportAsPrompt.Cancel"),Dictionary.get("ExportAsPrompt.Cancel_Tooltip"));
787 cancel_button.setMnemonic(KeyEvent.VK_C);
788
789 cancel_button.addActionListener(new ActionListener(){
790 public void actionPerformed(ActionEvent e){
791 cancelExporting();
792 }
793
794 });
795
796 JPanel cancel_panel = new JPanel(new FlowLayout(FlowLayout.CENTER,0,0));
797 cancel_panel.add(cancel_button);
798
799 content_pane.setLayout(new BorderLayout(0,5));
[9243]800 content_pane.add(progress_label, BorderLayout.NORTH);
801 content_pane.add(progress_bar, BorderLayout.CENTER);
[12336]802 content_pane.add(cancel_panel, BorderLayout.SOUTH);
803
[9243]804 // Position
805 Rectangle frame_bounds = Gatherer.g_man.getBounds();
806 setLocation(frame_bounds.x + (frame_bounds.width - size.width) / 2, frame_bounds.y + (frame_bounds.height - size.height) / 2);
807 }
808 }
809 }
810
[12336]811 private class ConvertXMLCheckboxListener implements ActionListener {
812 public void actionPerformed(ActionEvent event) {
[12592]813
814 convert_xml_button1.setEnabled(convert_xml_checkbox1.isSelected());
[17252]815 convert_xml_field1.setEnabled(convert_xml_checkbox1.isSelected());
[12592]816 convert_xml_button2.setEnabled(convert_xml_checkbox2.isSelected());
[17252]817 convert_xml_field2.setEnabled(convert_xml_checkbox2.isSelected());
[12592]818 convert_xml_button3.setEnabled(mapping_xml_checkbox.isSelected());
[17252]819 mapping_xml_field.setEnabled(mapping_xml_checkbox.isSelected());
[12592]820
[12336]821 }
822 }
823
824
825
826 private class SaveasListener implements ActionListener {
827
828 public void actionPerformed(ActionEvent event) {
829
830 convert_xml_checkbox1.setSelected(false);
831 convert_xml_checkbox2.setSelected(false);
[12592]832 mapping_xml_checkbox.setSelected(false);
[12336]833 output_single_checkbox.setSelected(false);
834
835 convert_xml_button1.setEnabled(false);
836 convert_xml_button2.setEnabled(false);
[12592]837 convert_xml_button3.setEnabled(false);
[12336]838
839 convert_xml_field1.setText("");
840 convert_xml_field2.setText("");
[12592]841 mapping_xml_field.setText("");
[12336]842
843 String saveas = (String)saveas_combobox.getSelectedItem();
844
845 if (convert_xml_pane.getComponentCount() > 1){
846 convert_xml_pane.remove(1);
[12592]847 if (convert_xml_pane.getComponentCount() > 1){
848 convert_xml_pane.remove(1);
849 }
[12336]850 }
851
[17132]852 if (!saveas.endsWith("METS")){
[12336]853
854 convert_xml_checkbox1.setText(Dictionary.get("ExportAsPrompt.ApplyXSL",(String)plugoutMap.get(saveas)));
855 if (saveas.equals("MARCXML")){
[12592]856 convert_xml_pane.add(mapping_xml_pane);
[12336]857 convert_xml_pane.add(output_single_checkbox);
858 }
859 }
860 else{
861 String[] docs = ((String)plugoutMap.get(saveas)).split(",");
862 convert_xml_checkbox1.setText(Dictionary.get("ExportAsPrompt.ApplyXSL",docs[0]));
863 convert_xml_checkbox2.setText(Dictionary.get("ExportAsPrompt.ApplyXSL",docs[1]));
864 convert_xml_pane.add(convert_xml_pane2);
865 }
866
867 convert_xml_pane.revalidate();
868 convert_xml_pane.repaint();
869 instructions_pane.revalidate();
870 instructions_pane.repaint();
871
872 }
873
874 }
875
876 private class ConvertXMLButtonListener implements ActionListener {
877 public void actionPerformed(ActionEvent event) {
878 JFileChooser chooser = new JFileChooser();
879 // Note: source for ExampleFileFilter can be found in FileChooserDemo,
880 // under the demo/jfc directory in the Java 2 SDK, Standard Edition.
881 javax.swing.filechooser.FileFilter filter = new javax.swing.filechooser.FileFilter(){
882 public boolean accept(File f){
[13046]883 return f.getPath().endsWith(".xsl")||f.isDirectory()||f.getPath().endsWith(".xml");
[12336]884 }
885
886 public String getDescription(){
[13046]887 return "XSL or XML file";
[12336]888 }
889 };
890
891 chooser.setFileFilter(filter);
892 int returnVal = chooser.showOpenDialog(prompt);
893
894 if(returnVal == JFileChooser.APPROVE_OPTION) {
895 if (event.getSource() == convert_xml_button1){
896
897 xsl_file1 = chooser.getSelectedFile();
898 convert_xml_field1.setText(xsl_file1.getPath());
899 }
[13025]900 else if (event.getSource() == convert_xml_button2){
[12336]901 xsl_file2 = chooser.getSelectedFile();
[12592]902 convert_xml_field2.setText(xsl_file2.getPath());
903
[12336]904 }
[12592]905 else {
906 mapping_file = chooser.getSelectedFile();
907 mapping_xml_field.setText(mapping_file.getPath());
908 }
[12336]909 }
910 }
911 }
912
[13320]913 private class FolderButtonListener implements ActionListener {
914 public void actionPerformed(ActionEvent event) {
915 JFileChooser chooser = new JFileChooser();
916 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
917
918 int returnVal = chooser.showOpenDialog(prompt);
919
920 if(returnVal == JFileChooser.APPROVE_OPTION) {
921 File folder_name = chooser.getSelectedFile();
922 title_field.setText(folder_name.getPath());
923 }
924
925 }
926 }
[9243]927}
928
929
930
931
[13320]932
Note: See TracBrowser for help on using the repository browser.