/* * Copyright 2010 Red Hat, Inc. and/or its affiliates. * * 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.drools.examples.broker.ui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.util.Collection; import java.util.HashMap; import java.util.Map; import javax.swing.JFrame; import javax.swing.JPanel; import org.drools.examples.broker.model.Company; import org.drools.examples.broker.model.StockTick; /** * Main window implementation for the Broker example */ public class BrokerWindow { private final JFrame frame; private final Map<String, CompanyPanel> companies; private final LogPanel logPanel; private final ScrollingBanner banner; public BrokerWindow(final Collection<Company> companies, boolean exitOnClose) { this.logPanel = new LogPanel(); this.banner = new ScrollingBanner(); this.companies = new HashMap<String, CompanyPanel>(); this.frame = buildFrame( companies, exitOnClose ); } private JFrame buildFrame(final Collection<Company> companies, boolean exitOnClose) { JPanel contentPanel = new JPanel(new BorderLayout()); JPanel companyListPanel = new JPanel(new GridLayout(0, 2)); for ( Company company : companies ) { CompanyPanel panel = new CompanyPanel( company ); this.companies.put( company.getSymbol(), panel ); companyListPanel.add(panel); } contentPanel.add( companyListPanel, BorderLayout.WEST ); contentPanel.add( logPanel, BorderLayout.CENTER ); contentPanel.add( banner, BorderLayout.SOUTH ); JFrame frame = new JFrame(); frame.setContentPane(contentPanel); frame.setDefaultCloseOperation(exitOnClose ? JFrame.EXIT_ON_CLOSE : JFrame.DISPOSE_ON_CLOSE); frame.setTitle( "Drools Fusion Example: Simple Broker" ); frame.setResizable( true ); frame.pack(); frame.setLocationRelativeTo(null); // Center in screen Thread bannerThread = new Thread( banner ); bannerThread.setPriority( bannerThread.getPriority()-1 ); bannerThread.start(); return frame; } public void show() { this.frame.setVisible( true ); } public void updateCompany( String symbol ) { this.companies.get( symbol ).updateCompany(); } public void log( String message ) { this.logPanel.log( message ); } public void updateTick(StockTick tick) { this.banner.addTick( tick ); } }