package br.ufpr.c3sl.view.retroaction;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import br.ufpr.c3sl.dao.RetroactionDAO;
import br.ufpr.c3sl.daoFactory.DAOFactory;
import br.ufpr.c3sl.deepClone.ObjectByteArray;
import br.ufpr.c3sl.exception.UserException;
import br.ufpr.c3sl.model.Mistake;
import br.ufpr.c3sl.model.Retroaction;
import br.ufpr.c3sl.util.Util;
import br.ufpr.c3sl.view.principal.JpCarrie;
import br.ufpr.c3sl.virtualkeyboard.main.VirtualKeyBoardMain;
public class RetroactionFrame extends JFrame{
private static final long serialVersionUID = -4715230985143190020L;
private JPanel mainPanel;
private JPanel mistakePanel;
private Mistake mistake;
public RetroactionFrame(Mistake mistake){
super("Retroação: " + mistake.getMistakeInfo().getTitle() + " : " + mistake.getCreatedAtTime());
this.setName("RetroactionFrame");
this.mistake = mistake;
this.mistakePanel = (JPanel) ObjectByteArray.getObject(mistake.getObject());
this.mainPanel = new JPanel();
Util.updateStaticFields(this.mistakePanel);
this.mistakePanel.setPreferredSize(this.mistakePanel.getSize());
this.mistakePanel.setName("Erro na Retroação do " + this.mistakePanel.getName());
mainPanel.setLayout(new BorderLayout());
setContentPane(mainPanel);
initComponents();
this.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
//System.out.println("Opened");
}
@Override
public void windowIconified(WindowEvent e) { //System.out.println("Iconified");
JpCarrie.getInstance().setPanelToSave(null);
}
@Override
public void windowDeiconified(WindowEvent e) {//System.out.println("Deiconified");
}
@Override
public void windowDeactivated(final WindowEvent e) {//System.out.println("windowDeactivated ");
if (e.getOppositeWindow() != null){
if (e.getOppositeWindow() instanceof VirtualKeyBoardMain){
VirtualKeyBoardMain vk = (VirtualKeyBoardMain) e.getOppositeWindow();
if (vk.getOwner() instanceof RetroactionFrame
&& vk.getOwner().hashCode() == RetroactionFrame.this.hashCode()){
return;
}
}
}
JpCarrie.getInstance().setPanelToSave(null);
}
@Override
public void windowClosing(WindowEvent e) { //System.out.println("windowClosing");
JpCarrie.getInstance().setPanelToSave(null);
}
@Override
public void windowClosed(WindowEvent e) { //System.out.println("windowClosed");
JpCarrie.getInstance().setPanelToSave(null);
}
@Override
public void windowActivated(WindowEvent e) { //System.out.println("Activated");
JpCarrie.getInstance().setPanelToSave(mistakePanel);
}
});
//saveRetroaction();
}
public void initComponents(){
setupMenu();
mistakePanel.setPreferredSize(mistakePanel.getPreferredSize());
mainPanel.add(mistakePanel, BorderLayout.CENTER);
}
private void setupMenu(){
JMenuBar jmenubar = new JMenuBar();
JMenu menu = new JMenu("Aplicação");
jmenubar.add(menu);
JMenuItem itemShowErDescription = new JMenuItem("Descrição do Erro");
itemShowErDescription.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(RetroactionFrame.this,
"Retroação: " + mistake.getMistakeInfo().getTitle() + " : " + mistake.getCreatedAtTime()+"\n\n"+
mistake.getMistakeInfo().getTitle()+"\n\n"
+ mistake.getMistakeInfo().getDescription() + "\n\n",
mistake.getMistakeInfo().getTitle() + " : "+ mistake.getCreatedAtTime(),
JOptionPane.INFORMATION_MESSAGE);
}
});
menu.add(itemShowErDescription);
JMenuItem itemResetState = new JMenuItem("Voltar ao estado inicial deste erro");
itemResetState.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
resetState();
}
});
menu.add(itemResetState);
JMenuItem itemExit = new JMenuItem("Fechar");
itemExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
RetroactionFrame.this.dispose();
}
});
menu.add(itemExit);
mainPanel.add(jmenubar, BorderLayout.NORTH);
}
private void resetState() {
mainPanel.remove(this.mistakePanel);
this.mistakePanel = (JPanel) ObjectByteArray.getObject(mistake.getObject());
this.mistakePanel.setName("Erro na Retroação do " + this.mistakePanel.getName());
Util.updateStaticFields(this.mistakePanel);
mainPanel.add(this.mistakePanel);
mainPanel.revalidate();
}
public void setVisible(boolean arg){
this.resetState();
super.setVisible(arg);
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
public static JFrame createAndShowGUI(Mistake mistake) {
//Create and set up the window.
RetroactionFrame frame = new RetroactionFrame(mistake);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//Display the window.
frame.pack();
frame.setLocationRelativeTo(JpCarrie.getInstance());
frame.setVisible(true);
frame.saveRetroaction();
return frame;
}
private void saveRetroaction(){
DAOFactory dao = DAOFactory.getDAOFactory(DAOFactory.DATABASE_CHOOSE);
RetroactionDAO retroactionDao = dao.getRetroactionDAO();
Retroaction retroaction = new Retroaction();
retroaction.setMistake(mistake);
//retroaction.sUser(Session.getCurrentUser());
try {
retroactionDao.insert(retroaction);
} catch (UserException e1) {
e1.printStackTrace();
}
}
}