Mega Code Archive

 
Categories / Java / J2ME
 

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