blob: ebfbc30006470c4c3e41166b2f0138c8b9c98bae [file] [log] [blame]
/*
* This file is part of the QuickServer library
* Copyright (C) QuickServer.org
*
* Use, modification, copying and distribution of this software is subject to
* the terms and conditions of the GNU Lesser General Public License.
* You should have received a copy of the GNU LGP License along with this
* library; if not, you can download a copy from <http://www.quickserver.org/>.
*
* For questions, suggestions, bug-reports, enhancement-requests etc.
* visit http://www.quickserver.org
*
*/
package org.quickserver.net.qsadmin.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.io.IOException;
import org.quickserver.util.*;
import java.util.logging.*;
import org.quickserver.swing.JFrameUtilities;
//--v1.3.2
import java.io.*;
import java.util.*;
import org.quickserver.util.io.*;
import org.quickserver.util.*;
import org.quickserver.util.xmlreader.QSAdminPluginConfig;
import org.quickserver.util.xmlreader.PluginConfigReader;
/**
* QSAdminGUI - Control Panel for
* QuickServer Admin GUI - QSAdminGUI
* @author Akshathkumar Shetty
* @since 1.3
*/
public class QSAdminGUI extends JPanel /*JFrame*/{
private static Logger logger = Logger.getLogger(
QSAdminGUI.class.getName());
private static QSAdminMain qsadminMain = null;
private static String pluginDir = "./../plugin";
private ClassLoader classLoader = getClass().getClassLoader();
public ImageIcon logo = new ImageIcon(
classLoader.getResource("icons/logo.gif"));
public ImageIcon logoAbout = new ImageIcon(
classLoader.getResource("icons/logo.png"));
public ImageIcon ball = new ImageIcon(
classLoader.getResource("icons/ball.gif"));
private HeaderPanel headerPanel;
private MainCommandPanel mainCommandPanel;
private CmdConsole cmdConsole;
private PropertiePanel propertiePanel;
//private StatsPanel statsPanel;
private JTabbedPane tabbedPane;
private JFrame parentFrame;
final HashMap pluginPanelMap = new HashMap();
//--v1.3.2
private ArrayList plugins = new ArrayList();
private JMenu mainMenu, helpMenu;
private JMenuBar jMenuBar;
private JMenuItem loginMenuItem, exitMenuItem, aboutMenuItem;
/**
* Logs the interaction,
* Type can be
* S - Server Sent
* C - Client Sent
*/
public void logComand(String command, char type) {
logger.info("For["+type+"] "+command);
}
/**
* Displays the QSAdminGUi with in a JFrame.
*/
public static void showGUI(String args[], final SplashScreen splash) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(
"net.sourceforge.mlf.metouia.MetouiaLookAndFeel");
} catch(Exception e) {
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch(Exception ee) {}
}
qsadminMain = new QSAdminMain();
JFrame frame = new JFrame("QSAdmin GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
QSAdminGUI qsAdminGUI = new QSAdminGUI(qsadminMain, frame);
qsAdminGUI.updateConnectionStatus(false);
frame.getContentPane().add(qsAdminGUI);
frame.pack();
frame.setSize(700, 450);
frame.setIconImage(qsAdminGUI.logo.getImage());
JFrameUtilities.centerWindow(frame);
frame.setVisible(true);
if(splash!=null) splash.kill();
}
});
}
public QSAdminGUI(QSAdminMain qsadminMain, JFrame parentFrame) {
this.parentFrame = parentFrame;
Container cp = this;
qsadminMain.setGUI(this);
cp.setLayout(new BorderLayout(5,5));
headerPanel = new HeaderPanel(qsadminMain, parentFrame);
mainCommandPanel = new MainCommandPanel(qsadminMain);
cmdConsole = new CmdConsole(qsadminMain);
propertiePanel = new PropertiePanel(qsadminMain);
if(headerPanel==null || mainCommandPanel==null ||
cmdConsole==null || propertiePanel==null) {
throw new RuntimeException("Loading of one of gui component failed.");
}
headerPanel.setBorder(BorderFactory.createEmptyBorder(0,5,0,5));
cp.add(headerPanel, BorderLayout.NORTH);
JScrollPane propertieScrollPane = new JScrollPane(propertiePanel);
//JScrollPane commandScrollPane = new JScrollPane(mainCommandPanel);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
true, mainCommandPanel, cmdConsole);
splitPane.setOneTouchExpandable(false);
splitPane.setDividerLocation(250);
//splitPane.setDividerLocation(0.70);
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.addTab("Main", ball, splitPane, "Main Commands");
tabbedPane.addTab("Get/Set", ball, propertieScrollPane, "Properties Panel");
QSAdminPluginConfig qsAdminPluginConfig = null;
PluginPanel pluginPanel = null;
//-- start of loadPlugins
try {
File xmlFile = null;
ClassLoader classLoader = null;
Class mainClass = null;
File file = new File(pluginDir);
File dirs[] = null;
if(file.canRead())
dirs = file.listFiles(new DirFileList());
for(int i=0;dirs!=null && i<dirs.length;i++) {
xmlFile = new File(dirs[i].getAbsolutePath()+
File.separator+"plugin.xml");
if(xmlFile.canRead()) {
qsAdminPluginConfig = PluginConfigReader.read(xmlFile);
if(qsAdminPluginConfig.getActive().equals("yes") &&
qsAdminPluginConfig.getType().equals("javax.swing.JPanel")) {
classLoader = ClassUtil.getClassLoaderFromJars( dirs[i].getAbsolutePath() );
mainClass = classLoader.loadClass(qsAdminPluginConfig.getMainClass());
logger.fine("Got PluginMainClass "+mainClass);
pluginPanel = (PluginPanel) mainClass.newInstance();
if( JPanel.class.isInstance(pluginPanel)==true ) {
logger.info("Loading plugin : "+qsAdminPluginConfig.getName());
pluginPanelMap.put(""+(2+i), pluginPanel);
plugins.add(pluginPanel);
tabbedPane.addTab(qsAdminPluginConfig.getName(),
ball, (JPanel)pluginPanel, qsAdminPluginConfig.getDesc());
pluginPanel.setQSAdminMain(qsadminMain);
pluginPanel.init();
}
} else {
logger.info("Plugin "+dirs[i]+" is disabled so skipping "+qsAdminPluginConfig.getActive()+":"+qsAdminPluginConfig.getType());
}
} else {
logger.info("No plugin configuration found in "+xmlFile+" so skipping");
}
}
} catch(Exception e) {
logger.warning("Error loading plugin : "+e);
logger.fine("StackTrace:\n"+MyString.getStackTrace(e));
}
//-- end of loadPlugins
tabbedPane.addChangeListener(new ChangeListener() {
int selected = -1;
int oldSelected = -1;
public void stateChanged(ChangeEvent e) {
//if plugin
selected = tabbedPane.getSelectedIndex();
if(selected>=2) {
( (PluginPanel)pluginPanelMap.get(""+selected) ).activated();
}
if(oldSelected>=2) {
( (PluginPanel)pluginPanelMap.get(""+oldSelected) ).deactivated();
}
oldSelected = selected;
}
});
//tabbedPane.setBorder(BorderFactory.createEmptyBorder(0,5,5,5));
cp.add(tabbedPane, BorderLayout.CENTER);
buildMenu();
}
public void setStatus(String msg) {
headerPanel.setStatus(msg);
}
public void setResponse(String res) {
int msgType = JOptionPane.PLAIN_MESSAGE ;
if(res.startsWith("+OK"))
msgType = JOptionPane.INFORMATION_MESSAGE;
if(res.startsWith("-ERR"))
msgType = JOptionPane.ERROR_MESSAGE;
JOptionPane.showMessageDialog(QSAdminGUI.this,
res.substring(res.indexOf(" ")+1), "Response", msgType);
}
public void appendToConsole(String msg) {
cmdConsole.append(msg);
}
public void setConsoleSend(boolean flag) {
cmdConsole.setSendEdit(flag);
}
public void updateConnectionStatus(boolean connected) {
if(connected==true) {
headerPanel.setLogoutText();
loginMenuItem.setText("Logout");
} else {
headerPanel.setLoginText();
loginMenuItem.setText("Login...");
}
mainCommandPanel.updateConnectionStatus(connected);
propertiePanel.updateConnectionStatus(connected);
cmdConsole.updateConnectionStatus(connected);
Iterator iterator = plugins.iterator();
PluginPanel updatePluginPanel = null;
while(iterator.hasNext()) {
updatePluginPanel = (PluginPanel)iterator.next();
updatePluginPanel.updateConnectionStatus(connected);
}
if(connected==true) {
int selected = tabbedPane.getSelectedIndex();
if(selected>=2) {
( (PluginPanel)pluginPanelMap.get(""+selected) ).activated();
}
}
}
//--v1.3.2
public static void setPluginDir(String dir) {
pluginDir = dir;
}
public static String getPluginDir() {
return pluginDir;
}
private void buildMenu() {
jMenuBar = new javax.swing.JMenuBar();
mainMenu = new javax.swing.JMenu();
mainMenu.setText("Main");
loginMenuItem = new JMenuItem("Login...");
loginMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
headerPanel.handleLoginLogout();
}
});
mainMenu.add(loginMenuItem);
exitMenuItem = new JMenuItem("Exit");
exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
if(qsadminMain.isConnected()==true) {
headerPanel.handleLoginLogout();
}
System.exit(0);
}
});
mainMenu.add(exitMenuItem);
helpMenu = new javax.swing.JMenu();
helpMenu.setText("Help");
aboutMenuItem = new JMenuItem("About...");
aboutMenuItem.setEnabled(true);
aboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
about();
}
});
helpMenu.add(aboutMenuItem);
jMenuBar.add(mainMenu);
jMenuBar.add(helpMenu);
parentFrame.setJMenuBar(jMenuBar);
}
private void about() {
JOptionPane.showMessageDialog(this,
"QSAdminGUI\n\n"+
"GUI Client for QSAdminServer of QuickServer.\n"+
"This is compliant with QuickServer v"+QSAdminMain.VERSION_OF_SERVER+" release.\n\n"+
"Copyright (C) QuickServer.org\n"+
"http://www.quickserver.org",
"About QSAdminGUI",
JOptionPane.INFORMATION_MESSAGE,
logoAbout);
}
}