Package org.springframework.amqp.rabbit.stocks.ui

Source Code of org.springframework.amqp.rabbit.stocks.ui.StockPanel

/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.springframework.amqp.rabbit.stocks.ui;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.text.DecimalFormat;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.amqp.rabbit.stocks.domain.Quote;
import org.springframework.amqp.rabbit.stocks.domain.Stock;
import org.springframework.amqp.rabbit.stocks.domain.TradeResponse;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

/**
* A typical poor mans UI to drive the application. 
*
* @author Mark Pollack
* @author Mark Fisher
*/
@SuppressWarnings("serial")
public class StockPanel extends JPanel {

  private static Log log = LogFactory.getLog(StockPanel.class);

  private JTextField tradeRequestTextField;
  private JButton tradeRequestButton;
  private JTextArea marketDataTextArea;
  private StockController stockController;

  private DecimalFormat frmt = new DecimalFormat("$0.00");

  public StockPanel(StockController controller) {
    this.stockController = controller;
    controller.setStockPanel(this);
    this.setBorder(BorderFactory.createTitledBorder("Stock Form"));
   
    FormLayout formLayout = new FormLayout("pref, 150dlu", // columns
        "pref, fill:100dlu:grow"); // rows
    setLayout(formLayout);
    CellConstraints c = new CellConstraints();

    tradeRequestButton = new JButton("Send Trade Request");
    add(tradeRequestButton, c.xy(1, 1));

    tradeRequestTextField = new JTextField("");
    add(tradeRequestTextField, c.xy(2, 1));

    add(new JLabel("Market Data"), c.xy(1, 2));

    marketDataTextArea = new JTextArea();
    JScrollPane sp = new JScrollPane(marketDataTextArea);
    sp.setSize(200, 300);

    add(sp, c.xy(2, 2));

    tradeRequestTextField.addFocusListener(new FocusListener() {
      public void focusLost(FocusEvent e) {
      }
      public void focusGained(FocusEvent e) {
        tradeRequestTextField.setText("");
        tradeRequestTextField.setForeground(Color.BLACK);
      }
    });

    tradeRequestButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        sendTradeRequest();
      }
    });
  }

  private void sendTradeRequest() {
    try {
      stockController.sendTradeRequest(tradeRequestTextField.getText());
      tradeRequestTextField.setForeground(Color.GRAY);
      tradeRequestTextField.setText("Request Pending...");
      log.info("Sent trade request.");
    }
    catch (Exception ex) {
      tradeRequestTextField.setForeground(Color.RED);
      tradeRequestTextField.setText("Required Format: 100 TCKR");
    }
  }

  public static void main(String[] a) {
    ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("client-bootstrap-config.xml");
    StockController controller = context.getBean(StockController.class);
    JFrame f = new JFrame("Rabbit Stock Demo");
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      //TODO consider @Configurable
      f.add(new StockPanel(controller));
      f.pack();
      f.setVisible(true);       
  }

  public void displayQuote(final Quote quote) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        Stock stock = quote.getStock();
        marketDataTextArea.append(stock.getTicker() + " " + quote.getPrice() + "\n");
      }
    });
  }

  public void update(final TradeResponse tradeResponse) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        tradeRequestTextField.setForeground(Color.GREEN);
        tradeRequestTextField.setText("Confirmed. "
            + tradeResponse.getTicker() + " "
            + frmt.format(tradeResponse.getPrice().doubleValue()));
      }
    });
  }

}
TOP

Related Classes of org.springframework.amqp.rabbit.stocks.ui.StockPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.