org.executequery.gui.importexport.ImportExportPanelThree.java Source code

Java tutorial

Introduction

Here is the source code for org.executequery.gui.importexport.ImportExportPanelThree.java

Source

/*
 * ImportExportPanelThree.java
 *
 * Copyright (C) 2002-2015 Takis Diakoumis
 *
 * 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 3
 * of the License, or 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, see <http://www.gnu.org/licenses/>.
 *
 */

package org.executequery.gui.importexport;

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

import org.apache.commons.lang.StringUtils;
import org.executequery.GUIUtilities;
import org.executequery.components.FileChooserDialog;
import org.executequery.gui.DefaultTable;

/**
 *
 * @author   Takis Diakoumis
 * @version  $Revision: 1487 $
 * @date     $Date: 2015-08-23 22:21:42 +1000 (Sun, 23 Aug 2015) $
 */
public class ImportExportPanelThree extends AbstractImportExportPanel {

    private JTable table;

    private FilePerTableTableModel filePerTableTableModel;

    private SingleFileForTablesTableModel singleFileForTablesTableModel;

    public ImportExportPanelThree(ImportExportWizard importExportWizard) {

        super(new GridBagLayout(), importExportWizard);
        init();
    }

    private void init() {

        table = new DefaultTable();
        table.setRowHeight(23);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setColumnSelectionAllowed(false);
        table.getTableHeader().setReorderingAllowed(false);

        JScrollPane scroller = new JScrollPane(table);
        scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 5, 5, 5);
        gbc.anchor = GridBagConstraints.NORTHWEST;
        add(new JLabel(getString("ImportExportPanelThree.label")), gbc);
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridy = 1;
        gbc.insets.top = 0;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        add(scroller, gbc);

    }

    private BrowseButtonRenderer browseButtonCellRenderer;

    private BrowseButtonEditor browseButtonCellEditor;

    private void prepareTable() {
        TableColumnModel tcm = table.getColumnModel();
        TableColumn col = tcm.getColumn(0);
        col.setPreferredWidth(140);

        col = tcm.getColumn(1);
        col.setPreferredWidth(255);

        if (browseButtonCellRenderer == null) {

            browseButtonCellRenderer = new BrowseButtonRenderer();
        }

        if (browseButtonCellEditor == null) {

            browseButtonCellEditor = new BrowseButtonEditor(new JCheckBox());
        }

        col = tcm.getColumn(2);
        col.setCellRenderer(browseButtonCellRenderer);
        col.setCellEditor(browseButtonCellEditor);
        col.setPreferredWidth(80);
    }

    public boolean hasSelections() {

        if (isSingleFileMultiTableExport()) {

            return (singleFileForTablesTableModel.getValueAt(0, 1) != null);

        } else {

            return filePerTableTableModel.hasValidSelections();
        }

    }

    public String getSingleFileExportName() {

        if (singleFileForTablesTableModel != null) {

            return singleFileForTablesTableModel.getExportDataFilePath();
        }

        return null;
    }

    public void panelSelected() {

        if (isSingleFileMultiTableExport()) {

            initSingleFileForTablesTableModel();

        } else {

            initFilePerTableTableModel();
            filePerTableTableModel.setImportExportFileList(importExportDataModel().getImportExportFiles());
        }

        prepareTable();
    }

    private boolean isSingleFileMultiTableExport() {

        return importExportDataModel().isSingleFileMultiTableExport();
    }

    private void initFilePerTableTableModel() {

        if (filePerTableTableModel == null) {

            filePerTableTableModel = new FilePerTableTableModel();
        }

        table.setModel(filePerTableTableModel);
    }

    private void initSingleFileForTablesTableModel() {

        if (singleFileForTablesTableModel == null) {

            singleFileForTablesTableModel = new SingleFileForTablesTableModel();
        }

        table.setModel(singleFileForTablesTableModel);
    }

    private String getFileSuffix() {

        return importExportWizard().getFileSuffix();
    }

    public class BrowseButtonEditor extends DefaultCellEditor {

        private String lastPath;
        private JButton button;
        private boolean isPushed;

        private String browseButtonText;

        public BrowseButtonEditor(JCheckBox checkBox) {

            super(checkBox);

            button = new JButton();

            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    fireEditingStopped();
                }
            });

            browseButtonText = getString("ImportExportPanelThree.browseButton");
        }

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row,
                int column) {

            button.setText(browseButtonText);
            isPushed = true;
            return button;
        }

        public Object getCellEditorValue() {

            if (isPushed) {
                FileChooserDialog fileChooser = null;

                if (lastPath == null) {
                    fileChooser = new FileChooserDialog();
                } else {
                    fileChooser = new FileChooserDialog(lastPath);
                }

                String dialogTitle = null;

                if (isExport()) {

                    dialogTitle = getString("ImportExportPanelThree.exportFileDialogTitle");

                } else {

                    dialogTitle = getString("ImportExportPanelThree.importFileDialogTitle");
                }

                fileChooser.setDialogTitle(dialogTitle);
                fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
                fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);

                int result = fileChooser.showDialog(GUIUtilities.getInFocusDialogOrWindow(), "Select");
                if (result == JFileChooser.CANCEL_OPTION) {
                    return "";
                }

                File file = fileChooser.getSelectedFile();
                if (!isExport()) {

                    if (file == null || (!file.exists() && !file.isFile())) {

                        GUIUtilities.displayErrorMessage(getString("ImportExportPanelThree.invalidFileName"));
                    }

                } else {

                    String fileName = file.getName();
                    String suffix = findExtension(fileName);

                    if (StringUtils.isBlank(suffix)) {

                        file = new File(file.getParent(), fileName + "." + getFileSuffix());
                    }

                }

                lastPath = file.getParent();

                if (isSingleFileMultiTableExport()) {

                    singleFileForTablesTableModel.setValueAt(file, table.getEditingRow(), 1);

                } else {

                    filePerTableTableModel.setDataFile(table.getEditingRow(), file);
                }

            }

            isPushed = false;
            return "";
        }

        private String findExtension(String fileName) {
            int index = fileName.lastIndexOf('.');
            if (index != -1) {
                return fileName.substring(index);
            }
            return null;
        }

        public boolean stopCellEditing() {
            isPushed = false;
            return super.stopCellEditing();
        }

        protected void fireEditingStopped() {
            super.fireEditingStopped();
        }

    } // BrowseButtonEditor

    private static final String[] TABLE_HEADER = { "Table Name", "File Path", "" };

    /** 
     * Defines the table model for the table to file selection for the transfer. 
     */
    class FilePerTableTableModel extends AbstractTableModel {

        private List<ImportExportFile> data;

        private boolean hasValidSelections() {

            if (data != null && !data.isEmpty()) {

                for (ImportExportFile importExportFile : data) {

                    if (importExportFile.getFile() == null) {

                        return false;
                    }

                }

                return true;
            }

            return false;
        }

        public int getRowCount() {

            if (data == null) {

                return 0;
            }

            return data.size();
        }

        public int getColumnCount() {
            return TABLE_HEADER.length;
        }

        public void setImportExportFileList(List<ImportExportFile> data) {
            this.data = data;
            if (table.isEditing()) {
                fireTableRowsUpdated(0, data.size());
            }
        }

        public void setDataFile(int row, File file) {
            ImportExportFile importExportFile = (ImportExportFile) data.get(row);
            importExportFile.setFile(file);
            fireTableRowsUpdated(row, row);
        }

        public Object getValueAt(int row, int col) {
            ImportExportFile importExportFile = (ImportExportFile) data.get(row);

            switch (col) {
            case 0:
                return importExportFile.getDatabaseTable().getName();
            case 1:

                if (importExportFile.getFile() != null) {
                    return importExportFile.getFile().getAbsolutePath();
                }

                return "";

            default:
                return null;
            }
        }

        public void setValueAt(Object value, int row, int col) {

            if (col == 1) {

                ImportExportFile importExportFile = (ImportExportFile) data.get(row);
                importExportFile.setFile(new File(value.toString()));

                fireTableRowsUpdated(row, row);
            }
        }

        public String getColumnName(int col) {
            return TABLE_HEADER[col];
        }

        public boolean isCellEditable(int row, int col) {
            return (col > 0);
        }

    } // FilePerTableTableModel

    /** 
     * Defines the table model for the table to file selection for the transfer. 
     */
    class SingleFileForTablesTableModel extends AbstractTableModel {

        private File singleExportfile;

        public int getRowCount() {
            return 1;
        }

        public String getExportDataFilePath() {

            if (singleExportfile != null) {

                return singleExportfile.getAbsolutePath();
            }

            return null;
        }

        public int getColumnCount() {
            return TABLE_HEADER.length;
        }

        public Object getValueAt(int row, int col) {

            switch (col) {
            case 0:
                return "ALL TABLES";
            case 1:

                if (singleExportfile != null) {
                    return singleExportfile.getAbsolutePath();
                }

                return null;

            default:
                return null;
            }
        }

        public void setValueAt(Object value, int row, int col) {

            if (col == 1) {

                if (value != null && !(value instanceof File)) {

                    singleExportfile = new File(value.toString());

                } else {

                    singleExportfile = (File) value;
                }

                fireTableRowsUpdated(row, row);
            }

        }

        public String getColumnName(int col) {
            return TABLE_HEADER[col];
        }

        public boolean isCellEditable(int row, int col) {
            return (col > 0);
        }

    } // SingleFileForTablesTableModel

    class BrowseButtonRenderer extends JButton implements TableCellRenderer {

        public BrowseButtonRenderer() {
            setText(getString("ImportExportPanelThree.browseButton"));
            setMargin(new Insets(1, 1, 1, 1));
        }

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                boolean hasFocus, int row, int column) {
            return this;
        }

    } // BrowseButtonRenderer

}