package hirondelle.stocks.file;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.logging.*;
import hirondelle.stocks.portfolio.Portfolio;
import hirondelle.stocks.portfolio.CurrentPortfolio;
import hirondelle.stocks.portfolio.PortfolioDAO;
import hirondelle.stocks.util.Args;
import hirondelle.stocks.util.ui.UiUtil;
import hirondelle.stocks.util.Util;
public final class FileDeleteAction extends AbstractAction implements Observer {
public FileDeleteAction(CurrentPortfolio aCurrentPortfolio, JFrame aParentFrame) {
super("Delete", UiUtil.getImageIcon("/toolbarButtonGraphics/general/Delete"));
Args.checkForNull(aParentFrame);
fCurrentPortfolio = aCurrentPortfolio;
fCurrentPortfolio.addObserver( this );
fFrame = aParentFrame;
putValue(SHORT_DESCRIPTION, "Delete the current portfolio");
putValue(
LONG_DESCRIPTION, "Delete the current portfolio,both from view and storage."
);
putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_D) );
}
@Override public void actionPerformed(ActionEvent e) {
fLogger.info("Deleting the current portfolio from storage.");
if ( isConfirmed() ) {
deleteCurrentPortfolio();
}
}
public void update(Observable aPublisher, Object aData) {
setEnabled( ! fCurrentPortfolio.isUntitled() );
}
private CurrentPortfolio fCurrentPortfolio;
private JFrame fFrame;
private static final Logger fLogger = Util.getLogger(FileDeleteAction.class);
private boolean isConfirmed(){
String title = UiUtil.getDialogTitle("Confirm Delete");
String message =
"Are you sure you want to delete the Portfolio named '" +
fCurrentPortfolio.getName() + "' ?"
;
JOptionPane optionPane = new JOptionPane(
message, JOptionPane.WARNING_MESSAGE, JOptionPane.YES_NO_OPTION
);
JDialog dialog = optionPane.createDialog(fFrame, title);
UiUtil.noDefaultButton(dialog.getRootPane());
dialog.setVisible(true);
return hasSelectedYes(optionPane);
}
private boolean hasSelectedYes(JOptionPane aOptionPane){
boolean result = false;
Object selection = aOptionPane.getValue();
if (selection != null && selection instanceof Integer){
Integer selectionVal = (Integer)selection; if (selectionVal.intValue() == JOptionPane.YES_OPTION){
result = true;
}
}
fLogger.fine("Selected Yes?: " + result);
return result;
}
private void deleteCurrentPortfolio(){
PortfolioDAO portfolioDAO = new PortfolioDAO();
portfolioDAO.delete(fCurrentPortfolio.getPortfolio());
fCurrentPortfolio.setPortfolio(Portfolio.getUntitledPortfolio());
fCurrentPortfolio.notifyObservers();
}
}