package br.ufpr.c3sl.view.config;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import netscape.javascript.JSObject;
import br.ufpr.c3sl.dao.UserDAO;
import br.ufpr.c3sl.daoFactory.DAOFactory;
import br.ufpr.c3sl.exception.UserException;
import br.ufpr.c3sl.model.User;
import br.ufpr.c3sl.session.Session;
import br.ufpr.c3sl.util.Util;
import br.ufpr.c3sl.view.principal.JpCarrie;
import br.ufpr.c3sl.view.util.EnableDisable;
import br.ufpr.c3sl.view.util.LoadingPanel;
public class ConfigurationPane extends JPanel {
private static final long serialVersionUID = 6616103282260587283L;
private JPanel jpHeader;
private JPanel jpBody;
private JPanel jpFooter;
private JPanel jpMain;
private JButton jbOK;
private JButton jbCancel;
// private ButtonGroup group;
//
// private JRadioButton jrbServer;
// private JRadioButton jrbLocal;
private JCheckBox jcbAgree;
private JTextField jtfEmail;
private JLabel lbErrors;
private JPanel contentPane;
private LoadingPanel loading;
public ConfigurationPane() {
loading = new LoadingPanel();
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.CENTER;
gbc.weighty = 1;
contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(BorderFactory.createTitledBorder(""));
//contentPane.setBorder(BorderFactory.createTitledBorder("Configuração"));
this.add(contentPane, gbc);
build();
}
private void build(){
jpMain = new JPanel(new BorderLayout());
jpMain.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
contentPane.add(loading, BorderLayout.NORTH);
contentPane.add(jpMain, BorderLayout.CENTER);
jpMain.add(lbErrors = new JLabel(), BorderLayout.NORTH);
lbErrors.setForeground(Color.red);
lbErrors.setVisible(false);
GridBagConstraints c = new GridBagConstraints();
jpBody = new JPanel(new GridBagLayout());
jpMain.add(jpBody, BorderLayout.CENTER);
jpHeader = new JPanel();
//jpHeader.add(new JLabel("Configurações Iniciais da Aplicação"));
jpHeader.add(new JLabel("Bem-vindo a simulador de Fractais"));
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
jpBody.add(jpHeader, c);
// c.gridwidth = 1;
// c.gridx = 0;
// c.gridy = 1;
// c.weighty = 2.0;
c.insets = new Insets(10,0,0,0);
// jpBody.add(new JLabel("Por favor escolha o modo de execução:"), c);
//
// c.gridy = 2;
//
// JPanel radioPane = new JPanel();
// radioPane.setLayout(new BoxLayout(radioPane, BoxLayout.Y_AXIS));
//
// jrbServer = new JRadioButton("Server Mode");
// jrbLocal = new JRadioButton("Local Mode");
//
// group = new ButtonGroup();
// group.add(jrbLocal);
// group.add(jrbServer);
//
// radioPane.add(jrbServer);
// radioPane.add(jrbLocal);
//
// jpBody.add(radioPane, c);
c.gridx = 0;
c.gridy = 3;
jpBody.add(new JLabel("Por favor entre com seu email:"), c);
c.gridy = 4;
jtfEmail = new JTextField(""); //"diego@gmail.com"
jpBody.add(jtfEmail, c);
c.gridy = 5;
FlowLayout flow = new FlowLayout();
flow.setAlignment(FlowLayout.LEFT);
JPanel agreePanel = new JPanel(flow);
jcbAgree = new JCheckBox();
jcbAgree.setSelected(true);
agreePanel.add(jcbAgree);
JLabel lbAgreeText = new JLabel("<html><div style='color:black'>Concordo em ceder os dados gerados por este <br />" +
" software para futuras análises de Pesquisas");
agreePanel.add(lbAgreeText);
jpBody.add(agreePanel, c);
jpFooter = new JPanel();
jbOK = new JButton("OK");
jbOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cmdOK();
}
});
jbCancel = new JButton("Cancelar");
jbCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cmdCancel();
}
});
jpFooter.add(jbOK);
//jpFooter.add(jbCancel);
jpMain.add(jpFooter, BorderLayout.SOUTH);
}
private void cmdOK() {
validateAnwser();
}
private void cmdCancel(){
if (this.getRootPane().getParent() instanceof JApplet){
JOptionPane.showMessageDialog(null, "Olá");
JSObject win = JSObject.getWindow((JApplet) this.getRootPane().getParent());
win.eval("alert('oi');window.close();alert('oi');");
}
}
private void validateAnwser(){
ArrayList<String> errors = new ArrayList<String>();
String msgs = "";
jtfEmail.setText(jtfEmail.getText().trim());
// if(!jrbLocal.isSelected() && !jrbServer.isSelected()){
// errors.add("Você deve selecionar um dos modos!");
// }
if(!Util.validateEmail(jtfEmail.getText())){
errors.add("Email Inválido!");
}
if(!jcbAgree.isSelected()){
errors.add("Para executar o sofwre você deve concordar em " +
"<br />fornecer os dados");
}
if (errors.size() > 0){
for (int i = 0; i < errors.size(); i++)
msgs += "<p>"+(i+1)+" - " + errors.get(i) + "</p>";
lbErrors.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createTitledBorder(
new LineBorder(new Color(250, 0, 0), 2), "Incorreto",
TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.CENTER, getFont(), Color.black)));
lbErrors.setText("<html><div>" + msgs + "</div>");
lbErrors.setVisible(true);
}else{
configureSession();
}
}
private void configureSession(){
loading.startLoading();
EnableDisable.setComponentsEnabled(jpMain, false);
Thread config = new Thread(new Runnable() {
@Override
public void run() {
String email = jtfEmail.getText();
Session.setCurrentUser(new User(email));
//DAOFactory.DATABASE_CHOOSE = jrbLocal.isSelected() ? DAOFactory.DB4O : DAOFactory.MYSQL;
DAOFactory.DATABASE_CHOOSE = DAOFactory.MYSQL;
// Internet.verifyConnection("Foi verificado que não existe conexão com a internet," +
// "\n seu modo de execução foi alterado para local");
//System.out.println(DAOFactory.DATABASE_CHOOSE);
DAOFactory bd = DAOFactory.getDAOFactory(DAOFactory.DATABASE_CHOOSE);
UserDAO userDAO = bd.getUserDAO();
try {
User user = userDAO.findOrCreateByEmail(email);
//Session.setMode((DAOFactory.DATABASE_CHOOSE == DAOFactory.DB4O) ? "Local" : "Server");
Session.setMode("Server");
Session.setCurrentUser(user);
} catch (UserException e) {
e.printStackTrace();
}
loading.stopLoading();
Container root = ConfigurationPane.this.getRootPane().getParent();
if (root instanceof JApplet){
((JApplet) root).setContentPane(JpCarrie.getInstance());
JpCarrie.getInstance().finalConfiguration();
root.validate();
}
}
});
config.start();
}
}