package hirondelle.movies.edit;
import hirondelle.movies.util.ui.OnClose;
import hirondelle.movies.util.Edit;
import hirondelle.movies.util.Util;
import hirondelle.movies.util.ui.UiUtil;
import hirondelle.movies.util.ui.StandardDialog;
import java.util.logging.Logger;
import java.util.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
final class MovieView {
MovieView(JFrame aParent) {
fEdit = Edit.ADD;
buildGui(aParent, "Add Movie");
fStandardDialog.display();
}
MovieView(JFrame aParent, Movie aSelectedMovie) {
fLogger.fine("Editing selected movie:" + aSelectedMovie);
fEdit = Edit.CHANGE;
fId = aSelectedMovie.getId();
buildGui(aParent, "Edit Movie");
populateFields(aSelectedMovie);
fStandardDialog.display();
}
String getId() {
return fId;
}
String getTitle() {
return fTitle.getText();
}
String getDateViewed() {
return fDateViewed.getText();
}
String getRating() {
return fRating.getText();
}
String getComment() {
return fComment.getText();
}
void closeDialog() {
fStandardDialog.dispose();
}
JDialog getDialog() {
return fStandardDialog.getDialog();
}
private StandardDialog fStandardDialog;
private Edit fEdit;
private String fId;
private JTextField fTitle = new JTextField();
private JTextField fDateViewed = new JTextField();
private JTextField fRating = new JTextField();
private JTextField fComment = new JTextField();
private JButton fEditButton;
private static final Logger fLogger = Util.getLogger(MovieView.class);
private void populateFields(Movie aSelectedMovie) {
fTitle.setText(Util.format(aSelectedMovie.getTitle()));
fDateViewed.setText(Util.format(aSelectedMovie.getDateViewed()));
fRating.setText(Util.format(aSelectedMovie.getRating()));
fComment.setText(aSelectedMovie.getComment());
}
private void buildGui(JFrame aParent, String aDialogTitle) {
fStandardDialog = new StandardDialog(
aParent, aDialogTitle, true, OnClose.DISPOSE, getUserInputArea(), getButtons()
);
fStandardDialog.setDefaultButton(fEditButton);
}
private JPanel getUserInputArea() {
JPanel result = new JPanel();
result.setLayout(new BoxLayout(result, BoxLayout.Y_AXIS));
addTextField(fTitle, "Title", result);
addTextField(fDateViewed, "Date Viewed", result);
addTextField(fRating, "Rating", result);
addTextField(fComment, "Comment", result);
UiUtil.alignAllX(result, UiUtil.AlignX.LEFT);
return result;
}
private void addTextField(JTextField aTextField, String aLabel, JPanel aPanel) {
JLabel label = new JLabel(aLabel);
aPanel.add(label);
aPanel.add(aTextField);
aTextField.setColumns(15);
}
private java.util.List<JButton> getButtons() {
java.util.List<JButton> result = new ArrayList<>();
fEditButton = new JButton(fEdit.toString());
fEditButton.addActionListener(new MovieController(this, fEdit));
result.add(fEditButton);
JButton cancel = new JButton("Cancel");
cancel.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent arg0) {
closeDialog();
}
});
result.add(cancel);
return result;
}
}