Package net.datacrow.console.windows.filerenamer

Source Code of net.datacrow.console.windows.filerenamer.FileRenamerPreviewDialog$PreviewGenerator

package net.datacrow.console.windows.filerenamer;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.TableColumn;

import net.datacrow.console.ComponentFactory;
import net.datacrow.console.Layout;
import net.datacrow.console.components.DcLongTextField;
import net.datacrow.console.components.tables.DcTable;
import net.datacrow.console.menu.DcFileRenamerPreviewPopupMenu;
import net.datacrow.console.menu.FileRenamerMenu;
import net.datacrow.console.windows.DcDialog;
import net.datacrow.core.DcRepository;
import net.datacrow.core.modules.DcModules;
import net.datacrow.core.objects.DcObject;
import net.datacrow.core.resources.DcResources;
import net.datacrow.filerenamer.FilePattern;
import net.datacrow.settings.DcSettings;
import net.datacrow.util.DcSwingUtilities;

public class FileRenamerPreviewDialog extends DcDialog implements ActionListener, MouseListener {

    private DcTable table = ComponentFactory.getDCTable(true, false);
    private JProgressBar progressBar = new JProgressBar();
    private JButton buttonStart = ComponentFactory.getButton(DcResources.getText("lblStart"));
    private JButton buttonCancel = ComponentFactory.getButton(DcResources.getText("lblCancel"));

    private PreviewGenerator generator;
   
    private FileRenamerDialog parent;
   
    private boolean affirmative = false;
   
    public FileRenamerPreviewDialog(FileRenamerDialog parent,
                                    Collection<DcObject> objects,
                                    FilePattern pattern,
                                    File baseDir) {
        super(parent);
       
        this.parent = parent;
       
        JMenu menu = new FileRenamerMenu(this);
        JMenuBar menuBar = ComponentFactory.getMenuBar();
        menuBar.add(menu);
        setJMenuBar(menuBar);       
       
        setHelpIndex("dc.tools.filerenamer");
        setTitle(DcResources.getText("lblFileRenamePreview"));
       
        build(pattern.getModule());
        generatePreview(objects, pattern, baseDir);

        setSize(DcSettings.getDimension(DcRepository.Settings.stFileRenamerPreviewDialogSize));
        setCenteredLocation();
        setModal(true);
    }
   
    private void generatePreview(Collection<DcObject> items, FilePattern pattern, File baseDir) {
        if (generator != null)
            generator.cancel();
       
        generator = new PreviewGenerator(this, items, pattern, baseDir);
        generator.start();
    }
   
    protected void addPreviewResult(DcObject dco, String oldFilename, String newFilename) {
        table.addRow(new Object[] {dco, oldFilename, newFilename});
    }
   
    protected void setBusy(boolean b) {
        buttonStart.setEnabled(!b);
    }

    protected void initProgressBar(int max) {
        progressBar.setValue(0);
        progressBar.setMaximum(max);
    }
   
    protected void updateProgressBar() {
        progressBar.setValue(progressBar.getValue() + 1);
    }
   
    public boolean isAffirmative() {
        return affirmative;
    }
   
    public Collection<DcObject> getObjects() {
      Collection<DcObject> items = new ArrayList<DcObject>();
        for (int row = 0; row < table.getRowCount(); row++) {
          items.add((DcObject) table.getValueAt(row, 0));
        }
        return items;
    }
   
    public void clear() {
        DcSettings.set(DcRepository.Settings.stFileRenamerPreviewDialogSize, getSize());
       
        table.clear();
        table = null;
       
        if (generator != null)
            generator.cancel();
       
        generator = null;
        buttonCancel = null;
        buttonStart = null;
        progressBar = null;
       
        parent = null;
       
        super.close();
    }
   
    @Override
    public void close() {
        setVisible(false);
        parent.notifyJobStopped();
       
        if (generator != null)
          generator.cancel();
    }

    private void build(int module) {
       
        //**********************************************************
        //Help panel
        //**********************************************************
       
        DcLongTextField textHelp = ComponentFactory.getLongTextField();
        JPanel helpPanel = new JPanel();
        helpPanel.setLayout(Layout.getGBL());

        textHelp.setBorder(null);
        JScrollPane scroller = new JScrollPane(textHelp);
        scroller.setBorder(null);
        scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        textHelp.setEditable(false);
        textHelp.setText(DcResources.getText("msgFileRenamePreviewHelp"));
        textHelp.setMargin(new Insets(5,5,5,5));

        scroller.setPreferredSize(new Dimension(100, 60));
        scroller.setMinimumSize(new Dimension(100, 60));
        scroller.setMaximumSize(new Dimension(800, 60));
       
        helpPanel.add(scroller, Layout.getGBC(0, 0, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                 new Insets(5, 5, 5, 5), 0, 0));
       
       
        //**********************************************************
        //Preview panel
        //**********************************************************
        JPanel panelPreview = new JPanel();
       
        table.setColumnCount(3);
        TableColumn tcDescription = table.getColumnModel().getColumn(0);
        JTextField textField = ComponentFactory.getTextFieldDisabled();
        tcDescription.setCellEditor(new DefaultCellEditor(textField));
        tcDescription.setHeaderValue(DcModules.get(module).getObjectName());

        TableColumn tcOldFilename = table.getColumnModel().getColumn(1);
        textField = ComponentFactory.getTextFieldDisabled();
        tcOldFilename.setCellEditor(new DefaultCellEditor(textField));
        tcOldFilename.setHeaderValue(DcResources.getText("lblOldFilename"));
       
        TableColumn tcNewFilename = table.getColumnModel().getColumn(2);
        textField = ComponentFactory.getTextFieldDisabled();
        tcNewFilename.setCellEditor(new DefaultCellEditor(textField));
        tcNewFilename.setHeaderValue(DcResources.getText("lblNewFilename"));
       
        table.addMouseListener(this);
        table.applyHeaders();
       
        panelPreview.setLayout(Layout.getGBL());
        panelPreview.add(new JScrollPane(table), Layout.getGBC( 0, 0, 5, 1, 10.0, 10.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
                 new Insets( 5, 5, 5, 5), 0, 0));

       
        // **********************************************************
        //Action panel
        //**********************************************************
        JPanel panelAction = new JPanel();
       
        buttonStart.setEnabled(false);
       
        buttonStart.addActionListener(this);
        buttonCancel.addActionListener(this);
       
        buttonStart.setActionCommand("confirm");
        buttonCancel.setActionCommand("cancel");
       
        panelAction.add(buttonStart);
        panelAction.add(buttonCancel);
       
        //**********************************************************
        //Main panel
        //**********************************************************
        this.getContentPane().setLayout(Layout.getGBL());

        this.getContentPane().add(helpPanel,    Layout.getGBC( 0, 0, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                 new Insets( 5, 5, 5, 5), 0, 0));
        this.getContentPane().add(panelPreview,  Layout.getGBC( 0, 1, 1, 1, 10.0, 10.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
                 new Insets( 5, 5, 5, 5), 0, 0));
        this.getContentPane().add(panelAction,   Layout.getGBC( 0, 2, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE,
                 new Insets( 5, 5, 5, 5), 0, 0));
        this.getContentPane().add(progressBar,   Layout.getGBC( 0, 3, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                 new Insets( 5, 5, 5, 5), 0, 0));
       
        pack();
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("confirm")) {
            affirmative = true;
            close();
        } else if (ae.getActionCommand().equals("remove")) {
            int[] rows = table.getSelectedRows();
            if (rows != null && rows.length > 0)
                table.remove(rows);
            else
                DcSwingUtilities.displayMessage("msgNoItemsSelectedToRemove");
        } else if (ae.getActionCommand().equals("cancel")) {
            close();
        }
    }
   
    private static class PreviewGenerator extends Thread {

        private Collection<DcObject> objects;
        private FilePattern pattern;
        private FileRenamerPreviewDialog dlg;
        private File baseDir;
       
        private boolean keepOnRunning = true;
       
        public PreviewGenerator(FileRenamerPreviewDialog dlg,
                                Collection<DcObject> objects,
                                FilePattern pattern,
                                File baseDir) {
            this.dlg = dlg;
            this.objects = objects;
            this.pattern = pattern;
            this.baseDir = baseDir;
        }

        public void cancel() {
            keepOnRunning = false;
        }
       
        @Override
        public void run() {
            dlg.initProgressBar(objects.size());
            dlg.setBusy(true);
           
            for (DcObject dco : objects) {

                if (!keepOnRunning) break;
               
                if (dco.getFilename() != null) {
                  File oldFile = new File(dco.getFilename());
                  String newFilename = pattern.getFilename(dco, oldFile, baseDir);
                 
                  dlg.addPreviewResult(dco, oldFile.toString(), newFilename);
                }
                dlg.updateProgressBar();
            }

            dlg.setBusy(false);
            objects = null;
            pattern = null;
            dlg = null;
        }
    }
   
    @Override
    public void mouseClicked(MouseEvent e) {}
    @Override
    public void mouseEntered(MouseEvent e) {}
    @Override
    public void mouseExited(MouseEvent e) {}
    @Override
    public void mousePressed(MouseEvent e) {}

    @Override
    public void mouseReleased(MouseEvent e) {
        if (SwingUtilities.isRightMouseButton(e)) {
           
            DcFileRenamerPreviewPopupMenu popupmenu = new DcFileRenamerPreviewPopupMenu(this);
            popupmenu.validate();
            popupmenu.show(table, e.getX(), e.getY());
        }
    }
}
TOP

Related Classes of net.datacrow.console.windows.filerenamer.FileRenamerPreviewDialog$PreviewGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.