/** *######################################################################### * * A component of the Gatherer application, part of the Greenstone digital * library suite from the New Zealand Digital Library Project at the * University of Waikato, New Zealand. * *

* * Author: John Thompson, Greenstone Digital Library, University of Waikato * *

* * Copyright (C) 1999 New Zealand Digital Library Project * *

* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * *

* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * *

* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *######################################################################## */ package org.greenstone.gatherer.gui; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.ArrayList; import java.util.HashMap; import javax.swing.*; import javax.swing.event.*; import org.greenstone.gatherer.Configuration; import org.greenstone.gatherer.DebugStream; import org.greenstone.gatherer.Dictionary; import org.greenstone.gatherer.Gatherer; import org.greenstone.gatherer.LocalGreenstone; import org.greenstone.gatherer.collection.BasicCollectionConfiguration; import org.greenstone.gatherer.shell.GShell; import org.greenstone.gatherer.shell.GShellEvent; import org.greenstone.gatherer.shell.GShellListener; import org.greenstone.gatherer.shell.GDefaultProgressMonitor; import org.greenstone.gatherer.util.ArrayTools; import org.greenstone.gatherer.util.CheckList; import org.greenstone.gatherer.util.CheckListEntry; import org.greenstone.gatherer.util.StaticStrings; import org.greenstone.gatherer.util.Utility; /** This class provides the functionality to export a set of current * collections from the GSDLHOME/collect/ directory to various formats * (hence ExportAs) using export.pl. The user chooses the collection from a * list, where each entry also displays details about itself, confirms the * delete of a collection by checking a checkbox then presses the ok button * to actually delete the collection. * Copied from WriteCDImagePrompt * @author John Thompson, Greenstone Digital Library, University of Waikato * @version 2.3 */ public class ExportAsPrompt extends ModalDialog implements GShellListener { static final private Dimension LABEL_SIZE = new Dimension(120, 25); private OKButtonListener ok_button_listener; private JLabel saveas_label = null; private JComboBox saveas_combobox = null; private ArrayList all_collections = null; private ArrayList selected_collections = null; /** The list of collections to include in exported cd-rom/dvd image */ private CheckList list = null; /** The currently selected collection for deletion. */ private BasicCollectionConfiguration collection = null; /** A reference to ourself so any inner-classes can dispose of us. */ private ExportAsPrompt prompt = null; /** The close button, which exits the prompt without deleting anything. */ private JButton cancel_button = null; /** The ok button which causes the selected collection to be deleted. */ private JButton ok_button = null; /** The label above details. */ private JLabel details_label = null; /** The label above the list. */ private JLabel list_label = null; /** The text area used to display details about the collection selected. */ private JTextArea details_textarea = null; /** The text area used to display instructions for the cd-rom/dvd export */ private JTextArea instructions_textarea; /** A string array used to pass arguments to the phrase retrieval method. */ private JTextField title_field = null; private JLabel title_label = null; private String args[] = null; private String cd_title = null; /** whether the exporting was successful or not */ private boolean successful = false; /** whether we are trying to export or not */ private boolean exporting = false; /** the error message if any */ private StringBuffer error_message = null; /** The size of the export prompt screen. */ public static final Dimension SIZE = new Dimension(500, 540); private GDefaultProgressMonitor progress_monitor; private JButton convert_xml_button1 = null; private JButton convert_xml_button2 = null; private JButton convert_xml_button3 = null; private JButton folder_button = null; private JPanel instructions_pane = null; private JPanel convert_xml_pane1 = null; private JPanel convert_xml_pane2 = null; private JPanel mapping_xml_pane = null; private JCheckBox convert_xml_checkbox1 = null; private JCheckBox convert_xml_checkbox2 = null; private JCheckBox mapping_xml_checkbox = null; private JCheckBox output_single_checkbox = null; private JTextField convert_xml_field1 = null; private JTextField convert_xml_field2 = null; private JTextField mapping_xml_field = null; private File xsl_file1 = null; private File xsl_file2 = null; private File mapping_file = null; private JPanel convert_xml_pane = null; private HashMap plugoutMap = new HashMap(); /** Constructor. * @see org.greenstone.gatherer.collection.ExportAsPrompt.CancelButtonListener * @see org.greenstone.gatherer.collection.ExportAsPrompt.CollectionListListener * @see org.greenstone.gatherer.collection.ExportAsPrompt.OKButtonListener */ public ExportAsPrompt() { super(Gatherer.g_man, true); plugoutMap.clear(); plugoutMap.put("DSpace","dublin-core.xml"); plugoutMap.put("MARCXML","doc.xml"); plugoutMap.put("METS","doctxt.xml,docmets.xml"); plugoutMap.put("GA","doc.xml"); cancel_button = new GLIButton(Dictionary.get("General.Close"), Dictionary.get("General.Close_Tooltip")); details_textarea = new JTextArea(Dictionary.get("DeleteCollectionPrompt.No_Collection")); details_textarea.setEditable(false); details_label = new JLabel(Dictionary.get("DeleteCollectionPrompt.Collection_Details")); instructions_textarea = new JTextArea(Dictionary.get("ExportAsPrompt.Instructions")); instructions_textarea.setCaretPosition(0); instructions_textarea.setEditable(false); instructions_textarea.setLineWrap(true); instructions_textarea.setRows(4); instructions_textarea.setWrapStyleWord(true); // Save As ArrayList saveas_formats = new ArrayList(plugoutMap.keySet()); saveas_label = new JLabel(Dictionary.get("ExportAsPrompt.SaveAs") ); //saveas_label.setPreferredSize(LABEL_SIZE); saveas_combobox = new JComboBox(saveas_formats.toArray()); saveas_combobox.setOpaque(false); saveas_combobox.setToolTipText(Dictionary.get("ExportAsPrompt.SaveAs_Tooltip")); // Add xml conversion feature convert_xml_button1 = new GLIButton(Dictionary.get("ExportAsPrompt.Browse"),Dictionary.get("ExportAsPrompt.Browse_Tooltip")); convert_xml_button1.setEnabled(false); convert_xml_button2 = new GLIButton(Dictionary.get("ExportAsPrompt.Browse"),Dictionary.get("ExportAsPrompt.Browse_Tooltip")); convert_xml_button2.setEnabled(false); convert_xml_button3 = new GLIButton(Dictionary.get("ExportAsPrompt.Browse"),Dictionary.get("ExportAsPrompt.Browse_Tooltip")); convert_xml_button3.setEnabled(false); convert_xml_checkbox1 = new JCheckBox(); convert_xml_checkbox1.setText(Dictionary.get("ExportAsPrompt.ApplyXSL","doc.xml")); convert_xml_checkbox1.setToolTipText(Dictionary.get("ExportAsPrompt.ApplyXSL_Tooltip")); convert_xml_checkbox2 = new JCheckBox(); convert_xml_checkbox2.setToolTipText(Dictionary.get("ExportAsPrompt.ApplyXSL_Tooltip")); output_single_checkbox = new JCheckBox(); output_single_checkbox.setText(Dictionary.get("ExportAsPrompt.MARCXMLGroup")); output_single_checkbox.setToolTipText(Dictionary.get("ExportAsPrompt.MARCXMLGroup_Tooltip")); mapping_xml_checkbox = new JCheckBox(); mapping_xml_checkbox.setText(Dictionary.get("ExportAsPrompt.MappingXML")); mapping_xml_checkbox.setToolTipText(Dictionary.get("ExportAsPrompt.MappingXML_Tooltip")); convert_xml_field1 = new JTextField(); convert_xml_field2 = new JTextField(); mapping_xml_field = new JTextField(); convert_xml_pane1 = new JPanel(new BorderLayout()); convert_xml_pane2 = new JPanel(new BorderLayout()); mapping_xml_pane = new JPanel(new BorderLayout()); convert_xml_pane = new JPanel(new GridLayout(3,1)); all_collections = new ArrayList(); list = new CheckList(true); list_label = new JLabel(Dictionary.get("DeleteCollectionPrompt.Collection_List")); ok_button = new GLIButton(Dictionary.get("ExportAsPrompt.Export"), Dictionary.get("ExportAsPrompt.Export_Tooltip")); title_field = new JTextField(); title_field.setToolTipText(Dictionary.get("ExportAsPrompt.Export_Name_Tooltip")); title_label = new JLabel(Dictionary.get("ExportAsPrompt.Export_Name")); folder_button = new GLIButton(Dictionary.get("ExportAsPrompt.Browse"),Dictionary.get("ExportAsPrompt.Browse_Tooltip")); folder_button.addActionListener(new FolderButtonListener()); scanForCollections(); list.setListData(all_collections); prompt = this; setSize(SIZE); setTitle(Dictionary.get("ExportAsPrompt.Title")); setJMenuBar(new SimpleMenuBar("exporting")); cancel_button.addActionListener(new CancelButtonListener()); list.addListSelectionListener(new CollectionListListener()); list.clearSelection(); list.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); ok_button_listener = new OKButtonListener(); ok_button.addActionListener(ok_button_listener); ok_button.setEnabled(false); //title.getDocument().addDocumentListener(new DocumentListener()); convert_xml_button1.addActionListener(new ConvertXMLButtonListener()); convert_xml_checkbox1.addActionListener(new ConvertXMLCheckboxListener()); mapping_xml_checkbox.addActionListener(new ConvertXMLCheckboxListener()); convert_xml_button3.addActionListener(new ConvertXMLButtonListener()); convert_xml_button2.addActionListener(new ConvertXMLButtonListener()); convert_xml_checkbox2.addActionListener(new ConvertXMLCheckboxListener()); saveas_combobox.addActionListener(new SaveasListener()); } /** Destructor. */ public void destroy() { saveas_label = null; saveas_combobox = null; all_collections.clear(); all_collections = null; cancel_button = null; details_textarea = null; details_label = null; list = null; ok_button = null; prompt = null; if (selected_collections!=null) { selected_collections.clear(); selected_collections = null; } title_field = null; title_label = null; } /** This method causes the modal prompt to be displayed. * returns true if it has exported the collections that are currently selected */ public boolean display() { // Top pane instructions_pane = new JPanel(new BorderLayout()); instructions_pane.setBorder(BorderFactory.createEmptyBorder(0,0,5,5)); instructions_pane.add(new JScrollPane(instructions_textarea), BorderLayout.CENTER); title_label.setBorder(BorderFactory.createEmptyBorder(0,5,0,15)); JPanel title_pane = new JPanel(new BorderLayout()); title_pane.add(title_label, BorderLayout.WEST); title_pane.add(title_field, BorderLayout.CENTER); title_pane.add(folder_button, BorderLayout.EAST); //apply xsl pane convert_xml_pane1.removeAll(); convert_xml_pane2.removeAll(); mapping_xml_pane.removeAll(); convert_xml_pane.removeAll(); convert_xml_pane1.add(convert_xml_checkbox1, BorderLayout.WEST); convert_xml_pane1.add(convert_xml_field1, BorderLayout.CENTER); convert_xml_pane1.add(convert_xml_button1, BorderLayout.EAST); convert_xml_pane2.add(convert_xml_checkbox2, BorderLayout.WEST); convert_xml_pane2.add(convert_xml_field2, BorderLayout.CENTER); convert_xml_pane2.add(convert_xml_button2, BorderLayout.EAST); mapping_xml_pane.add(mapping_xml_checkbox, BorderLayout.WEST); mapping_xml_pane.add(mapping_xml_field, BorderLayout.CENTER); mapping_xml_pane.add(convert_xml_button3, BorderLayout.EAST); convert_xml_pane.add(convert_xml_pane1); String saveas = (String)saveas_combobox.getSelectedItem(); if (saveas.equals("MARCXML")){ convert_xml_pane.add(mapping_xml_pane); convert_xml_pane.add(output_single_checkbox); } else{ if (saveas.equals("METS")){ convert_xml_pane.add(convert_xml_pane2); } } convert_xml_pane.revalidate(); convert_xml_pane.repaint(); // Save as pane JPanel saveas_pane = new JPanel(new BorderLayout()); saveas_label.setBorder(BorderFactory.createEmptyBorder(0,5,0,15)); saveas_pane.add(saveas_label, BorderLayout.WEST); saveas_pane.add(saveas_combobox, BorderLayout.CENTER); JPanel tmp_pane = new JPanel(new BorderLayout()); tmp_pane.add(saveas_pane, BorderLayout.NORTH); tmp_pane.add(title_pane, BorderLayout.CENTER); instructions_pane.add(tmp_pane, BorderLayout.NORTH); instructions_pane.add(convert_xml_pane, BorderLayout.CENTER); // Central pane JPanel list_pane = new JPanel(new BorderLayout()); list_pane.add(list_label, BorderLayout.NORTH); list_pane.add(new JScrollPane(list), BorderLayout.CENTER); list_pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0)); JPanel details_pane = new JPanel(new BorderLayout()); details_pane.add(details_label, BorderLayout.NORTH); details_pane.add(new JScrollPane(details_textarea), BorderLayout.CENTER); details_pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); JPanel central_pane = new JPanel(new GridLayout(2, 1)); central_pane.add(list_pane); central_pane.add(details_pane); central_pane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); // Lower pane JPanel button_pane = new JPanel(new GridLayout(1, 2)); button_pane.add(ok_button); button_pane.add(cancel_button); button_pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); JPanel lower_pane = new JPanel(new BorderLayout()); lower_pane.add(button_pane, BorderLayout.SOUTH); lower_pane.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5)); // Final. JPanel content_pane = (JPanel)this.getContentPane(); content_pane.setLayout(new BorderLayout()); content_pane.add(instructions_pane, BorderLayout.NORTH); content_pane.add(central_pane, BorderLayout.CENTER); content_pane.add(lower_pane, BorderLayout.SOUTH); // Center and display. Dimension screen_size = Configuration.screen_size; this.setLocation((screen_size.width - SIZE.width) / 2, (screen_size.height - SIZE.height) / 2); this.setVisible(true); // blocks until the dialog is killed return true; } /** This method calls the builcol.pl scripts via a GShell so as to not lock up the processor. * @see org.greenstone.gatherer.Configuration * @see org.greenstone.gatherer.Gatherer * @see org.greenstone.gatherer.collection.Collection * @see org.greenstone.gatherer.gui.BuildOptions * @see org.greenstone.gatherer.shell.GShell * @see org.greenstone.gatherer.shell.GShellListener * @see org.greenstone.gatherer.shell.GShellProgressMonitor * @see org.greenstone.gatherer.util.Utility */ public void exportAsCollections() { DebugStream.println("ExportAsPrompt.exportAsCollections()"); int num_collections = selected_collections.size(); if (num_collections == 0) return; cd_title = title_field.getText(); String export_type = (String) saveas_combobox.getSelectedItem(); // Generate the export.pl command ArrayList command_parts_list = new ArrayList(); if (Utility.isWindows() && (!Gatherer.isGsdlRemote)) { command_parts_list.add(Configuration.perl_path); command_parts_list.add("-S"); } command_parts_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "export.pl"); command_parts_list.add("-gli"); command_parts_list.add("-language"); command_parts_list.add(Configuration.getLanguage()); command_parts_list.add("-removeold"); command_parts_list.add("-saveas"); command_parts_list.add(export_type); command_parts_list.add("-exportdir"); String export_dir = LocalGreenstone.getTmpDirectoryPath(); if (cd_title.equals("")) { export_dir += "exported_" + export_type; } else { File cd_file = new File(cd_title); if (cd_file.isAbsolute()) export_dir = cd_title + File.separator + "exported_" + export_type; else{ cd_title = cd_title.replaceAll("\\s+",""); cd_title = cd_title.replaceAll("\\\\+","/"); cd_title = cd_title.replaceAll("/+","/"); export_dir +=cd_title; } } command_parts_list.add(export_dir); if (!export_type.equals("METS") && xsl_file1 !=null){ command_parts_list.add("-xsltfile"); command_parts_list.add(xsl_file1.getPath()); } //add command specific to MARCXML if (export_type.equals("MARCXML")){ //add default transformation file if (xsl_file1 == null){ command_parts_list.add("-xsltfile"); command_parts_list.add(Configuration.gsdl_path+"etc"+File.separator+"dc2marc.xsl"); } command_parts_list.add("-mapping_file"); //default mapping file if (mapping_file == null){ command_parts_list.add(Configuration.gsdl_path+"etc"+File.separator+"dc2marc-mapping.xml"); } else{ command_parts_list.add(mapping_file.getPath()); } if (output_single_checkbox.isSelected()){ command_parts_list.add("-group_marc"); } } if (export_type.equals("METS") && xsl_file1 !=null){ command_parts_list.add("-xslt_txt"); command_parts_list.add(xsl_file1.getPath()); } if (export_type.equals("METS") && xsl_file2 !=null){ command_parts_list.add("-xslt_mets"); command_parts_list.add(xsl_file2.getPath()); } for (int i = 0; i < num_collections; i++) { command_parts_list.add(((BasicCollectionConfiguration) selected_collections.get(i)).getShortName()); } DebugStream.print("export command = "); for (int i = 0; i < command_parts_list.size(); i++) { DebugStream.print(command_parts_list.get(i) + " "); //System.err.print(command_parts_list.get(i) + " "); } DebugStream.println(""); // Run the export.pl command String[] command_parts = (String[]) command_parts_list.toArray(new String[0]); progress_monitor = new GDefaultProgressMonitor(); GShell process = new GShell(command_parts, GShell.EXPORTAS, 3, this,progress_monitor , GShell.GSHELL_EXPORTAS); process.start(); //process.run(); DebugStream.println("ExportAsPrompt.exportAsCollections().return"); } public void cancelExporting(){ progress_monitor.setStop(true); } /** Shows an export complete prompt. * @param success A boolean indicating if the collection was successfully deleted. * @see org.greenstone.gatherer.collection.Collection */ public void resultPrompt(boolean success, String extra) { args = new String[2]; StringBuffer coll_names = new StringBuffer(); for (int i=0; i0) { coll_names.append(", "); } BasicCollectionConfiguration complete_collection = (BasicCollectionConfiguration)selected_collections.get(i); coll_names.append(complete_collection.getName() + StaticStrings.SPACE_CHARACTER + StaticStrings.OPEN_PARENTHESIS_CHARACTER + complete_collection.getShortName() + StaticStrings.CLOSE_PARENTHESIS_CHARACTER); complete_collection = null; } args[0] = coll_names.toString(); String export_type = (String) saveas_combobox.getSelectedItem(); args[1] = LocalGreenstone.getTmpDirectoryPath(); if (cd_title.equals("")) { args[1] += "exported_" + export_type; } else { File cd_file = new File(cd_title); if (cd_file.isAbsolute()) args[1] = cd_title + File.separator + "exported_" + export_type; else{ cd_title = cd_title.replaceAll("\\s+",""); cd_title = cd_title.replaceAll("\\\\+","/"); cd_title = cd_title.replaceAll("/+","/"); args[1] +=cd_title; } } String title; String label; String details; if (success) { String successMessage = (selected_collections.size()==1) ? "ExportAsPrompt.Successful_ExportOne" : "ExportAsPrompt.Successful_ExportMany"; title = Dictionary.get("ExportAsPrompt.Successful_Title"); label = Dictionary.get(successMessage, args); details = Dictionary.get("ExportAsPrompt.Successful_Details", args); } else { String failedMessage = (selected_collections.size()==1) ? "ExportAsPrompt.Failed_ExportOne" : "ExportAsPrompt.Failed_ExportMany"; title = Dictionary.get("ExportAsPrompt.Failed_Title"); label = Dictionary.get(failedMessage, args); details = Dictionary.get("ExportAsPrompt.Failed_Details", args); } SimpleResultDialog result_dialog = new SimpleResultDialog(title, label, details); result_dialog.setVisible(true); // Blocks result_dialog.dispose(); result_dialog = null; } /** Method to scan the collect directory retrieving and reloading each collection it finds, while building the list of known collections. * @see org.greenstone.gatherer.Configuration * @see org.greenstone.gatherer.Gatherer * @see org.greenstone.gatherer.util.ArrayTools * @see org.greenstone.gatherer.util.Utility */ private void scanForCollections() { // Start at the collect dir. File collect_directory = new File(Gatherer.getCollectDirectoryPath()); if (collect_directory.exists()) { // Now for each child directory see if it contains a .col file and // if so try to load it.. File collections[] = collect_directory.listFiles(); ArrayTools.sort(collections); for(int i = 0; collections != null && i < collections.length; i++) { if(collections[i].isDirectory() && !collections[i].getName().equals(StaticStrings.MODEL_COLLECTION_NAME)) { File config_file = new File(collections[i], Utility.CONFIG_FILE); if (config_file.exists()) { BasicCollectionConfiguration config = new BasicCollectionConfiguration(config_file); all_collections.add(config); config = null; } } } } // Otherwise the collect directory doesn't actually exist, so there ain't much we can do. } /** All implementation of GShellListener must include this method so the listener can be informed of messages from the GShell. * @param event A GShellEvent that contains, amoung other things, the message. */ public synchronized void message(GShellEvent event) { // Ignore the messages from RecPlug with 'show_progress' set (used for progress bars) String message = event.getMessage(); if (message.startsWith("export.pl>")) { message = message.substring(13); //DebugStream.println("message = "+event.getMessage()); error_message.append(message); error_message.append("\n"); } } /** 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. * @param event A GShellEvent that contains details of the initial state of the GShell before task comencement. */ public synchronized void processBegun(GShellEvent event) { // We don't care. } /** All implementation of GShellListener must include this method so the listener can be informed when a GShell completes its task. * @param event A GShellEvent that contains details of the final state of the GShell after task completion. */ public synchronized void processComplete(GShellEvent event) { successful = false; if(event.getStatus() == GShell.OK) { if(event.getType() == GShell.EXPORTAS) { successful = true; } } ok_button_listener.processComplete(); } /** A button listener implementation, which listens for actions on the close button and disposes of the dialog when detected. */ private class CancelButtonListener implements ActionListener { /** Any implementation of ActionListener must include this method so we can be informed when the button is actioned. * @param event An ActionEvent containing all the relevant information garnered from the event itself. */ public void actionPerformed(ActionEvent event) { prompt.dispose(); } } /** This private class listens for selection events in from the list and then displays the appropriate details for that collection. */ private class CollectionListListener implements ListSelectionListener { /** Any implementation of ListSelectionListener must include this method so we can be informed when the list selection changes. * @param event a ListSelectionEvent containing all the relevant information garnered from the event itself */ public void valueChanged(ListSelectionEvent event) { // Can only export when something is ticked ok_button.setEnabled(!list.isNothingTicked()); if (list.isSelectionEmpty()) { // This only happens when the dialog is first entered details_textarea.setText(Dictionary.get("DeleteCollectionPrompt.No_Collection")); return; } collection = (BasicCollectionConfiguration) ((CheckListEntry) list.getSelectedValue()).getObject(); args = new String[3]; args[0] = collection.getCreator(); args[1] = collection.getMaintainer(); args[2] = collection.getDescription(); details_textarea.setText(Dictionary.get("DeleteCollectionPrompt.Details", args)); details_textarea.setCaretPosition(0); } } /** The OK button listener implementation. */ private class OKButtonListener implements ActionListener { private Component glass_pane; private MouseListener mouse_blocker_listener; private ProgressDialog progress_dialog; /** Any implementation of ActionListener must include this method so we can be informed when the button is actioned. * @param event An ActionEvent containing all the relevant information garnered from the event itself. * @see org.greenstone.gatherer.Configuration * @see org.greenstone.gatherer.Gatherer * @see org.greenstone.gatherer.util.Utility */ public void actionPerformed(ActionEvent event) { ///ystem.err.println("OK Clicked"); // Make sure there are some colls specified selected_collections = list.getTicked(); error_message = new StringBuffer(); // Set the cursor to hourglass glass_pane = getGlassPane(); mouse_blocker_listener = new MouseAdapter() {}; glass_pane.addMouseListener(mouse_blocker_listener); glass_pane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); glass_pane.setVisible(true); // Export the selected collection. ///ystem.err.println("Exporting As for named collections"); exportAsCollections(); // Show progress dialog ///ystem.err.println("Showing progress dialog"); progress_dialog = new ProgressDialog(); progress_dialog.setVisible(true); } public void processComplete() { ///ystem.err.println("Process complete"); // Dispose of progress dialog progress_dialog.setVisible(false); progress_dialog.dispose(); progress_dialog = null; // unset the cursor glass_pane.setVisible(false); glass_pane.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); glass_pane.removeMouseListener(mouse_blocker_listener); glass_pane = null; mouse_blocker_listener= null; if (successful) { resultPrompt(true, error_message.toString()); } else { resultPrompt(false, error_message.toString()); } error_message = null; convert_xml_button1.setEnabled(false); xsl_file1 = null; convert_xml_field1.setText(""); convert_xml_checkbox1.setSelected(false); convert_xml_button2.setEnabled(false); xsl_file2 = null; convert_xml_field2.setText(""); convert_xml_checkbox2.setSelected(false); mapping_xml_checkbox.setSelected(false); output_single_checkbox.setSelected(false); convert_xml_button3.setEnabled(false); mapping_xml_field.setText(""); mapping_file = null; } private class ProgressDialog extends ModalDialog { private Dimension size = new Dimension(400,110); public ProgressDialog() { super(Gatherer.g_man, Dictionary.get("ExportAsPrompt.Title"), true); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setSize(size); JPanel content_pane = (JPanel) getContentPane(); JLabel progress_label = new JLabel(Dictionary.get("ExportAsPrompt.Progress_Label")); JProgressBar progress_bar = new JProgressBar(); progress_bar.setIndeterminate(true); content_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); GLIButton cancel_button = new GLIButton(Dictionary.get("ExportAsPrompt.Cancel"),Dictionary.get("ExportAsPrompt.Cancel_Tooltip")); cancel_button.setMnemonic(KeyEvent.VK_C); cancel_button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ cancelExporting(); } }); JPanel cancel_panel = new JPanel(new FlowLayout(FlowLayout.CENTER,0,0)); cancel_panel.add(cancel_button); content_pane.setLayout(new BorderLayout(0,5)); content_pane.add(progress_label, BorderLayout.NORTH); content_pane.add(progress_bar, BorderLayout.CENTER); content_pane.add(cancel_panel, BorderLayout.SOUTH); // Position Rectangle frame_bounds = Gatherer.g_man.getBounds(); setLocation(frame_bounds.x + (frame_bounds.width - size.width) / 2, frame_bounds.y + (frame_bounds.height - size.height) / 2); } } } private class ConvertXMLCheckboxListener implements ActionListener { public void actionPerformed(ActionEvent event) { convert_xml_button1.setEnabled(convert_xml_checkbox1.isSelected()); convert_xml_button2.setEnabled(convert_xml_checkbox2.isSelected()); convert_xml_button3.setEnabled(mapping_xml_checkbox.isSelected()); } } private class SaveasListener implements ActionListener { public void actionPerformed(ActionEvent event) { convert_xml_checkbox1.setSelected(false); convert_xml_checkbox2.setSelected(false); mapping_xml_checkbox.setSelected(false); output_single_checkbox.setSelected(false); convert_xml_button1.setEnabled(false); convert_xml_button2.setEnabled(false); convert_xml_button3.setEnabled(false); convert_xml_field1.setText(""); convert_xml_field2.setText(""); mapping_xml_field.setText(""); String saveas = (String)saveas_combobox.getSelectedItem(); if (convert_xml_pane.getComponentCount() > 1){ convert_xml_pane.remove(1); if (convert_xml_pane.getComponentCount() > 1){ convert_xml_pane.remove(1); } } if (!saveas.equals("METS")){ convert_xml_checkbox1.setText(Dictionary.get("ExportAsPrompt.ApplyXSL",(String)plugoutMap.get(saveas))); if (saveas.equals("MARCXML")){ convert_xml_pane.add(mapping_xml_pane); convert_xml_pane.add(output_single_checkbox); } } else{ String[] docs = ((String)plugoutMap.get(saveas)).split(","); convert_xml_checkbox1.setText(Dictionary.get("ExportAsPrompt.ApplyXSL",docs[0])); convert_xml_checkbox2.setText(Dictionary.get("ExportAsPrompt.ApplyXSL",docs[1])); convert_xml_pane.add(convert_xml_pane2); } convert_xml_pane.revalidate(); convert_xml_pane.repaint(); instructions_pane.revalidate(); instructions_pane.repaint(); } } private class ConvertXMLButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { JFileChooser chooser = new JFileChooser(); // Note: source for ExampleFileFilter can be found in FileChooserDemo, // under the demo/jfc directory in the Java 2 SDK, Standard Edition. javax.swing.filechooser.FileFilter filter = new javax.swing.filechooser.FileFilter(){ public boolean accept(File f){ return f.getPath().endsWith(".xsl")||f.isDirectory()||f.getPath().endsWith(".xml"); } public String getDescription(){ return "XSL or XML file"; } }; chooser.setFileFilter(filter); int returnVal = chooser.showOpenDialog(prompt); if(returnVal == JFileChooser.APPROVE_OPTION) { if (event.getSource() == convert_xml_button1){ xsl_file1 = chooser.getSelectedFile(); convert_xml_field1.setText(xsl_file1.getPath()); } else if (event.getSource() == convert_xml_button2){ xsl_file2 = chooser.getSelectedFile(); convert_xml_field2.setText(xsl_file2.getPath()); } else { mapping_file = chooser.getSelectedFile(); mapping_xml_field.setText(mapping_file.getPath()); } } } } private class FolderButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnVal = chooser.showOpenDialog(prompt); if(returnVal == JFileChooser.APPROVE_OPTION) { File folder_name = chooser.getSelectedFile(); title_field.setText(folder_name.getPath()); } } } }