package moviescraper.doctord.view;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import javax.swing.JTextField;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import moviescraper.doctord.controller.Renamer;
import moviescraper.doctord.model.Movie;
import moviescraper.doctord.model.dataitem.Actor;
import moviescraper.doctord.model.dataitem.Director;
import moviescraper.doctord.model.dataitem.Genre;
import moviescraper.doctord.model.dataitem.ID;
import moviescraper.doctord.model.dataitem.MPAARating;
import moviescraper.doctord.model.dataitem.OriginalTitle;
import moviescraper.doctord.model.dataitem.Outline;
import moviescraper.doctord.model.dataitem.Plot;
import moviescraper.doctord.model.dataitem.Rating;
import moviescraper.doctord.model.dataitem.ReleaseDate;
import moviescraper.doctord.model.dataitem.Runtime;
import moviescraper.doctord.model.dataitem.Set;
import moviescraper.doctord.model.dataitem.SortTitle;
import moviescraper.doctord.model.dataitem.Studio;
import moviescraper.doctord.model.dataitem.Tag;
import moviescraper.doctord.model.dataitem.Tagline;
import moviescraper.doctord.model.dataitem.Thumb;
import moviescraper.doctord.model.dataitem.Title;
import moviescraper.doctord.model.dataitem.Top250;
import moviescraper.doctord.model.dataitem.Trailer;
import moviescraper.doctord.model.dataitem.Votes;
import moviescraper.doctord.model.dataitem.Year;
import moviescraper.doctord.model.preferences.MoviescraperPreferences;
import moviescraper.doctord.model.preferences.Settings;
public class RenamerGUI extends JFrame {
private static final long serialVersionUID = -5068144242360229926L;
private JPanel contentPane;
private JTextField textFieldRenameString;
private JTextField textFieldFolderRenameString;
private JTextField textFieldSanitizerString;
private FileDetailPanel fileDetailPanel;
private JPanel buttonsPanel;
private JButton btnOk;
private JButton btnCancel;
private JLabel lblExample;
private JTextField textFieldExample;
private JScrollPane scrollPane;
//order of form elements, y direction
private static final int fileRenameY = 0;
private static final int folderRenameY = 1;
private static final int availableTagsForFileY = 2;
private static final int availableTagsForFolderY = 3;
private static final int sanitizerY = 4;
private static final int exampleY = 5;
private static final int filePreviewerY = 6;
private static final int buttonsPanelY = 7;
private Movie sampleMovie;
private File sampleFile;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
RenamerGUI frame = new RenamerGUI(MoviescraperPreferences.getInstance(),null, new File("C:/Temp/Good old Movie.avi"));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public RenamerGUI(final MoviescraperPreferences preferences, Movie sampleMovie, File sampleFile) {
this.setTitle("Rename Settings");
this.setIconImage(GUICommon.getProgramIcon());
this.sampleMovie = sampleMovie;
if(this.sampleMovie == null || !this.sampleMovie.hasValidTitle())
this.sampleMovie = getFakeMovie();
if(sampleFile == null)
this.sampleFile = getFakeFile();
else
this.sampleFile = sampleFile;
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 1200, 600);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[]{0, 0, 0};
gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0, 0};
gbl_contentPane.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0}; //file detail panel (2nd from last) expands to fill space
contentPane.setLayout(gbl_contentPane);
//File Rename String
JLabel lblRenamestring = new JLabel("File Rename String:");
GridBagConstraints gbc_lblRenamestring = new GridBagConstraints();
gbc_lblRenamestring.insets = new Insets(0, 0, 5, 5);
gbc_lblRenamestring.anchor = GridBagConstraints.EAST;
gbc_lblRenamestring.gridx = 0;
gbc_lblRenamestring.gridy = fileRenameY;
contentPane.add(lblRenamestring, gbc_lblRenamestring);
textFieldRenameString = new JTextField(MoviescraperPreferences.getRenamerString());
GridBagConstraints gbc_textFieldRenameString = new GridBagConstraints();
gbc_textFieldRenameString.insets = new Insets(0, 0, 5, 0);
gbc_textFieldRenameString.fill = GridBagConstraints.HORIZONTAL;
gbc_textFieldRenameString.gridx = 1;
gbc_textFieldRenameString.gridy = fileRenameY;
contentPane.add(textFieldRenameString, gbc_textFieldRenameString);
textFieldRenameString.setColumns(10);
textFieldRenameString.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
preferences.setRenamerString( textFieldRenameString.getText() );
updateExample();
}
});
//Folder Rename String
JLabel lblFolderRenamestring = new JLabel("Folder Rename/Move String:");
GridBagConstraints gbc_lblFolderRenamestring = new GridBagConstraints();
gbc_lblFolderRenamestring.insets = new Insets(0, 0, 5, 5);
gbc_lblFolderRenamestring.anchor = GridBagConstraints.EAST;
gbc_lblFolderRenamestring.gridx = 0;
gbc_lblFolderRenamestring.gridy = folderRenameY;
contentPane.add(lblFolderRenamestring, gbc_lblFolderRenamestring);
textFieldFolderRenameString = new JTextField(MoviescraperPreferences.getFolderRenamerString());
GridBagConstraints gbc_textFieldFolderRenameString = new GridBagConstraints();
gbc_textFieldFolderRenameString.insets = new Insets(0, 0, 5, 0);
gbc_textFieldFolderRenameString.fill = GridBagConstraints.HORIZONTAL;
gbc_textFieldFolderRenameString.gridx = 1;
gbc_textFieldFolderRenameString.gridy = folderRenameY;
contentPane.add(textFieldFolderRenameString, gbc_textFieldFolderRenameString);
textFieldFolderRenameString.setColumns(10);
textFieldFolderRenameString.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
preferences.setFolderRenamerString( textFieldFolderRenameString.getText() );
updateExample();
}
});
//Available Tags - File
JLabel lblAvailableString = new JLabel("Available Tags For File Rename String:");
GridBagConstraints gbc_lblavailablestring = new GridBagConstraints();
gbc_lblavailablestring.insets = new Insets(0, 0, 5, 5);
gbc_lblavailablestring.anchor = GridBagConstraints.EAST;
gbc_lblavailablestring.gridx = 0;
gbc_lblavailablestring.gridy = availableTagsForFileY;
contentPane.add(lblAvailableString, gbc_lblavailablestring);
JTextField availbleTagsTextField = new JTextField(Renamer.getAvailableFileTags());
availbleTagsTextField.setEditable(false);
GridBagConstraints gbc_textFieldRenameStringTwo = new GridBagConstraints();
gbc_textFieldRenameStringTwo.insets = new Insets(0, 0, 5, 0);
gbc_textFieldRenameStringTwo.fill = GridBagConstraints.HORIZONTAL;
gbc_textFieldRenameStringTwo.gridx = 1;
gbc_textFieldRenameStringTwo.gridy = availableTagsForFileY;
contentPane.add(availbleTagsTextField, gbc_textFieldRenameStringTwo);
availbleTagsTextField.setColumns(10);
//Available Tags - Folder
JLabel lblAvailableFolderString = new JLabel("Available Tags For Folder Rename/Move String:");
GridBagConstraints gbc_lblavailableFolderstring = new GridBagConstraints();
gbc_lblavailableFolderstring.insets = new Insets(0, 0, 5, 5);
gbc_lblavailableFolderstring.anchor = GridBagConstraints.EAST;
gbc_lblavailableFolderstring.gridx = 0;
gbc_lblavailableFolderstring.gridy = availableTagsForFolderY;
contentPane.add(lblAvailableFolderString, gbc_lblavailableFolderstring);
JTextField availbleTagsFolderTextField = new JTextField(Renamer.getAvailableFolderTags());
availbleTagsFolderTextField.setEditable(false);
GridBagConstraints gbc_textFieldAvailableFolder = new GridBagConstraints();
gbc_textFieldAvailableFolder.insets = new Insets(0, 0, 5, 0);
gbc_textFieldAvailableFolder.fill = GridBagConstraints.HORIZONTAL;
gbc_textFieldAvailableFolder.gridx = 1;
gbc_textFieldAvailableFolder.gridy = availableTagsForFolderY;
contentPane.add(availbleTagsFolderTextField, gbc_textFieldAvailableFolder);
availbleTagsFolderTextField.setColumns(10);
//Sanitizer
JLabel lblSanitizerString = new JLabel("Sanitizer String:");
GridBagConstraints gbc_lblSanitizerString = new GridBagConstraints();
gbc_lblSanitizerString.insets = new Insets(0, 0, 5, 5);
gbc_lblSanitizerString.anchor = GridBagConstraints.EAST;
gbc_lblSanitizerString.gridx = 0;
gbc_lblSanitizerString.gridy = sanitizerY;
contentPane.add(lblSanitizerString, gbc_lblSanitizerString);
textFieldSanitizerString = new JTextField(MoviescraperPreferences.getSanitizerForFilename());
GridBagConstraints gbc_textFieldSanitizerString = new GridBagConstraints();
gbc_textFieldSanitizerString.insets = new Insets(0, 0, 5, 0);
gbc_textFieldSanitizerString.fill = GridBagConstraints.HORIZONTAL;
gbc_textFieldSanitizerString.gridx = 1;
gbc_textFieldSanitizerString.gridy = sanitizerY;
contentPane.add(textFieldSanitizerString, gbc_textFieldSanitizerString);
textFieldSanitizerString.setColumns(10);
textFieldSanitizerString.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
preferences.setSanitizerForFilename( textFieldSanitizerString.getText() );
updateExample();
}
});
//Preview Results
lblExample = new JLabel("Example :");
GridBagConstraints gbc_lblExample = new GridBagConstraints();
gbc_lblExample.anchor = GridBagConstraints.EAST;
gbc_lblExample.insets = new Insets(0, 0, 5, 5);
gbc_lblExample.gridx = 0;
gbc_lblExample.gridy = exampleY;
contentPane.add(lblExample, gbc_lblExample);
textFieldExample = new JTextField();
textFieldExample.setEditable(false);
GridBagConstraints gbc_textFieldExample = new GridBagConstraints();
gbc_textFieldExample.insets = new Insets(0, 0, 5, 0);
gbc_textFieldExample.fill = GridBagConstraints.HORIZONTAL;
gbc_textFieldExample.gridx = 1;
gbc_textFieldExample.gridy = exampleY;
contentPane.add(textFieldExample, gbc_textFieldExample);
textFieldExample.setColumns(10);
//File Detail Panel
fileDetailPanel = new FileDetailPanel(preferences, new GUIMain());
fileDetailPanel.hideArtworkPanel();
scrollPane = new JScrollPane();
scrollPane.setViewportView(fileDetailPanel);
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.insets = new Insets(0, 0, 5, 0);
gbc_scrollPane.gridwidth = 3;
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 0;
gbc_scrollPane.gridy = filePreviewerY;
contentPane.add(scrollPane, gbc_scrollPane);
//OK, Cancel Button Panel
buttonsPanel = new JPanel();
GridBagConstraints gbc_panel = new GridBagConstraints();
gbc_panel.gridwidth = 2;
gbc_panel.gridx = 0;
gbc_panel.gridy = buttonsPanelY;
contentPane.add(buttonsPanel, gbc_panel);
buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.X_AXIS));
btnOk = new JButton("OK");
buttonsPanel.add(btnOk);
btnOk.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Settings.savePreferences();
RenamerGUI.this.dispose();
}
});
btnCancel = new JButton("Cancel");
buttonsPanel.add(btnCancel);
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RenamerGUI.this.dispose();
}
});
fileDetailPanel.setNewMovie(getFakeMovie(), false, true);
updateExample();
this.setVisible(true);
}
protected void updateExample() {
Renamer renamer = new Renamer(textFieldRenameString.getText(), textFieldFolderRenameString.getText(), textFieldSanitizerString.getText(),
fileDetailPanel.currentMovie, sampleFile);
textFieldExample.setText( renamer.getNewFileName(sampleFile.isDirectory()) );
}
private File getFakeFile() {
return new File("C:/Temp/Good old Movie.avi");
}
private Movie getFakeMovie() {
if(sampleMovie != null && sampleMovie.hasValidTitle())
return sampleMovie;
Actor actorA = new Actor("Actor A", null, null);
Actor actorB = new Actor("Actor B", null, null);
ArrayList<Actor> actors = new ArrayList<>(5);
Collections.addAll(actors, actorA, actorB);
Director directorA = new Director("Director Name", null);
ArrayList<Director> directors = new ArrayList<>();
Collections.addAll(directors, directorA);
Thumb[] fanart = new Thumb[0];
Thumb[] extraFanart = new Thumb[0];
Genre genreA = new Genre("GenreA");
Genre genreB = new Genre("GenreB");
ArrayList<Genre> genres = new ArrayList<>(5);
Collections.addAll(genres, genreA, genreB);
Tag tagA = new Tag("TagA");
Tag tagB = new Tag("TagB");
ArrayList<Tag> tags = new ArrayList<>(5);
Collections.addAll(tags, tagA, tagB);
ID id = new ID("ABC-123");
MPAARating mpaa = new MPAARating("PG-13");
OriginalTitle originalTitle = new OriginalTitle("Original Title");
Outline outline = new Outline("Outline");
Plot plot = new Plot("Plot");
Thumb[] posters = new Thumb[0];
Rating rating = new Rating(6.0, "Rating");
ReleaseDate releaseDate = new ReleaseDate("1999-08-25");
Runtime runtime = new Runtime("60 min");
Set set = new Set("Set");
SortTitle sortTitle= new SortTitle("SortTitle");
Studio studio = new Studio("Studio");
Tagline tagline = new Tagline("Tagline");
Title title = new Title("MovieTitle");
Top250 top250 = new Top250("Top250");
Trailer trailer = new Trailer(null);
Votes votes = new Votes("Votes");
Year year = new Year("1999");
return new Movie(actors, directors, fanart, extraFanart, genres, tags, id, mpaa, originalTitle, outline, plot, posters, rating, releaseDate, runtime, set, sortTitle, studio, tagline, title, top250, trailer, votes, year);
}
}