/*
* 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 2 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, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* SQLViewerPerspective.java
* Copyright (C) 2011 University of Waikato, Hamilton, New Zealand
*
*/
package weka.gui.beans;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.beancontext.BeanContextSupport;
import java.util.Vector;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JPanel;
import weka.core.Instances;
import weka.core.converters.DatabaseLoader;
import weka.gui.beans.KnowledgeFlowApp.MainKFPerspective;
import weka.gui.sql.SqlViewer;
import weka.gui.sql.event.ConnectionEvent;
import weka.gui.sql.event.ConnectionListener;
/**
* Simple Knowledge Flow perspective that wraps the SqlViewer class
*
* @author Mark Hall (mhall{[at]}pentaho{[dot]}com)
* @version $Revision: 7339 $
*/
public class SQLViewerPerspective extends JPanel implements KnowledgeFlowApp.KFPerspective {
/**
* For serialization
*/
private static final long serialVersionUID = 3684166225482042972L;
protected MainKFPerspective m_mainPerspective;
protected SqlViewer m_viewer;
protected JButton m_newFlowBut;
/**
* Constructor
*/
public SQLViewerPerspective() {
setLayout(new BorderLayout());
m_viewer = new SqlViewer(null);
add(m_viewer, BorderLayout.CENTER);
m_newFlowBut = new JButton("New Flow");
m_newFlowBut.setToolTipText("Set up a new Knowledge Flow with the " +
"current connection and query");
JPanel butHolder = new JPanel();
butHolder.add(m_newFlowBut);
add(butHolder, BorderLayout.SOUTH);
m_newFlowBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (m_mainPerspective != null) {
newFlow();
}
}
});
m_newFlowBut.setEnabled(false);
m_viewer.addConnectionListener(new ConnectionListener() {
@Override
public void connectionChange(ConnectionEvent evt) {
if (evt.getType() == ConnectionEvent.DISCONNECT) {
m_newFlowBut.setEnabled(false);
} else {
m_newFlowBut.setEnabled(true);
}
}
});
}
protected void newFlow() {
m_newFlowBut.setEnabled(false);
String user = m_viewer.getUser();
String password = m_viewer.getPassword();
String uRL = m_viewer.getURL();
String query = m_viewer.getQuery();
if (query == null) {
query = "";
}
try {
DatabaseLoader dbl = new DatabaseLoader();
dbl.setUser(user);
dbl.setPassword(password);
dbl.setUrl(uRL);
dbl.setQuery(query);
BeanContextSupport bc = new BeanContextSupport();
bc.setDesignTime(true);
Loader loaderComp = new Loader();
bc.add(loaderComp);
loaderComp.setLoader(dbl);
KnowledgeFlowApp singleton = KnowledgeFlowApp.getSingleton();
m_mainPerspective.addTab("DBSource");
BeanInstance beanI =
new BeanInstance(m_mainPerspective.getBeanLayout(m_mainPerspective.getNumTabs() - 1),
loaderComp, 50, 50, m_mainPerspective.getNumTabs() - 1);
Vector beans = BeanInstance.getBeanInstances(m_mainPerspective.getNumTabs() - 1);
Vector connections = BeanConnection.getConnections(m_mainPerspective.getNumTabs() - 1);
singleton.integrateFlow(beans, connections, true, false);
singleton.setActivePerspective(0); // switch back to the main perspective
m_newFlowBut.setEnabled(true);
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Set instances (if the perspective accepts them)
*
* @param insts the instances
*/
public void setInstances(Instances insts) throws Exception {
// nothing to do - we don't take instances
}
/**
* Returns true if this perspective accepts instances
*
* @return true if this perspective can accept instances
*/
public boolean acceptsInstances() {
return false;
}
/**
* Get the title of this perspective
*
* @return the title of this perspective
*/
public String getPerspectiveTitle() {
return "SQL Viewer";
}
/**
* Get the tool tip text for this perspective.
*
* @return the tool tip text for this perspective
*/
public String getPerspectiveTipText() {
return "Explore database tables with SQL";
}
/**
* Get the icon for this perspective.
*
* @return the Icon for this perspective (or null if the
* perspective does not have an icon)
*/
public Icon getPerspectiveIcon() {
java.awt.Image pic = null;
java.net.URL imageURL = this.getClass().getClassLoader().
getResource("weka/gui/beans/icons/database.png");
if (imageURL == null) {
} else {
pic = java.awt.Toolkit.getDefaultToolkit().
getImage(imageURL);
}
return new javax.swing.ImageIcon(pic);
}
/**
* Set active status of this perspective. True indicates
* that this perspective is the visible active perspective
* in the KnowledgeFlow
*
* @param active true if this perspective is the active one
*/
public void setActive(boolean active) {
// nothing to do
}
/**
* Set whether this perspective is "loaded" - i.e. whether
* or not the user has opted to have it available in the
* perspective toolbar. The perspective can make the decision
* as to allocating or freeing resources on the basis of this.
*
* @param loaded true if the perspective is available in
* the perspective toolbar of the KnowledgeFlow
*/
public void setLoaded(boolean loaded) {
// nothing to do
}
/**
* Set a reference to the main KnowledgeFlow perspective - i.e.
* the perspective that manages flow layouts.
*
* @param main the main KnowledgeFlow perspective.
*/
public void setMainKFPerspective(MainKFPerspective main) {
// nothing to do (could potentially create a new flow in
// the knowledge flow with a configured DatabaseLoader).
m_mainPerspective = main;
}
/**
* Main method for testing this class
*
* @param args command line arguments
*/
public static void main(String[] args) {
final javax.swing.JFrame jf = new javax.swing.JFrame();
jf.getContentPane().setLayout(new java.awt.BorderLayout());
SQLViewerPerspective p = new SQLViewerPerspective();
jf.getContentPane().add(p, BorderLayout.CENTER);
jf.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
jf.dispose();
System.exit(0);
}
});
jf.setSize(800,600);
jf.setVisible(true);
}
}