package hirondelle.movies.edit;
import hirondelle.movies.exception.InvalidInputException;
import hirondelle.movies.main.MainWindow;
import hirondelle.movies.util.Edit;
import hirondelle.movies.util.Util;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
final class MovieController implements ActionListener {
MovieController(MovieView aView, Edit aEdit){
fView = aView;
fEdit = aEdit;
}
@Override public void actionPerformed(ActionEvent aEvent){
fLogger.fine("Editing movie " + fView.getTitle());
try {
createValidMovieFromUserInput();
}
catch(InvalidInputException ex){
informUserOfProblems(ex);
}
if ( isUserInputValid() ){
if( Edit.ADD == fEdit ) {
fLogger.fine("Add operation.");
fDAO.add(fMovie);
}
else if (Edit.CHANGE == fEdit) {
fLogger.fine("Change operation.");
fDAO.change(fMovie);
}
else {
throw new AssertionError();
}
fView.closeDialog();
MainWindow.getInstance().refreshView();
}
}
private final MovieView fView;
private Movie fMovie;
private Edit fEdit;
private MovieDAO fDAO = new MovieDAO();
private static final Logger fLogger = Util.getLogger(MovieController.class);
private void createValidMovieFromUserInput() throws InvalidInputException {
fMovie = new Movie(
fView.getId(), fView.getTitle(), fView.getDateViewed(),
fView.getRating(), fView.getComment()
);
}
private boolean isUserInputValid(){
return fMovie != null;
}
private void informUserOfProblems(InvalidInputException aException) {
Object[] messages = aException.getErrorMessages().toArray();
JOptionPane.showMessageDialog(
fView.getDialog(), messages,
"Movie cannot be saved", JOptionPane.ERROR_MESSAGE
);
}
}