/*********************************************************************** This file is part of KEEL-software, the Data Mining tool for regression, classification, clustering, pattern mining and so on. Copyright (C) 2004-2010 F. Herrera (herrera@decsai.ugr.es) L. Sánchez (luciano@uniovi.es) J. Alcalá-Fdez (jalcala@decsai.ugr.es) S. García (sglopez@ujaen.es) A. Fernández (alberto.fernandez@ujaen.es) J. Luengo (julianlm@decsai.ugr.es) 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/ **********************************************************************/ /** * * File: DialogDataset2.java * * This Class manages dialog for modifiying data sets * * @author Written by Admin 4/8/2008 * @author Modified by Juan Carlos Fernandez Caballero and Pedro Antonio Gutierrez (University of Córdoba) 7/07/2009 * @version 1.0 * @since JDK1.5 */ package keel.GraphInterKeel.experiments; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.Vector; import java.io.File; import java.util.Arrays; public class DialogDataset2 extends JDialog { JPanel panel1 = new JPanel() { @Override public void paintComponent(Graphics g) { //ImageIcon img = new ImageIcon(this.getClass().getResource("/keel/GraphInterKeel/resources/imag/experimentos/datasets.jpg")); //g.drawImage(img.getImage(), 0, 0, null); super.paintComponent(g); } }; JScrollPane jScrollPane2 = new JScrollPane(); JButton accept = new JButton(); JButton cancel = new JButton(); JButton add = new JButton(); JButton drop = new JButton(); JButton dropAll = new JButton(); JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel(); JList jList2 = new JList(); JLabel jLabel3 = new JLabel(); JLabel jLabel4 = new JLabel(); JTextField training = new JTextField(); JTextField testing = new JTextField(); JButton searchTra = new JButton(); JButton searchTst = new JButton(); SpinnerNumberModel model = new SpinnerNumberModel(10, 1, 1000, 10); ImageIcon image1 = new ImageIcon(this.getClass().getResource( "/keel/GraphInterKeel/resources/ico/experiments/anadir.gif")); ImageIcon image2 = new ImageIcon(this.getClass().getResource( "/keel/GraphInterKeel/resources/ico/experiments/browser.gif")); ImageIcon image3 = new ImageIcon(this.getClass().getResource( "/keel/GraphInterKeel/resources/ico/experiments/anadir2.gif")); Vector aList; DataSet data; Vector someLists; JButton add5 = new JButton(); JButton add12 = new JButton(); JLabel jLabel5 = new JLabel(); int layer; /** * Builder * * @param frame Parent frame * @param title Title * @param modal Modal status * @param data Data set selected * @param layer Active layer */ public DialogDataset2(Experiments frame, String title, boolean modal, DataSet data, int layer) { super(frame, title, modal); this.data = data; this.layer = layer; aList = new Vector(); aList = (Vector) ((Vector) data.tableVector.elementAt(layer)).clone(); someLists = new Vector(); for (int i = 0; i < Layer.numLayers; i++) { someLists.addElement((Vector) ((Vector) data.tableVector.elementAt(i)).clone()); } try { initialize2(); pack(); } catch (Exception ex) { ex.printStackTrace(); } } /** * Default builder */ public DialogDataset2() { this(null, "", false, null, 0); } /** * Initialization * @throws java.lang.Exception */ private void initialize2() throws Exception { panel1.setLayout(null); jScrollPane2.getViewport().setBackground(new Color(225, 225, 225)); jScrollPane2.setFont(new java.awt.Font("Arial", 0, 11)); jScrollPane2.setBounds(new Rectangle(30, 241, 401, 170)); accept.setBackground(new Color(225, 225, 225)); accept.setBounds(new Rectangle(91, 481, 100, 30)); accept.setFont(new java.awt.Font("Arial", 0, 11)); accept.setOpaque(false); accept.setToolTipText("Apply changes"); accept.setFocusPainted(true); // accept.setIcon(image5); accept.setMnemonic('A'); accept.setText("Apply"); accept.addActionListener(new DialogDataset2_aceptar_actionAdapter(this)); cancel.setBackground(new Color(225, 225, 225)); cancel.setBounds(new Rectangle(255, 481, 100, 30)); cancel.setFont(new java.awt.Font("Arial", 0, 11)); cancel.setOpaque(false); cancel.setToolTipText("Don\'t apply the changes"); // cancel.setIcon(image6); cancel.setMnemonic('C'); cancel.setText("Cancel"); cancel.addActionListener(new DialogDataset2_cancelar_actionAdapter(this)); add.setBackground(new Color(225, 225, 225)); add.setBounds(new Rectangle(138, 142, 118, 30)); add.setFont(new java.awt.Font("Arial", 0, 11)); add.setOpaque(false); add.setToolTipText("Add selected files"); add.setIcon(image1); add.setText("Add Selection"); add.addActionListener(new DialogDataset2_anadir_actionAdapter(this)); drop.setBackground(new Color(225, 225, 225)); drop.setBounds(new Rectangle(91, 439, 100, 30)); drop.setFont(new java.awt.Font("Arial", 0, 11)); drop.setOpaque(false); drop.setToolTipText("Remove selected items"); drop.setText("Remove"); drop.addActionListener(new DialogDataset2_quitar_actionAdapter(this)); dropAll.setBackground(new Color(225, 225, 225)); dropAll.setBounds(new Rectangle(255, 439, 100, 30)); dropAll.setFont(new java.awt.Font("Arial", 0, 11)); dropAll.setOpaque(false); dropAll.setToolTipText("Remove all items"); dropAll.setText("Remove All"); dropAll.addActionListener(new DialogDataset2_quitar_todo_actionAdapter(this)); jLabel1.setBackground(new Color(225, 225, 225)); jLabel1.setFont(new java.awt.Font("Arial", 1, 11)); jLabel1.setText("Selected DataSets:"); jLabel1.setBounds(new Rectangle(30, 216, 116, 22)); jLabel2.setBackground(new Color(225, 225, 225)); jLabel2.setFont(new java.awt.Font("Arial", 1, 11)); jLabel2.setText("DataSets Selection:"); jLabel2.setBounds(new Rectangle(30, 24, 119, 20)); this.addWindowListener(new DialogDataset2_this_windowAdapter(this)); jLabel3.setBackground(new Color(225, 225, 225)); jLabel3.setFont(new java.awt.Font("Arial", 0, 11)); jLabel3.setText("Training file :"); jLabel3.setBounds(new Rectangle(30, 75, 68, 23)); jLabel4.setBackground(new Color(225, 225, 225)); jLabel4.setFont(new java.awt.Font("Arial", 0, 11)); jLabel4.setText("Test file :"); jLabel4.setBounds(new Rectangle(30, 113, 52, 15)); training.setFont(new java.awt.Font("Arial", 0, 11)); training.setText(""); training.setBounds(new Rectangle(99, 72, 248, 21)); testing.setFont(new java.awt.Font("Arial", 0, 11)); testing.setText(""); testing.setBounds(new Rectangle(99, 110, 248, 21)); searchTra.setBackground(new Color(225, 225, 225)); searchTra.setBounds(new Rectangle(388, 72, 33, 20)); searchTra.setFont(new java.awt.Font("Arial", 0, 11)); searchTra.setOpaque(false); searchTra.setToolTipText("Browse for file"); searchTra.setIcon(image2); searchTra.setText(""); searchTra.addActionListener(new DialogDataset2_busca_tra_actionAdapter(this)); searchTst.setBackground(new Color(225, 225, 225)); searchTst.setBounds(new Rectangle(388, 111, 33, 20)); searchTst.setFont(new java.awt.Font("Arial", 0, 11)); searchTst.setOpaque(false); searchTst.setToolTipText("Browse for file"); searchTst.setIcon(image2); searchTst.setText(""); searchTst.addActionListener(new DialogDataset2_busca_tst_actionAdapter(this)); add5.setBackground(new Color(225, 225, 225)); add5.setBounds(new Rectangle(60, 186, 123, 30)); add5.setFont(new java.awt.Font("Arial", 0, 11)); add5.setOpaque(false); add5.setToolTipText("Add all 5x2 cv files"); add5.setVerifyInputWhenFocusTarget(true); add5.setIcon(image3); add5.setText("Add 5x2 cv"); add5.addActionListener(new DialogDataset2_anadir5_actionAdapter(this)); add12.setText("Add 5x2 cv All Layers"); add12.addActionListener(new DialogDataset2_anadir12_actionAdapter(this)); add12.setIcon(image3); add12.setToolTipText("Add all 10-fold cv files"); add12.setBackground(new Color(225, 225, 225)); add12.setBounds(new Rectangle(207, 186, 192, 30)); add12.setFont(new java.awt.Font("Arial", 0, 11)); add12.setOpaque(false); jLabel5.setBackground(new Color(225, 225, 225)); jLabel5.setEnabled(false); jLabel5.setFont(new java.awt.Font("Arial", 0, 11)); jLabel5.setForeground(Color.red); jLabel5.setText("All Layers"); jLabel5.setBounds(new Rectangle(143, 219, 107, 18)); panel1.setBackground(new Color(225, 225, 225)); panel1.setFont(new java.awt.Font("Arial", 0, 11)); panel1.setOpaque(false); this.getContentPane().setBackground(new Color(225, 225, 225)); this.setFont(new java.awt.Font("Arial", 0, 11)); jList2.setFont(new java.awt.Font("Arial", 0, 11)); getContentPane().add(panel1); panel1.add(jLabel2, null); panel1.add(jLabel3, null); panel1.add(jLabel4, null); panel1.add(training, null); panel1.add(testing, null); panel1.add(searchTra, null); panel1.add(searchTst, null); panel1.add(jScrollPane2, null); panel1.add(drop, null); panel1.add(dropAll, null); panel1.add(accept, null); panel1.add(cancel, null); panel1.add(jLabel1, null); panel1.add(jLabel5, null); panel1.add(add5, null); // panel1.add(add12, null);//Julian**- There is no more layers in KEEL panel1.add(add, null); jScrollPane2.getViewport().add(jList2, null); // load selected files jList2.setListData(aList.toArray()); } /** * Add button * @param e Event */ void anadir_actionPerformed(ActionEvent e) { // add pair of files to the list if ((training.getText().length() != 0) && (testing.getText().length() != 0)) { File f1 = new File(training.getText()); File f2 = new File(testing.getText()); String pareja = f1.getName() + "," + f2.getName(); if (!aList.contains(pareja)) { aList.add(pareja); Object[] l = aList.toArray(); Arrays.sort(l); jList2.setListData(l); jLabel5.setEnabled(false); } } else { JOptionPane.showMessageDialog(this, "Files must be added in pairs", "Error", 2); } } /** * Drop button * @param e Event */ void quitar_actionPerformed(ActionEvent e) { // remove selected items Object[] sel = jList2.getSelectedValues(); for (int i = 0; i < sel.length; i++) { aList.remove(sel[i]); } if (sel.length > 0) { Object[] l = aList.toArray(); Arrays.sort(l); jList2.setListData(l); } } /** * Drop all button * @param e Event */ void quitar_todo_actionPerformed(ActionEvent e) { // remove all items jList2.setSelectionInterval(0, aList.size() - 1); Object[] sel = jList2.getSelectedValues(); for (int i = 0; i < sel.length; i++) { aList.remove(sel[i]); } if (sel.length > 0) { Object[] l = aList.toArray(); Arrays.sort(l); jList2.setListData(l); } jLabel5.setEnabled(false); } /** * Cancel button * @param e Event */ void cancelar_actionPerformed(ActionEvent e) { // don't save changes this.setVisible(false); } /** * Accept button * @param e */ void aceptar_actionPerformed(ActionEvent e) { // save selected files if (jLabel5.isEnabled()) { for (int i = 0; i < Layer.numLayers; i++) { data.tableVector.setElementAt((Vector) (((Vector) someLists.elementAt(i)).clone()), i); } } else { data.tableVector.setElementAt((Vector) aList.clone(), layer); } this.setVisible(false); } /** * Closing window * @param e Event */ void this_windowClosing(WindowEvent e) { // don't save changes } /** * Find training files * @param e Event */ void busca_tra_actionPerformed(ActionEvent e) { // select training file JFileChooser f = new JFileChooser(); f.setDialogTitle("Training file"); String exten[] = { "dat"}; f.setFileFilter(new ArchiveFilter2(exten, "Data files (.dat)")); f.setCurrentDirectory(new File(data.dsc.getPath() + data.dsc.getName())); int opcion = f.showOpenDialog(this); if (opcion == JFileChooser.APPROVE_OPTION) { training.setText(f.getSelectedFile().getAbsolutePath()); } } /** * Find test files * @param e Event */ void busca_tst_actionPerformed(ActionEvent e) { // select test file JFileChooser f = new JFileChooser(); f.setDialogTitle("Test file"); String exten[] = { "dat"}; f.setFileFilter(new ArchiveFilter2(exten, "Data files (.dat)")); f.setCurrentDirectory(new File(data.dsc.getPath() + data.dsc.getName())); int opcion = f.showOpenDialog(this); if (opcion == JFileChooser.APPROVE_OPTION) { testing.setText(f.getSelectedFile().getAbsolutePath()); } } /** * Adding 10-folds file * @param e Event */ void anadir10_actionPerformed(ActionEvent e) { // add 10 fold cross validation files File dir = new File(data.dsc.getPath() + data.dsc.getName()); String[] ficheros = dir.list(); boolean cont = true, metido; for (int i = 1; i <= 10; i++) { String pareja = ""; metido = false; for (int j = 0; j < ficheros.length; j++) { if (ficheros[j].indexOf("10-" + i + "tra.dat") != -1) { pareja = ficheros[j] + ","; metido = true; break; } } if (!metido) { cont = false; } metido = false; for (int j = 0; j < ficheros.length; j++) { if (ficheros[j].indexOf("10-" + i + "tst.dat") != -1) { pareja += ficheros[j]; metido = true; break; } } if (!metido) { cont = false; } aList.add(pareja); } if (!cont) { aList.clear(); JOptionPane.showMessageDialog(this, "Some files not found. Cancelling operation.", "Error", JOptionPane.ERROR_MESSAGE); } jList2.setListData(aList.toArray()); jLabel5.setEnabled(false); } /** * Adding 5-folds file * @param e Event */ void anadir5_actionPerformed(ActionEvent e) { // add 5x2 cross validation files File dir = new File("." + data.dsc.getPath() + data.dsc.getName()); String[] ficheros = dir.list(); boolean cont = true, metido; for (int i = 1; i <= 5; i++) { String pareja = ""; metido = false; for (int j = 0; j < ficheros.length; j++) { if (ficheros[j].indexOf("5x2-" + i + "tra.dat") != -1) { pareja = ficheros[j] + ","; metido = true; break; } } if (!metido) { cont = false; } metido = false; for (int j = 0; j < ficheros.length; j++) { if (ficheros[j].indexOf("5x2-" + i + "tst.dat") != -1) { pareja += ficheros[j]; metido = true; break; } } if (!metido) { cont = false; } aList.add(pareja); } if (!cont) { aList.clear(); JOptionPane.showMessageDialog(this, "Some files not found. Cancelling operation.", "Error", JOptionPane.ERROR_MESSAGE); } jList2.setListData(aList.toArray()); jLabel5.setEnabled(false); } /** * Adding 5X2-folds file * @param e Event */ void anadir12_actionPerformed(ActionEvent e) { // add 5x2 cross validation files File dir = new File("." + data.dsc.getPath() + data.dsc.getName()); String[] ficheros = dir.list(); boolean cont = true, metido; for (int i = 1; i <= 5; i++) { String pareja = ""; for (int j = 0; j < ficheros.length; j++) { if (ficheros[j].indexOf("5x2-" + i + "tra.dat") != -1) { pareja = ficheros[j] + ","; break; } } for (int j = 0; j < ficheros.length; j++) { if (ficheros[j].indexOf("5x2-" + i + "tst.dat") != -1) { pareja += ficheros[j]; break; } } aList.add(pareja); } // add 5x2 cross validation files for each layer for (int k = 0; k < Layer.numLayers; k++) { dir = new File("." + data.dsc.getPath(k) + data.dsc.getName(k)); ficheros = dir.list(); for (int i = 1; i <= 5; i++) { String pareja = ""; metido = false; for (int j = 0; j < ficheros.length; j++) { if (ficheros[j].indexOf("5x2-" + i + "tra.dat") != -1) { pareja = ficheros[j] + ","; metido = true; break; } } if (!metido) { cont = false; } metido = false; for (int j = 0; j < ficheros.length; j++) { if (ficheros[j].indexOf("5x2-" + i + "tst.dat") != -1) { pareja += ficheros[j]; metido = true; break; } } if (!metido) { cont = false; } ((Vector) (someLists.elementAt(k))).add(pareja); } } if (!cont) { aList.clear(); for (int i = 0; i < someLists.size(); i++) { ((Vector) (someLists.elementAt(i))).clear(); } JOptionPane.showMessageDialog(this, "Some files not found. Cancelling operation.", "Error", JOptionPane.ERROR_MESSAGE); jLabel5.setEnabled(false); } else { jLabel5.setEnabled(true); } jList2.setListData(aList.toArray()); } } class DialogDataset2_anadir_actionAdapter implements java.awt.event.ActionListener { DialogDataset2 adaptee; DialogDataset2_anadir_actionAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.anadir_actionPerformed(e); } } class DialogDataset2_quitar_actionAdapter implements java.awt.event.ActionListener { DialogDataset2 adaptee; DialogDataset2_quitar_actionAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.quitar_actionPerformed(e); } } class DialogDataset2_quitar_todo_actionAdapter implements java.awt.event.ActionListener { DialogDataset2 adaptee; DialogDataset2_quitar_todo_actionAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.quitar_todo_actionPerformed(e); } } class DialogDataset2_cancelar_actionAdapter implements java.awt.event.ActionListener { DialogDataset2 adaptee; DialogDataset2_cancelar_actionAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.cancelar_actionPerformed(e); } } class DialogDataset2_aceptar_actionAdapter implements java.awt.event.ActionListener { DialogDataset2 adaptee; DialogDataset2_aceptar_actionAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.aceptar_actionPerformed(e); } } class DialogDataset2_this_windowAdapter extends java.awt.event.WindowAdapter { DialogDataset2 adaptee; DialogDataset2_this_windowAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } @Override public void windowClosing(WindowEvent e) { adaptee.this_windowClosing(e); } } class DialogDataset2_busca_tra_actionAdapter implements java.awt.event.ActionListener { DialogDataset2 adaptee; DialogDataset2_busca_tra_actionAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.busca_tra_actionPerformed(e); } } class DialogDataset2_busca_tst_actionAdapter implements java.awt.event.ActionListener { DialogDataset2 adaptee; DialogDataset2_busca_tst_actionAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.busca_tst_actionPerformed(e); } } class DialogDataset2_anadir5_actionAdapter implements java.awt.event.ActionListener { DialogDataset2 adaptee; DialogDataset2_anadir5_actionAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.anadir5_actionPerformed(e); } } class DialogDataset2_anadir12_actionAdapter implements java.awt.event.ActionListener { DialogDataset2 adaptee; DialogDataset2_anadir12_actionAdapter(DialogDataset2 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.anadir12_actionPerformed(e); } }