package org.lodder.subtools.multisubdownloader.gui.dialog; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; import org.lodder.subtools.multisubdownloader.Messages; import org.lodder.subtools.multisubdownloader.gui.extra.MemoryFolderChooser; import org.lodder.subtools.multisubdownloader.gui.extra.progress.StatusMessenger; import org.lodder.subtools.multisubdownloader.gui.panels.EpisodeLibraryPanel; import org.lodder.subtools.multisubdownloader.gui.panels.MovieLibraryPanel; import org.lodder.subtools.multisubdownloader.gui.panels.VideoLibraryPanel; import org.lodder.subtools.multisubdownloader.gui.workers.TypedRenameWorker; import org.lodder.subtools.multisubdownloader.lib.ReleaseFactory; import org.lodder.subtools.multisubdownloader.settings.model.LibrarySettings; import org.lodder.subtools.multisubdownloader.settings.model.Settings; import org.lodder.subtools.sublibrary.Manager; import org.lodder.subtools.sublibrary.model.VideoType; import org.lodder.subtools.sublibrary.settings.model.MappingTvdbScene; public class RenameDialog extends MultiSubDialog implements PropertyChangeListener { /** * */ private static final long serialVersionUID = 1L; private VideoLibraryPanel pnlLibrary; private JTextField txtRenameLocation; private JCheckBox chkRecursive; private List<MappingTvdbScene> listTranslate = new ArrayList<MappingTvdbScene>(); private ProgressDialog progressDialog; /** * Create the dialog. */ public RenameDialog(JFrame frame, final Settings settings, final VideoType videoType, final Manager manager) { super(frame, videoType + Messages.getString("RenameDialog.Rename"), false); listTranslate = settings.getMappingSettings().getMappingList(); setResizable(false); setBounds(100, 100, 650, 680); getContentPane().setLayout(new BorderLayout()); JPanel contentPanel = new JPanel(); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); GridBagLayout gbl_contentPanel = new GridBagLayout(); gbl_contentPanel.columnWidths = new int[] {0, 0}; gbl_contentPanel.rowHeights = new int[] {0, 0, 0}; gbl_contentPanel.columnWeights = new double[] {1.0, Double.MIN_VALUE}; gbl_contentPanel.rowWeights = new double[] {0.0, 0.0, Double.MIN_VALUE}; contentPanel.setLayout(gbl_contentPanel); { JPanel panel = new JPanel(); GridBagConstraints gbc_panel = new GridBagConstraints(); gbc_panel.insets = new Insets(0, 0, 5, 0); gbc_panel.fill = GridBagConstraints.BOTH; gbc_panel.gridx = 0; gbc_panel.gridy = 0; contentPanel.add(panel, gbc_panel); GridBagLayout gbl_panel = new GridBagLayout(); gbl_panel.columnWidths = new int[] {208, 151, 151, 0}; gbl_panel.rowHeights = new int[] {40, 0, 0}; gbl_panel.columnWeights = new double[] {0.0, 0.0, 0.0, Double.MIN_VALUE}; gbl_panel.rowWeights = new double[] {0.0, 0.0, Double.MIN_VALUE}; panel.setLayout(gbl_panel); { JLabel lblFolderToRenamemove = new JLabel(Messages.getString("RenameDialog.FolderForRename/Move")); GridBagConstraints gbc_lblFolderToRenamemove = new GridBagConstraints(); gbc_lblFolderToRenamemove.fill = GridBagConstraints.BOTH; gbc_lblFolderToRenamemove.insets = new Insets(0, 0, 5, 5); gbc_lblFolderToRenamemove.gridx = 0; gbc_lblFolderToRenamemove.gridy = 0; panel.add(lblFolderToRenamemove, gbc_lblFolderToRenamemove); } { JButton btnBrowser = new JButton(Messages.getString("RenameDialog.Browse")); btnBrowser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { File path = MemoryFolderChooser.getInstance().selectDirectory(getContentPane(), Messages.getString("RenameDialog.SelectFolderForRenameReplace")); txtRenameLocation.setText(path.getAbsolutePath()); } }); { txtRenameLocation = new JTextField(); GridBagConstraints gbc_txtRenameLocation = new GridBagConstraints(); gbc_txtRenameLocation.fill = GridBagConstraints.HORIZONTAL; gbc_txtRenameLocation.insets = new Insets(0, 0, 5, 5); gbc_txtRenameLocation.gridx = 1; gbc_txtRenameLocation.gridy = 0; panel.add(txtRenameLocation, gbc_txtRenameLocation); txtRenameLocation.setColumns(15); } GridBagConstraints gbc_btnBrowser = new GridBagConstraints(); gbc_btnBrowser.insets = new Insets(0, 0, 5, 0); gbc_btnBrowser.gridx = 2; gbc_btnBrowser.gridy = 0; panel.add(btnBrowser, gbc_btnBrowser); } { chkRecursive = new JCheckBox(Messages.getString("RenameDialog.RecursiveSearch")); GridBagConstraints gbc_chkRecursive = new GridBagConstraints(); gbc_chkRecursive.insets = new Insets(0, 0, 0, 5); gbc_chkRecursive.gridx = 1; gbc_chkRecursive.gridy = 1; panel.add(chkRecursive, gbc_chkRecursive); } } { if (videoType == VideoType.EPISODE) { pnlLibrary = new EpisodeLibraryPanel(settings.getEpisodeLibrarySettings(), manager, true); } else { pnlLibrary = new MovieLibraryPanel(settings.getMovieLibrarySettings(), manager, true); } GridBagConstraints gbc_panel = new GridBagConstraints(); gbc_panel.fill = GridBagConstraints.BOTH; gbc_panel.gridx = 0; gbc_panel.gridy = 1; contentPanel.add(pnlLibrary, gbc_panel); } { JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane, BorderLayout.SOUTH); { JButton renameButton = new JButton(Messages.getString("RenameDialog.Rename")); renameButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { ArrayList<MappingTvdbScene> list = new ArrayList<MappingTvdbScene>(); if (videoType == VideoType.EPISODE) { list = (ArrayList<MappingTvdbScene>) listTranslate; rename(new File(txtRenameLocation.getText()), new File(txtRenameLocation.getText()), settings, pnlLibrary.getLibrarySettings(), list, manager); } else { rename(new File(txtRenameLocation.getText()), new File(txtRenameLocation.getText()), new Settings(), pnlLibrary.getLibrarySettings(), list, manager); } setVisible(false); } }); renameButton.setActionCommand("Rename"); buttonPane.add(renameButton); getRootPane().setDefaultButton(renameButton); } { JButton cancelButton = new JButton(Messages.getString("RenameDialog.Cancel")); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { setVisible(false); } }); cancelButton.setActionCommand("Cancel"); buttonPane.add(cancelButton); } } } /** * * @param dir * @param basedir * @param settings * @param librarySettings can be different from the store librarySettings * @param list * @param manager */ protected void rename(File dir, File basedir, Settings settings, LibrarySettings librarySettings, ArrayList<MappingTvdbScene> list, Manager manager) { TypedRenameWorker renameWorker = new TypedRenameWorker(dir, librarySettings, VideoType.EPISODE, this.chkRecursive.isSelected(), manager); renameWorker.addPropertyChangeListener(this); renameWorker.setReleaseFactory(new ReleaseFactory(settings, manager)); progressDialog = new ProgressDialog(renameWorker); progressDialog.setVisible(true); renameWorker.execute(); } @Override public void propertyChange(PropertyChangeEvent event) { if (event.getSource() instanceof TypedRenameWorker) { final TypedRenameWorker renameWorker = (TypedRenameWorker) event.getSource(); if (renameWorker.isDone()) { progressDialog.setVisible(false); } else { final int progress = renameWorker.getProgress(); progressDialog.updateProgress(progress); StatusMessenger.instance.message(Messages.getString("RenameDialog.StatusRename")); } } } }