/* * Copyright (c) 2012 Patrick Meyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.itemanalysis.jmetrik.stats.descriptives; import javax.swing.*; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.border.TitledBorder; import com.itemanalysis.jmetrik.selector.MultipleSelectionPanel; import com.itemanalysis.jmetrik.sql.DataTableName; import com.itemanalysis.jmetrik.sql.DatabaseName; import com.itemanalysis.jmetrik.workspace.VariableChangeListener; import com.itemanalysis.psychometrics.data.DataType; import com.itemanalysis.psychometrics.data.VariableAttributes; import org.apache.log4j.Logger; public class DescriptiveDialog extends JDialog { MultipleSelectionPanel vsp; JPanel mainPanel, optionPanel; JCheckBox minCheck, q1Check, meanCheck, medianCheck, q3Check, maxCheck, sdCheck, iqrCheck, skewnessCheck, kurtosisCheck; boolean canRun=false; DescriptiveCommand command = null; static Logger logger = Logger.getLogger("jmetrik-logger"); DatabaseName dbName = null; DataTableName tableName = null; private boolean min=true, q1=true, mean=true, med=true, q3=true, sd=true, iqr=true, max=true, skew=true, kurtosis=true; public DescriptiveDialog(JFrame parent, DatabaseName dbName, DataTableName tableName, ArrayList<VariableAttributes> variables){ super(parent,"Descriptive Analysis",true); setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); this.dbName = dbName; this.tableName = tableName; //prevent running an analysis when window close button is clicked this.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e){ canRun = false; } }); vsp = new MultipleSelectionPanel(); //filter out strings // VariableType filterType1 = new VariableType(ItemType.BINARY_ITEM, DataType.STRING); // VariableType filterType2 = new VariableType(ItemType.POLYTOMOUS_ITEM, DataType.STRING); // VariableType filterType3 = new VariableType(ItemType.CONTINUOUS_ITEM, DataType.STRING); // VariableType filterType4 = new VariableType(ItemType.NOT_ITEM, DataType.STRING); // vsp.addUnselectedFilterType(filterType1); // vsp.addUnselectedFilterType(filterType2); // vsp.addUnselectedFilterType(filterType3); // vsp.addUnselectedFilterType(filterType4); // vsp.addSelectedFilterType(filterType1); // vsp.addSelectedFilterType(filterType2); // vsp.addSelectedFilterType(filterType3); // vsp.addSelectedFilterType(filterType4); vsp.addUnselectedFilterDataType(DataType.STRING); vsp.addSelectedFilterDataType(DataType.STRING); vsp.setVariables(variables); vsp.showButton4(false); JButton b1 = vsp.getButton1(); b1.setText("Run"); b1.addActionListener(new RunActionListener()); JButton b2 = vsp.getButton2(); b2.setText("Cancel"); b2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { canRun =false; setVisible(false); } }); JButton b3 = vsp.getButton3(); b3.setText("Clear"); b3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { vsp.reset(); } }); mainPanel=new JPanel(); // mainPanel.setPreferredSize(new Dimension(340,375)); mainPanel.setLayout(new GridBagLayout()); optionPanel=new JPanel(); optionPanel.setLayout(new GridLayout(5,2)); optionPanel.setBorder(new TitledBorder("Statistics")); minCheck=new JCheckBox("Minimum"); minCheck.setToolTipText("Minimum value"); minCheck.setSelected(true); minCheck.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(minCheck.isSelected()) min=true; else min=false; } }); optionPanel.add(minCheck); maxCheck=new JCheckBox("Max"); maxCheck.setToolTipText("Maximum value"); maxCheck.setSelected(true); maxCheck.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(maxCheck.isSelected()) max=true; else max=false; } }); optionPanel.add(maxCheck); q1Check=new JCheckBox("First quartile"); q1Check.setToolTipText("First quartile"); q1Check.setSelected(true); q1Check.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(q1Check.isSelected()) q1=true; else q1=false; } }); optionPanel.add(q1Check); q3Check=new JCheckBox("Third quartile"); q3Check.setToolTipText("Third quartile"); q3Check.setSelected(true); q3Check.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(q3Check.isSelected()) q3=true; else q3=false; } }); optionPanel.add(q3Check); meanCheck=new JCheckBox("Mean"); meanCheck.setToolTipText("Mean"); meanCheck.setSelected(true); meanCheck.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(meanCheck.isSelected()) mean=true; else mean=false; } }); optionPanel.add(meanCheck); medianCheck=new JCheckBox("Median"); medianCheck.setToolTipText("Median"); medianCheck.setSelected(true); medianCheck.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(medianCheck.isSelected()) med=true; else med=false; } }); optionPanel.add(medianCheck); sdCheck=new JCheckBox("Standard deviation"); sdCheck.setToolTipText("Standard deviation"); sdCheck.setSelected(true); sdCheck.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(sdCheck.isSelected()) sd=true; else sd=false; } }); optionPanel.add(sdCheck); iqrCheck=new JCheckBox("Interquartile range"); iqrCheck.setToolTipText("Interquartile range"); iqrCheck.setSelected(true); iqrCheck.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(iqrCheck.isSelected()) iqr=true; else iqr=false; } }); optionPanel.add(iqrCheck); skewnessCheck=new JCheckBox("Skewness"); skewnessCheck.setToolTipText("Skewness"); skewnessCheck.setSelected(true); skewnessCheck.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(skewnessCheck.isSelected()) skew=true; else skew=false; } }); optionPanel.add(skewnessCheck); kurtosisCheck=new JCheckBox("Kurtosis"); kurtosisCheck.setToolTipText("Kurtosis"); kurtosisCheck.setSelected(true); kurtosisCheck.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(kurtosisCheck.isSelected()) kurtosis=true; else kurtosis=false; } }); optionPanel.add(kurtosisCheck); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.gridwidth = 5; c.gridheight = 5; c.weightx = 5; c.weighty = 5; c.anchor = GridBagConstraints.NORTHEAST; c.fill = GridBagConstraints.BOTH; mainPanel.add(vsp,c); c.gridx = 0; c.gridy = 5; c.gridwidth = 5; c.gridheight = 4; c.weightx = 5; c.weighty = 5; c.anchor = GridBagConstraints.NORTHEAST; c.fill = GridBagConstraints.BOTH; mainPanel.add(optionPanel,c); getContentPane().add(mainPanel,BorderLayout.CENTER); pack(); setResizable(false); setLocationRelativeTo(parent); } public VariableAttributes[] getSelectedVariables(){ return vsp.getSelectedVariables(); } public boolean canRun(){ return canRun; } public VariableChangeListener getVariableChangedListener(){ return vsp.getVariableChangedListener(); } public DescriptiveCommand getCommand(){ return command; } public class RunActionListener implements ActionListener{ public void actionPerformed(ActionEvent e){ if(vsp.getSelectedVariables().length>0){ try{ command = new DescriptiveCommand(); Object[] v = vsp.getSelectedVariables(); for(int i=0;i<v.length;i++){ command.getFreeOptionList("variables").addValue(((VariableAttributes) v[i]).getName().toString()); } command.getPairedOptionList("data").addValue("db", dbName.toString()); command.getPairedOptionList("data").addValue("table", tableName.toString()); command.getSelectAllOption("stats").setSelected("min", min); command.getSelectAllOption("stats").setSelected("max", max); command.getSelectAllOption("stats").setSelected("q1", q1); command.getSelectAllOption("stats").setSelected("q3", q3); command.getSelectAllOption("stats").setSelected("mean", mean); command.getSelectAllOption("stats").setSelected("median", med); command.getSelectAllOption("stats").setSelected("sd", sd); command.getSelectAllOption("stats").setSelected("iqr", iqr); command.getSelectAllOption("stats").setSelected("skew", skew); command.getSelectAllOption("stats").setSelected("kurtosis", kurtosis); canRun=true; setVisible(false); }catch(IllegalArgumentException ex){ logger.fatal(ex.getMessage(), ex); firePropertyChange("error", "", "Error - Check log for details."); } } } }//end RunAction }