package pikater.gui.java; import jade.gui.GuiAgent; import jade.gui.GuiEvent; import jade.util.leap.ArrayList; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.regex.Pattern; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; import pikater.ontology.messages.Metadata; public class FileManagerPanel extends JPanel { private static final long serialVersionUID = 1L; private JSplitPane jSplitPane = null; private JPanel jPanel = null; private JPanel jPanel1 = null; private JScrollPane jScrollPane = null; private JTable jTable = null; private JTextField jTextField = null; private JButton jButton = null; private JButton jButton1 = null; private GuiAgent myAgent = null; private FilesTableModel filesModel = null; public FileManagerPanel(GuiAgent a) { super(); myAgent = a; filesModel = new FilesTableModel(); initialize(); } public void reloadFileInfo() { GuiEvent ge = new GuiEvent(this, MainWindow.GET_FILES_INFO); ge.addParameter(1); myAgent.postGuiEvent(ge); } public void setFiles(ArrayList data) { filesModel.setFiles(data); jTable.setModel(filesModel); jTable.createDefaultColumnsFromModel(); } String[] attributesTypes = { "Categorical", "Numerical", "Mixed" }; String[] defaultTasks = { "Classification", "Regression", "Clustering" }; private class FilesTableModel extends AbstractTableModel { private static final long serialVersionUID = -5772409714155549244L; ArrayList data = new ArrayList(); private String columnName(int index) { switch (index) { case 0: return "Filename"; case 1: return "Number of attributes"; case 2: return "Attributes type"; case 3: return "Number of instances"; case 4: return "Missing values"; case 5: return "Default task"; default: return ""; } } private Object getColumnValue(Metadata m, int index) { switch (index) { case 0: return m.getExternal_name(); case 1: return m.getNumber_of_attributes(); case 2: return m.getAttribute_type(); case 3: return m.getNumber_of_instances(); case 4: return m.getMissing_values(); case 5: return m.getDefault_task(); default: return ""; } } private void setColumnValue(Metadata m, int index, Object value) { switch (index) { case 0: m.setExternal_name((String) value); break; case 1: m.setNumber_of_attributes((Integer) value); break; case 2: m.setAttribute_type((String) value); break; case 3: m.setNumber_of_instances((Integer) value); break; case 4: m.setMissing_values((Boolean) value); break; case 5: m.setDefault_task((String) value); break; } } public void setFiles(ArrayList data) { this.data = data; } public FilesTableModel() { reloadFileInfo(); } @Override public void addTableModelListener(TableModelListener l) { // super.addTableModelListener(l); } @Override public Class<?> getColumnClass(int columnIndex) { if (data == null) { return String.class; } Object value = getColumnValue((Metadata) data.get(0), columnIndex); if (value == null) { return String.class; } return getColumnValue((Metadata) data.get(0), columnIndex) .getClass(); } @Override public int getColumnCount() { if (data.size() == 0) { return 0; } return 6; } @Override public String getColumnName(int columnIndex) { return columnName(columnIndex); } @Override public int getRowCount() { return data.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { Object value = getColumnValue((Metadata) data.get(rowIndex), columnIndex); return value; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { if (columnIndex > 0) { return true; } return false; } @Override public void removeTableModelListener(TableModelListener l) { // super.removeTableModelListener(l); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { Metadata update = (Metadata) data.get(rowIndex); setColumnValue(update, columnIndex, aValue); GuiEvent ge = new GuiEvent(this, MainWindow.UPDATE_METADATA); ge.addParameter(update); myAgent.postGuiEvent(ge); } } /** * This is the default constructor */ public FileManagerPanel() { super(); initialize(); filesModel = new FilesTableModel(); } /** * This method initializes this * * @return void */ private void initialize() { GridBagConstraints gridBagConstraints = new GridBagConstraints(); gridBagConstraints.fill = GridBagConstraints.BOTH; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.gridx = 0; this.setSize(520, 480); this.setLayout(new GridBagLayout()); this.add(getJSplitPane(), gridBagConstraints); } /** * This method initializes jSplitPane * * @return javax.swing.JSplitPane */ private JSplitPane getJSplitPane() { if (jSplitPane == null) { jSplitPane = new JSplitPane(); jSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); jSplitPane.setDividerLocation(30); jSplitPane.setPreferredSize(new Dimension(520, 480)); jSplitPane.setDividerSize(10); jSplitPane.setBottomComponent(getJPanel1()); jSplitPane.setTopComponent(getJPanel()); } return jSplitPane; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(new FlowLayout()); jPanel.setPreferredSize(new Dimension(520, 30)); jPanel.add(getJTextField(), null); jPanel.add(getJButton(), null); jPanel.add(getJButton1(), null); } return jPanel; } /** * This method initializes jPanel1 * * @return javax.swing.JPanel */ private JPanel getJPanel1() { if (jPanel1 == null) { GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); gridBagConstraints1.fill = GridBagConstraints.BOTH; gridBagConstraints1.gridy = 0; gridBagConstraints1.weightx = 1.0; gridBagConstraints1.weighty = 1.0; gridBagConstraints1.gridx = 0; jPanel1 = new JPanel(); jPanel1.setLayout(new GridBagLayout()); jPanel1.add(getJScrollPane(), gridBagConstraints1); } return jPanel1; } /** * This method initializes jScrollPane * * @return javax.swing.JScrollPane */ private JScrollPane getJScrollPane() { if (jScrollPane == null) { jScrollPane = new JScrollPane(); jScrollPane.setViewportView(getJTable()); } return jScrollPane; } /** * This method initializes jTable * * @return javax.swing.JTable */ private JTable getJTable() { if (jTable == null) { jTable = new JTable(); } return jTable; } /** * This method initializes jTextField * * @return javax.swing.JTextField */ private JTextField getJTextField() { if (jTextField == null) { jTextField = new JTextField(); jTextField.setPreferredSize(new Dimension(200, 20)); } return jTextField; } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setPreferredSize(new Dimension(200, 20)); jButton.setText("Choose file..."); jButton.addMouseListener(new java.awt.event.MouseListener() { public void mouseClicked(java.awt.event.MouseEvent e) { JFileChooser importFile = new JFileChooser(); importFile.setVisible(true); if (importFile.showOpenDialog(FileManagerPanel.this) == JFileChooser.APPROVE_OPTION) { File f = importFile.getSelectedFile(); jTextField.setText(f.getPath()); } } public void mousePressed(java.awt.event.MouseEvent e) { } public void mouseReleased(java.awt.event.MouseEvent e) { } public void mouseEntered(java.awt.event.MouseEvent e) { } public void mouseExited(java.awt.event.MouseEvent e) { } }); } return jButton; } /** * This method initializes jButton1 * * @return javax.swing.JButton */ private JButton getJButton1() { if (jButton1 == null) { jButton1 = new JButton(); jButton1.setPreferredSize(new Dimension(90, 20)); jButton1.setText("Import"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { String fileName = jTextField.getText(); File in = new File(fileName); try { BufferedReader fis = new BufferedReader(new FileReader( in)); StringBuffer data = new StringBuffer(10000); System.err.println("Starting reading file"); char[] buf = new char[1024]; int numRead = 0; while ((numRead = fis.read(buf)) != -1) { String readData = String.valueOf(buf, 0, numRead); data.append(readData); buf = new char[1024]; } fis.close(); System.err.println("Finished reading file"); GuiEvent ge = new GuiEvent(FileManagerPanel.this, MainWindow.IMPORT_FILE); String[] names = fileName.split(Pattern.quote(System .getProperty("file.separator"))); ge.addParameter(names[names.length - 1]); ge.addParameter(data.toString()); myAgent.postGuiEvent(ge); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } }); } return jButton1; } }