package com.sun.j2ee.blueprints.admin.client;
import java.awt.*;
import java.awt.event.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.*;
import java.util.*;
public class PetStoreAdminClient extends JFrame
implements PropertyChangeListener {
private static ResourceBundle bundle;
private DataSource dataSource;
private JTabbedPane ordersTabbedPane;
private JTabbedPane salesTabbedPane;
private JToggleButton ordersToggleButton;
private JToggleButton salesToggleButton;
private MouseHandler mouseHandler = new MouseHandler();
private About aboutDialog = null;
private static final String[] developerNames = {
"Joshua Outwater", "Hans Muller", "Vijay Ramachandran",
"Shannon Hickey", "Jeff Dinkins", "Mark Davidson", "Rene Schmidt",
"Norbert Lindenberg"};
private AbstractAction exitAction = new ExitAction();
private AbstractItemAction ordersAction = new OrdersAction();
private AbstractItemAction salesAction = new SalesAction();
private AbstractAction aboutAction = new AboutAction();
private DataSource.RefreshAction refreshAction;
public PetStoreAdminClient(String petStoreProxyClassName, String hostname, String port, String endpoint) {
super(getString("PetStore.title"));
setSize(640, 480);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dataSource = new DataSource(this, petStoreProxyClassName, hostname, port, endpoint);
createUI();
setVisible(true);
refreshAction.actionPerformed(null);
}
private void about() {
if (aboutDialog == null) {
aboutDialog = new About(getString("About.title"),
getString("About.message"), developerNames, this, true);
}
aboutDialog.setLocationRelativeTo(this);
aboutDialog.setVisible(true);
}
private void createUI() {
getContentPane().setLayout(new BorderLayout());
OrdersViewPanel ordersViewPanel = new OrdersViewPanel(
dataSource.getOrdersViewTableModel());
OrdersApprovePanel ordersApprovePanel = new OrdersApprovePanel(
dataSource.getOrdersApproveTableModel());
ordersTabbedPane = new JTabbedPane();
ordersTabbedPane.add(getString("OrdersViewPanel.title"),
ordersViewPanel);
ordersTabbedPane.add(getString("OrdersApprovePanel.title"),
ordersApprovePanel);
PieChartPanel pieChartPanel =
new PieChartPanel(dataSource.getPieChartModel());
BarChartPanel barChartPanel =
new BarChartPanel(dataSource.getBarChartModel());
salesTabbedPane = new JTabbedPane();
salesTabbedPane.add(getString("PieChart.title"), pieChartPanel);
salesTabbedPane.add(getString("BarChart.title"), barChartPanel);
setJMenuBar(createMenuBar());
getContentPane().add(createToolBar(), BorderLayout.NORTH);
getContentPane().add(ordersTabbedPane, BorderLayout.CENTER);
getContentPane().add(StatusBar.getInstance(), BorderLayout.SOUTH);
dataSource.addPropertyChangeListener(DataSource.ENABLE_ACTIONS, this);
dataSource.addPropertyChangeListener(DataSource.DISABLE_ACTIONS, this);
dataSource.addPropertyChangeListener(DataSource.ORDER_DATA_CHANGED,
ordersViewPanel);
dataSource.addPropertyChangeListener(DataSource.ORDER_DATA_CHANGED,
ordersApprovePanel);
dataSource.addPropertyChangeListener(DataSource.ENABLE_ACTIONS,
ordersApprovePanel);
dataSource.addPropertyChangeListener(DataSource.DISABLE_ACTIONS,
ordersApprovePanel);
dataSource.addPropertyChangeListener(DataSource.PIE_CHART_DATA_CHANGED,
pieChartPanel);
dataSource.addPropertyChangeListener(DataSource.ENABLE_ACTIONS,
pieChartPanel);
dataSource.addPropertyChangeListener(DataSource.DISABLE_ACTIONS,
pieChartPanel);
dataSource.addPropertyChangeListener(DataSource.BAR_CHART_DATA_CHANGED,
barChartPanel);
dataSource.addPropertyChangeListener(DataSource.ENABLE_ACTIONS,
barChartPanel);
dataSource.addPropertyChangeListener(DataSource.DISABLE_ACTIONS,
barChartPanel);
}
private JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu(getString("FileAction.name"));
menu.setMnemonic(getMnemonic("FileAction.mnemonic"));
JMenuItem menuItem = new JMenuItem(exitAction);
menuItem.setMnemonic(getMnemonic("ExitAction.mnemonic"));
menuItem.addMouseListener(mouseHandler);
menu.add(menuItem);
menuBar.add(menu);
menu = new JMenu(getString("ViewAction.name"));
menu.setMnemonic(getMnemonic("ViewAction.mnemonic"));
ButtonGroup bg = new ButtonGroup();
menuItem = new JRadioButtonMenuItem(ordersAction);
menuItem.setMnemonic(getMnemonic("OrdersAction.mnemonic"));
menuItem.setToolTipText(
(String)ordersAction.getValue(Action.SHORT_DESCRIPTION));
menuItem.addMouseListener(mouseHandler);
menuItem.addItemListener(ordersAction);
ordersAction.addPropertyChangeListener(
new ToggleActionPropertyChangeListener(menuItem));
menuItem.setSelected(true);
bg.add(menuItem);
menu.add(menuItem);
menuItem = new JRadioButtonMenuItem(salesAction);
menuItem.setMnemonic(getMnemonic("SalesAction.mnemonic"));
menuItem.addMouseListener(mouseHandler);
menuItem.addItemListener(salesAction);
salesAction.addPropertyChangeListener(
new ToggleActionPropertyChangeListener(menuItem));
menu.add(menuItem);
bg.add(menuItem);
menuBar.add(menu);
return menuBar;
}
private JToolBar createToolBar() {
refreshAction = dataSource.getRefreshAction();
JToolBar toolBar = new JToolBar();
ordersToggleButton = new JToggleButton(ordersAction);
ordersToggleButton.setToolTipText(
(String)ordersAction.getValue(Action.SHORT_DESCRIPTION));
ordersToggleButton.setText(null);
ordersToggleButton.addMouseListener(mouseHandler);
ordersToggleButton.addItemListener(ordersAction);
ordersAction.addPropertyChangeListener(
new ToggleActionPropertyChangeListener(ordersToggleButton));
toolBar.add(ordersToggleButton);
salesToggleButton = new JToggleButton(salesAction);
salesToggleButton.setToolTipText(
(String)salesAction.getValue(Action.SHORT_DESCRIPTION));
salesToggleButton.setText(null);
salesToggleButton.addMouseListener(mouseHandler);
salesToggleButton.addItemListener(salesAction);
salesAction.addPropertyChangeListener(
new ToggleActionPropertyChangeListener(salesToggleButton));
toolBar.add(salesToggleButton);
toolBar.addSeparator();
ButtonGroup group = new ButtonGroup();
group.add(ordersToggleButton);
group.add(salesToggleButton);
ordersToggleButton.setSelected(true);
JButton button = toolBar.add(refreshAction);
button.setToolTipText(
(String)refreshAction.getValue(Action.SHORT_DESCRIPTION));
button.addMouseListener(mouseHandler);
button = toolBar.add(aboutAction);
button.setToolTipText(
(String)aboutAction.getValue(Action.SHORT_DESCRIPTION));
button.addMouseListener(mouseHandler);
return toolBar;
}
private static ResourceBundle getResourceBundle() {
if (bundle == null) {
bundle = ResourceBundle.getBundle("resources.petstore");
}
return bundle;
}
public static String getString(String key) {
String result = null;
try {
result = getResourceBundle().getString(key);
} catch (MissingResourceException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static char getMnemonic(String key) {
return (getString(key)).charAt(0);
}
public static int getInteger(String key) {
int result = -1;
try {
result = Integer.parseInt(getString(key));
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public void propertyChange(PropertyChangeEvent e) {
String property = e.getPropertyName();
if (DataSource.DISABLE_ACTIONS.equals(property)) {
refreshAction.setEnabled(false);
aboutAction.setEnabled(false);
exitAction.setEnabled(false);
} else if (DataSource.ENABLE_ACTIONS.equals(property)) {
refreshAction.setEnabled(true);
aboutAction.setEnabled(true);
exitAction.setEnabled(true);
}
}
private class MouseHandler extends MouseAdapter {
public MouseHandler() {
}
public void mouseEntered(MouseEvent evt) {
if (evt.getSource() instanceof AbstractButton) {
AbstractButton button = (AbstractButton)evt.getSource();
Action action = button.getAction();
if (action != null) {
StatusBar.getInstance().setMessage(
(String)action.getValue(Action.LONG_DESCRIPTION));
}
}
}
public void mouseExited(MouseEvent e) {
StatusBar.getInstance().setMessage(null);
}
}
protected class ExitAction extends AbstractAction {
public ExitAction() {
super(getString("ExitAction.name"));
putValue(SHORT_DESCRIPTION, getString("ExitAction.tooltip"));
putValue(LONG_DESCRIPTION, getString("ExitAction.description"));
}
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
protected class OrdersAction extends AbstractItemAction {
public OrdersAction() {
super(getString("OrdersAction.name"));
putValue(SHORT_DESCRIPTION, getString("OrdersAction.tooltip"));
putValue(LONG_DESCRIPTION, getString("OrdersAction.description"));
putValue(SMALL_ICON, new ImageIcon(
getClass().getResource("/resources/orders.gif")));
}
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (salesTabbedPane.isShowing()) {
getContentPane().remove(salesTabbedPane);
}
if (!ordersTabbedPane.isShowing()) {
getContentPane().add(ordersTabbedPane,
BorderLayout.CENTER);
}
validate();
repaint();
}
});
}
public void itemStateChanged(ItemEvent evt) {
boolean show;
if (evt.getStateChange() == ItemEvent.SELECTED) {
show = true;
} else {
show = false;
}
setSelected(show);
}
}
protected class SalesAction extends AbstractItemAction {
public SalesAction() {
super(getString("SalesAction.name"));
putValue(SHORT_DESCRIPTION, getString("SalesAction.tooltip"));
putValue(LONG_DESCRIPTION, getString("SalesAction.description"));
putValue(SMALL_ICON, new ImageIcon(
getClass().getResource("/resources/sales.gif")));
}
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (ordersTabbedPane.isShowing()) {
getContentPane().remove(ordersTabbedPane);
}
if (!salesTabbedPane.isShowing()) {
getContentPane().add(salesTabbedPane,
BorderLayout.CENTER);
}
validate();
repaint();
}
});
}
public void itemStateChanged(ItemEvent evt) {
boolean show;
if (evt.getStateChange() == ItemEvent.SELECTED) {
show = true;
} else {
show = false;
}
setSelected(show);
}
}
protected class AboutAction extends AbstractAction {
public AboutAction() {
super(getString("AboutAction.name"));
putValue(SHORT_DESCRIPTION, getString("AboutAction.tooltip"));
putValue(LONG_DESCRIPTION, getString("AboutAction.description"));
putValue(SMALL_ICON, new ImageIcon(
getClass().getResource("/resources/About24.gif")));
}
public void actionPerformed(ActionEvent e) {
about();
}
}
public static void main(String args[]) {
if (args.length != 4) {
System.err.println("Usage: java PetStoreAdminClient <class name for petstore proxy> <hostname> " +
"<port> <session id>");
System.exit(1);
}
new PetStoreAdminClient(args[0], args[1], args[2], args[3]);
}
}