001 /****************************************************************************** 002 * Copyright (C) MActor Developers. All rights reserved. * 003 * ---------------------------------------------------------------------------* 004 * This file is part of MActor. * 005 * * 006 * MActor is free software; you can redistribute it and/or modify * 007 * it under the terms of the GNU General Public License as published by * 008 * the Free Software Foundation; either version 2 of the License, or * 009 * (at your option) any later version. * 010 * * 011 * MActor is distributed in the hope that it will be useful, * 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 014 * GNU General Public License for more details. * 015 * * 016 * You should have received a copy of the GNU General Public License * 017 * along with MActor; if not, write to the Free Software * 018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * 019 ******************************************************************************/ 020 package org.mactor.ui.gui.project.editors; 021 022 import java.awt.BorderLayout; 023 import java.awt.FlowLayout; 024 import java.awt.Frame; 025 import java.awt.event.ActionEvent; 026 027 import javax.swing.AbstractAction; 028 import javax.swing.JButton; 029 import javax.swing.JDialog; 030 import javax.swing.JLabel; 031 import javax.swing.JPanel; 032 import javax.swing.JScrollPane; 033 import javax.swing.JTable; 034 import javax.swing.table.AbstractTableModel; 035 import javax.swing.table.DefaultTableModel; 036 037 import org.dom4j.Element; 038 import org.mactor.framework.MactorException; 039 import org.mactor.framework.data.DataProviderFactory; 040 import org.mactor.framework.data.DataTable; 041 import org.mactor.ui.gui.GuiUtil; 042 043 public class DataSourceTestDlg extends JDialog { 044 JTable table = new JTable(); 045 JLabel messageLabel = new JLabel("Press \"Load Data\" to verif that data can be read from the specified data source"); 046 Element commandElement; 047 JButton okButton = new JButton(new AbstractAction("Ok") { 048 public void actionPerformed(ActionEvent arg0) { 049 dispose(); 050 }; 051 }); 052 JButton loadButton = new JButton(new AbstractAction("Load Data") { 053 public void actionPerformed(ActionEvent arg0) { 054 try { 055 DataTable data = DataProviderFactory.getDataProvider(commandElement.attributeValue("data_source")).loadData(); 056 if (data == null) { 057 table.setModel(new DefaultTableModel()); 058 messageLabel.setVisible(true); 059 messageLabel.setText("The data source specification is OK, but no data was found"); 060 } else { 061 table.setVisible(true); 062 messageLabel.setVisible(false); 063 table.setModel(new TestResultTableModel(data)); 064 } 065 } catch (MactorException me) { 066 GuiUtil.showGuiError(DataSourceTestDlg.this, me); 067 } 068 }; 069 }); 070 private String evaluateCommand() { 071 return null; 072 } 073 public DataSourceTestDlg(Frame parent, Element commandElement) throws MactorException { 074 super(parent); 075 setLayout(new BorderLayout()); 076 setModal(true); 077 setTitle("Test Data Source"); 078 this.commandElement = commandElement; 079 SimpleFormPanel form = new SimpleFormPanel(); 080 JPanel bp = new JPanel(new FlowLayout()); 081 bp.add(loadButton); 082 form.add(bp); 083 SimpleFormPanel resultForm = new SimpleFormPanel(); 084 resultForm.add(new JLabel("Data:")); 085 resultForm.add(new JScrollPane(table)); 086 resultForm.add(messageLabel); 087 form.add(resultForm); 088 add(form, BorderLayout.CENTER); 089 JPanel buttonPanel = new JPanel(new FlowLayout()); 090 buttonPanel.add(okButton); 091 add(buttonPanel, BorderLayout.SOUTH); 092 pack(); 093 } 094 private class TestResultTableModel extends AbstractTableModel { 095 private int columnCount = 0; 096 private DataTable data; 097 public TestResultTableModel(DataTable data) { 098 this.columnCount = data.getColumnCount(); 099 this.data = data; 100 } 101 @Override 102 public String getColumnName(int index) { 103 return data.getColumn(index); 104 } 105 public int getColumnCount() { 106 return columnCount; 107 } 108 public int getRowCount() { 109 return data.getRowCount(); 110 } 111 @Override 112 public Class<?> getColumnClass(int arg0) { 113 return String.class; 114 } 115 public Object getValueAt(int row, int col) { 116 return data.getValue(row, col); 117 } 118 } 119 }