/* ===========================================================
* TradeManager : a application to trade strategies for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Project Info: org.trade
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library 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 Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Oracle, Inc.
* in the United States and other countries.]
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Original Author: Simon Allen;
* Contributor(s): -;
*
* Changes
* -------
*
*/
package org.trade.ui.base;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.lang.reflect.Method;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.trade.core.util.Reflector;
/**
*
* @version $Id: BasePanel.java,v 1.21 2002/01/22 21:59:35 simon Exp $
* @author Simon Allen
*/
public abstract class BasePanel extends JPanel implements MessageListener {
/**
*
*/
private static final long serialVersionUID = 7015215807608484202L;
private final static Logger _log = LoggerFactory.getLogger(BasePanel.class);
public static final int INFORMATION = 1;
public static final int WARNING = 2;
public static final int ERROR = 3;
public static final int PROGRESS = 4;
private static final int CLEAR = 0;
private static BasePanelMenu menuBar = null;
private static Frame m_frame = null;
private static JTextField m_statusBar = null;
private static JProgressBar m_progressBar = null;
private boolean m_isSelected = false;
public BasePanel() {
Dimension size = new Dimension(400, 300);
this.setPreferredSize(size);
}
/**
* Method setSelected.
*
* @param selected
* boolean
*/
public void setSelected(boolean selected) {
m_isSelected = selected;
}
/**
* Method isSelected.
*
* @return boolean
*/
public boolean isSelected() {
return m_isSelected;
}
/**
* Method setStatusBar.
*
* @param statusBar
* JTextField
*/
public void setStatusBar(JTextField statusBar) {
if (m_statusBar == null) {
m_statusBar = statusBar;
}
}
/**
* Method setProgressBar.
*
* @param progressBar
* JProgressBar
*/
public void setProgressBar(JProgressBar progressBar) {
if (m_progressBar == null) {
m_progressBar = progressBar;
}
}
/**
* Method getProgressBar.
*
* @return JProgressBar
*/
public static JProgressBar getProgressBar() {
return m_progressBar;
}
public void clearStatusBarMessage() {
setStatusBarMessage("", BasePanel.CLEAR);
}
/**
* Method setStatusBarMessage.
*
* @param message
* String
* @param state
* int
*/
public void setStatusBarMessage(String message, int state) {
switch (state) {
case 0: {
m_statusBar.setBackground(Color.white);
m_statusBar.setText("");
break;
}
case 1: {
_log.info(message);
m_statusBar.setBackground(Color.green);
break;
}
case 2: {
_log.warn(message);
m_statusBar.setBackground(Color.yellow);
break;
}
case 3: {
_log.error(message);
m_statusBar.setBackground(Color.red);
break;
}
case 4: {
m_statusBar.setBackground(Color.yellow);
break;
}
default: {
m_statusBar.setBackground(Color.white);
}
}
if ((message != null) && (state != BasePanel.CLEAR)) {
m_statusBar.setText(message);
}
}
/**
* Method getFrame.
*
* @return Frame
*/
protected Frame getFrame() {
if (m_frame == null) {
Component parent = this;
while ((parent != null) && !(parent instanceof JFrame)) {
parent = parent.getParent();
}
m_frame = (Frame) parent;
}
return m_frame;
}
/**
* Method handleEvent.
*
* @param e
* MessageEvent
* @param parm
* Vector<Object>
* @see org.trade.ui.base.MessageListener#handleEvent(MessageEvent, Vector
* <Object>)
*/
public void handleEvent(MessageEvent e, Vector<Object> parm) {
if ((e.getSource() instanceof String) && m_isSelected) {
String method = (String) e.getSource();
// _log.info("Fire Method: " + method + " in Class: "
// + this.getClass().getName());
doFireMethod(method, parm);
}
}
public abstract void doWindowClose();
public abstract void doWindowActivated();
/**
* Method doWindowDeActivated.
*
* @return boolean
*/
public abstract boolean doWindowDeActivated();
public abstract void doWindowOpen();
/**
* Method doFireMethod.
*
* @param methodName
* String
* @param parm
* Vector<Object>
*/
protected synchronized void doFireMethod(String methodName, Vector<Object> parm) {
int vectorSize = 0;
vectorSize = parm.size();
Class<?>[] parms = new Class[vectorSize];
Object[] objects = new Object[vectorSize];
StringBuffer classes = new StringBuffer();
for (Object object : parm) {
Object obj = object;
classes.append(obj.getClass().getName() + "\n");
parms[parm.indexOf(obj)] = obj.getClass();
objects[parm.indexOf(obj)] = obj;
}
try {
Method method = Reflector.findMethod(this.getClass(), methodName, parms);
if (null != method) {
method.invoke(this, objects);
}
} catch (Exception e) {
// Do nothing this panel is not actively listening for this event
_log.error("Exception in reflection BasePanel method: " + methodName + " Parms #: " + vectorSize
+ " Method " + methodName + " Parms class: " + classes + " not found in class: "
+ this.getClass().getName() + " Error Msg: " + e.getMessage());
setStatusBarMessage(e.getMessage(), ERROR);
}
}
/**
* Method getMenu.
*
* @return BasePanelMenu
*/
public static BasePanelMenu getMenu() {
return menuBar;
}
/**
* Method setMenu.
*
* @param menu
* BasePanelMenu
*/
public void setMenu(final BasePanelMenu menu) {
menuBar = menu;
}
/**
* Method setErrorMessage.
*
* @param title
* String
* @param message
* String
* @param ex
* Exception
*/
public void setErrorMessage(String title, String message, Exception ex) {
_log.error("Title: " + title + " Msg: " + message, ex);
this.setStatusBarMessage(message, ERROR);
JOptionPane.showMessageDialog(getFrame(), message + " See log for details.", title, JOptionPane.ERROR_MESSAGE);
this.clearStatusBarMessage();
}
}