package org.lodder.subtools.multisubdownloader.gui.panels;
import java.awt.Component;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.IOException;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
import org.lodder.subtools.multisubdownloader.gui.dialog.StructureBuilderDialog;
import org.lodder.subtools.multisubdownloader.gui.extra.MemoryFolderChooser;
import org.lodder.subtools.multisubdownloader.gui.extra.PartialDisableComboBox;
import org.lodder.subtools.multisubdownloader.lib.library.LibraryActionType;
import org.lodder.subtools.multisubdownloader.lib.library.LibraryOtherFileActionType;
import org.lodder.subtools.multisubdownloader.settings.model.LibrarySettings;
import org.lodder.subtools.sublibrary.Manager;
import org.lodder.subtools.sublibrary.model.VideoType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class VideoLibraryPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = -9175813173306481849L;
private LibrarySettings libSettings;
protected StructureFolderPanel pnlStructureFolder;
protected StructureFilePanel pnlStructureFile;
private VideoType videoType;
private JComboBox<LibraryActionType> cbxLibraryAction;
private JCheckBox chkReplaceWindowsChar;
private JCheckBox chkUseTVDBNaming;
private PartialDisableComboBox cbxLibraryOtherFileAction;
private SubtitleBackupPanel pnlBackup;
private Manager manager;
private Boolean renameMode;
private static final Logger LOGGER = LoggerFactory.getLogger(VideoLibraryPanel.class);
public VideoLibraryPanel(LibrarySettings libSettings, VideoType videoType, Manager manager,
Boolean renameMode) {
this.videoType = videoType;
this.manager = manager;
this.renameMode = renameMode;
initialize_ui();
setLibrarySettings(libSettings);
// repaint();
}
private void checkPosibleOtherFileActions() {
LibraryActionType libraryActionType = (LibraryActionType) cbxLibraryAction.getSelectedItem();
if (libraryActionType != null) {
for (int i = 0; i < cbxLibraryOtherFileAction.getModel().getSize(); i++) {
LibraryOtherFileActionType ofa =
(LibraryOtherFileActionType) cbxLibraryOtherFileAction.getItemAt(i);
if (libraryActionType.equals(LibraryActionType.MOVE)) {
if (ofa.equals(LibraryOtherFileActionType.MOVEANDRENAME)
|| ofa.equals(LibraryOtherFileActionType.RENAME)) {
cbxLibraryOtherFileAction.setItemEnabled(i, false);
} else {
cbxLibraryOtherFileAction.setItemEnabled(i, true);
}
} else if (libraryActionType.equals(LibraryActionType.RENAME)) {
if (ofa.equals(LibraryOtherFileActionType.MOVEANDRENAME)
|| ofa.equals(LibraryOtherFileActionType.MOVE)) {
cbxLibraryOtherFileAction.setItemEnabled(i, false);
} else {
cbxLibraryOtherFileAction.setItemEnabled(i, true);
}
} else if (libraryActionType.equals(LibraryActionType.MOVEANDRENAME)) {
// no disable needed
cbxLibraryOtherFileAction.setItemEnabled(i, true);
} else {
if (ofa.equals(LibraryOtherFileActionType.NOTHING)) {
cbxLibraryOtherFileAction.setItemEnabled(i, true);
} else {
cbxLibraryOtherFileAction.setItemEnabled(i, false);
}
}
}
}
}
private void checkEnableStatusPanel() {
LibraryActionType libraryActionType = (LibraryActionType) cbxLibraryAction.getSelectedItem();
if (libraryActionType != null) {
if (libraryActionType.equals(LibraryActionType.MOVE)) {
checkEnableStatus(pnlStructureFile, false);
checkEnableStatus(pnlStructureFolder, true);
} else if (libraryActionType.equals(LibraryActionType.RENAME)) {
checkEnableStatus(pnlStructureFile, true);
checkEnableStatus(pnlStructureFolder, false);
} else if (libraryActionType.equals(LibraryActionType.MOVEANDRENAME)) {
checkEnableStatus(pnlStructureFile, true);
checkEnableStatus(pnlStructureFolder, true);
} else {
checkEnableStatus(pnlStructureFile, false);
checkEnableStatus(pnlStructureFolder, false);
}
}
}
private void checkEnableStatus(JPanel panel, boolean status) {
for (Component c : panel.getComponents()) {
if (!(VideoType.MOVIE == videoType && c.equals(chkUseTVDBNaming))) {
if (c instanceof JTextField && ((JTextField) c).getText().isEmpty()
&& VideoType.MOVIE == videoType && !c.equals(pnlStructureFolder.getStructure())
&& !c.equals(pnlStructureFile.getTxtDefaultNlText())
&& !c.equals(pnlStructureFile.getTxtDefaultEnText())) {
c.setVisible(false);
} else if (c instanceof JButton && c.equals(pnlStructureFile.getBtnBuildStructure())
&& VideoType.MOVIE == videoType) {
c.setVisible(false);
} else {
c.setVisible(status);
}
if (c instanceof JCheckBox && ((JCheckBox) c).isSelected())
((JCheckBox) c).setSelected(status);
}
}
}
public boolean isValidPanelValues() {
LibraryActionType libraryActionType = (LibraryActionType) cbxLibraryAction.getSelectedItem();
if (libraryActionType != null) {
if (libraryActionType.equals(LibraryActionType.MOVEANDRENAME)
|| libraryActionType.equals(LibraryActionType.MOVE))
if (!pnlStructureFolder.getLibraryFolder().isEmpty()) {
File f = new File(pnlStructureFolder.getLibraryFolder());
try {
if (!f.getCanonicalFile().isDirectory()) {
final String message =
"Geen geldig pad is ingegeven in 'Map - Locatie' op Bibliotheek info ";
JOptionPane.showConfirmDialog(this, message, "MultiSubDownloader",
JOptionPane.CLOSED_OPTION, JOptionPane.ERROR_MESSAGE);
LOGGER
.debug("isValidPanelValues: Geen geldig pad is ingegeven in 'Map - Locatie' op Bibliotheek info.");
return false;
}
} catch (HeadlessException | IOException e) {
LOGGER.error(e.getMessage(), e);
}
}
}
return true;
}
public void setLibrarySettings(final LibrarySettings libSettings) {
this.libSettings = libSettings;
if (!renameMode) {
pnlBackup.setBackupSubtitleSelected(libSettings.isLibraryBackupSubtitle());
pnlBackup.setBackupSubtitlePath(libSettings.getLibraryBackupSubtitlePath().getAbsolutePath());
pnlBackup
.setBackupUseWebsiteFilenameSelected(libSettings.isLibraryBackupUseWebsiteFileName());
}
this.cbxLibraryAction.setSelectedItem(libSettings.getLibraryAction());
this.chkUseTVDBNaming.setSelected(libSettings.isLibraryUseTVDBNaming());
this.chkReplaceWindowsChar.setSelected(libSettings.isLibraryReplaceChars());
this.cbxLibraryOtherFileAction.setSelectedItem(libSettings.getLibraryOtherFileAction());
if (libSettings.getLibraryFolder() != null) {
pnlStructureFolder.setLibraryFolder(libSettings.getLibraryFolder().getAbsolutePath());
}
pnlStructureFolder.getStructure().setText(libSettings.getLibraryFolderStructure());
pnlStructureFolder.setRemoveEmptyFolderSelected(libSettings.isLibraryRemoveEmptyFolders());
pnlStructureFile.setFileStructure(libSettings.getLibraryFilenameStructure());
pnlStructureFile.setReplaceSpaceSelected(libSettings.isLibraryFilenameReplaceSpace());
pnlStructureFile.setReplaceSpaceChar(libSettings.getLibraryFilenameReplacingSpaceSign());
pnlStructureFolder.setReplaceSpaceSelected(libSettings.isLibraryFolderReplaceSpace());
pnlStructureFolder.setReplaceSpaceChar(libSettings.getLibraryFolderReplacingSpaceSign());
pnlStructureFile.setIncludeLanguageCodeSelected(libSettings.isLibraryIncludeLanguageCode());
pnlStructureFile.getTxtDefaultEnText().setText(libSettings.getDefaultEnText());
pnlStructureFile.getTxtDefaultNlText().setText(libSettings.getDefaultNlText());
if (pnlStructureFolder.getLibraryFolder().isEmpty()
&& pnlStructureFile.getFileStructure().isEmpty()
&& pnlStructureFolder.getStructure().getText().isEmpty()) initializeEmptyValues();
checkEnableStatusPanel();
checkPosibleOtherFileActions();
}
public LibrarySettings getLibrarySettings() {
if (!renameMode) {
this.libSettings.setLibraryBackupSubtitle(pnlBackup.isBackupSubtitleSelected());
this.libSettings.setLibraryBackupSubtitlePath(new File(pnlBackup.getBackupSubtitlePath()));
this.libSettings.setLibraryBackupUseWebsiteFileName(pnlBackup
.isBackupUseWebsiteFilenameSelected());
}
this.libSettings.setLibraryAction((LibraryActionType) this.cbxLibraryAction.getSelectedItem());
this.libSettings.setLibraryUseTVDBNaming(this.chkUseTVDBNaming.isSelected());
this.libSettings.setLibraryReplaceChars(this.chkReplaceWindowsChar.isSelected());
this.libSettings
.setLibraryOtherFileAction((LibraryOtherFileActionType) this.cbxLibraryOtherFileAction
.getSelectedItem());
this.libSettings.setLibraryFolder(new File(pnlStructureFolder.getLibraryFolder()));
this.libSettings.setLibraryFolderStructure(pnlStructureFolder.getStructure().getText());
this.libSettings.setLibraryRemoveEmptyFolders(pnlStructureFolder.isRemoveEmptyFolderSelected());
this.libSettings.setLibraryFilenameStructure(pnlStructureFile.getFileStructure());
this.libSettings.setLibraryFilenameReplaceSpace(pnlStructureFile.isReplaceSpaceSelected());
if (pnlStructureFile.isReplaceSpaceSelected()) {
this.libSettings.setLibraryFilenameReplacingSpaceSign(pnlStructureFile.getReplaceSpaceChar());
}
this.libSettings.setLibraryFolderReplaceSpace(pnlStructureFolder.isReplaceSpaceSelected());
if (pnlStructureFolder.isReplaceSpaceSelected()) {
this.libSettings.setLibraryFolderReplacingSpaceSign(pnlStructureFolder.getReplaceSpaceChar());
}
this.libSettings
.setLibraryIncludeLanguageCode(pnlStructureFile.isIncludeLanguageCodeSelected());
this.libSettings.setDefaultEnText(pnlStructureFile.getTxtDefaultEnText().getText());
this.libSettings.setDefaultNlText(pnlStructureFile.getTxtDefaultNlText().getText());
return libSettings;
}
protected abstract void initializeEmptyValues();
private void initialize_ui() {
setLayout(new MigLayout("", "[243.00,grow][grow]", "[][100px][][][][][125.00][]"));
add(new JLabel("Bibiliotheek opties"), "cell 0 0 2 1,gapy 5");
add(new JSeparator(), "cell 0 0 2 1,growx,gapy 5");
if (!renameMode) {
createBackupPanel();
add(pnlBackup, "cell 0 1 2 1,grow");
}
add(new JLabel("Volgende acties uitvoeren:"), "cell 0 2,alignx left");
cbxLibraryAction = new JComboBox<LibraryActionType>();
cbxLibraryAction.setModel(new DefaultComboBoxModel<LibraryActionType>(LibraryActionType
.values()));
cbxLibraryAction.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
checkEnableStatusPanel();
checkPosibleOtherFileActions();
if (!cbxLibraryOtherFileAction.isItemEnabled(cbxLibraryOtherFileAction.getSelectedIndex())) {
cbxLibraryOtherFileAction.setSelectedIndex(0);
}
}
});
add(cbxLibraryAction, "cell 1 2,growx");
chkReplaceWindowsChar = new JCheckBox("Ongeldige Windows karakters vervangen");
add(chkReplaceWindowsChar, "cell 0 3 2 1");
chkUseTVDBNaming =
new JCheckBox(
"Gebruik de benaming van TheTVDB in plaats van de serie naam in de bestandsnaam");
if (videoType.equals(VideoType.MOVIE)) chkUseTVDBNaming.setVisible(false);
add(chkUseTVDBNaming, "cell 0 4 2 1");
add(new JLabel("Andere bestanden (nfo, jpg, sample, ...):"), "cell 0 5,alignx trailing");
cbxLibraryOtherFileAction = new PartialDisableComboBox(LibraryOtherFileActionType.values());
add(cbxLibraryOtherFileAction, "cell 1 5,growx");
createStructureFolderPanel();
add(pnlStructureFolder, "cell 0 6 2 1,grow");
createStructureFilePanel();
add(pnlStructureFile, "cell 0 7 2 1,grow");
}
private void createBackupPanel() {
pnlBackup = new SubtitleBackupPanel();
pnlBackup.setBrowseBackupAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
File path =
MemoryFolderChooser.getInstance().selectDirectory(VideoLibraryPanel.this.getRootPane(),
"Selecteer Ondertitel Backup map");
pnlBackup.setBackupSubtitlePath(path.getAbsolutePath());
}
});
}
private void createStructureFolderPanel() {
pnlStructureFolder = new StructureFolderPanel();
pnlStructureFolder.setBrowseAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
File path =
MemoryFolderChooser.getInstance().selectDirectory(VideoLibraryPanel.this.getRootPane(),
"Selecteer Bibiliotheek map");
pnlStructureFolder.setLibraryFolder(path.getAbsolutePath());
}
});
pnlStructureFolder.setBuildStructureAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final StructureBuilderDialog sDialog =
new StructureBuilderDialog(null, "Structure Builder", true, videoType,
StructureBuilderDialog.StrucutureType.FOLDER, getLibrarySettings(), manager);
String value = sDialog.showDialog(pnlStructureFolder.getStructure().getText());
if (!value.equals("")) pnlStructureFolder.getStructure().setText(value);
}
});
}
private void createStructureFilePanel() {
pnlStructureFile = new StructureFilePanel();
pnlStructureFile.setBuildStructureAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final StructureBuilderDialog sDialog =
new StructureBuilderDialog(null, "Structure Builder", true, videoType,
StructureBuilderDialog.StrucutureType.FILE, getLibrarySettings(), manager);
String value = sDialog.showDialog(pnlStructureFile.getFileStructure());
if (!value.isEmpty()) pnlStructureFile.setFileStructure(value);
}
});
}
}