Stock Watcher
/* License * * Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistribution of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistribution in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Sun Microsystems, Inc. or the names of contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or intended * for use in the design, construction, operation or maintenance of any * nuclear facility. */ import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.util.*; public class StockWatcher extends MIDlet { Display display; Ticker ticker = new Ticker( "" ); Command exitCommand = new Command( "Exit", Command.EXIT, 1 ); Timer timer = new Timer(); StockChecker checker = new StockChecker(); TickerForm form = new TickerForm(); Alert alert = new Alert( "Stock Alert!" ); public StockWatcher() { display = Display.getDisplay( this ); alert.setTimeout( Alert.FOREVER ); } protected void destroyApp( boolean unconditional ) { } protected void startApp() { display.setCurrent( form ); timer.schedule( checker, 0, 30000 ); } protected void pauseApp() { } public void exit(){ timer.cancel(); destroyApp( true ); notifyDestroyed(); } // Display a simple form to hold the ticker class TickerForm extends Form implements CommandListener { public TickerForm(){ super( "Stock Watch" ); setTicker( ticker ); addCommand( exitCommand ); setCommandListener( this ); } public void commandAction( Command c, Displayable d ){ exit(); } } // Check the stock values and put up an alert if // they're beyond certain limits.... class StockChecker extends TimerTask { Random generator = new Random(); int sybsValue = 20000; int sunwValue = 30000; int ibmValue = 40000; StringBuffer buf = new StringBuffer(); public void run(){ String values = getStockValues(); ticker.setString( values ); if( sybsValue < 18000 || sybsValue > 22000 || sunwValue < 28000 || sunwValue > 32000 || ibmValue < 38000 || ibmValue > 42000 ){ alert.setString( values ); } if( !alert.isShown() ){ display.setCurrent( alert, form ); } } private String getStockValues(){ sybsValue = randomStockValue( sybsValue ); sunwValue = randomStockValue( sunwValue ); ibmValue = randomStockValue( ibmValue ); buf.setLength( 0 ); appendValue( "SYBS", sybsValue ); appendValue( "SUNW", sunwValue ); appendValue( "IBM", ibmValue ); return buf.toString(); } // Generate a random stock value... in the // real world you'd use HTTP to obtain the // stock value from a broker's website. private int randomStockValue( int oldVal ){ int incr1 = ( generator.nextInt() % 2 ); int incr2 = ( generator.nextInt() % 16 ); if( incr1 < 1 ){ oldVal -= incr1 * 1000; } else { oldVal += ( incr1 - 2 ) * 1000; } if( incr2 < 8 ){ oldVal -= incr2 * 250; } else { oldVal += incr2 * 250; } return oldVal; } private void appendValue( String stock, int val ){ buf.append( stock ); buf.append( ' ' ); buf.append( Integer.toString( val / 1000 ) ); buf.append( '.' ); buf.append( Integer.toString( val % 1000 ) ); buf.append( ' ' ); } } }
1. | Shared Ticker | ||
2. | Quotes MIDlet | ||
3. | TickerList |