Stock Watcher : Ticker « J2ME « Java






Stock Watcher

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( ' ' );
   }
 }
}


           
       








Related examples in the same category

1.Shared TickerShared Ticker
2.Quotes MIDletQuotes MIDlet
3.TickerListTickerList