home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / lotus / eSuite.exe / eSuiteDPP / samples / weatherchart / CopyWeather.java < prev    next >
Text File  |  1998-01-09  |  8KB  |  252 lines

  1. /* 
  2.    -----------------------------------------------------------------------------------------------------
  3.     Description: CopyWeather
  4.     Author:      JDonohue
  5.     Created:     June, 1997
  6.     
  7.     Copyright (c)1992-1997 Lotus Development Corp. All Rights Reserved.
  8.    -----------------------------------------------------------------------------------------------------
  9. */
  10. /*******************************************************************************
  11.     Change History:
  12.  
  13.     $Log:   //reebok/xyzL/JavaComp/webpack/samples/weatherchart/CopyWeather.java  $
  14.   
  15.      Rev 1.0.1.1   09 Jan 1998 10:52:02   jdonohue
  16.   Change package name to samples.weatherchart
  17.   
  18.      Rev 1.0   05 Jan 1998 12:55:08   jdonohue
  19.   Initial Revision
  20.  
  21. *******************************************************************************/
  22.  
  23. package samples.weatherchart;
  24.  
  25. import java.io.*;
  26. import java.net.*;
  27. import java.util.*;
  28. import java.text.*;
  29. import java.lang.Exception;
  30.  
  31.  
  32.  
  33. /* ------------------------------------------------------------------------------------------------------
  34.  
  35. CopyWeather is a supporting application for the Lotus Kona Webpack Samples.
  36. Its purpose is to update dataset files which record weather information -- temperature,
  37. pressure and humidity -- for various cities.  CopyWeather should be scheduled to run once
  38. an hour; 
  39.  
  40. Syntax for invoking CopyWeather is as follows:
  41.  
  42. (jvm) CopyWeather config [proxy:port] [/tzone]
  43. (jvm)            Java virtual machine which loads the application; either java or jview.
  44. CopyWeather        Name of class.
  45. config            Name of configuration file (see below).
  46. [proxy:port]    Optional.  If specified, CopyWeather will issue HTTP requests through a proxy server.
  47. [/t]            Optional.  Specifies a timezone code, eg EST.  If not specified, default will be used.
  48.  
  49. Example command-lines:
  50.  
  51.   jview CopyWeather copyweather.dat
  52.   jview CopyWeather copyweather.dat proxysrv.com:8080 /tEST
  53.  
  54. ------------------------------------------------------------------------------------------------------- */
  55.  
  56. /////////////////////////////////////////////////////////////////////////////////////////////////////
  57.  
  58. class CopyWeather
  59. {
  60.     private static String    m_sConfigFile = null;
  61.     private static boolean    m_bUseProxy = false;
  62.     private static String    m_sProxy = null;
  63.     private static int        m_iPort = 0;
  64.     private static String    m_sTimeZone;
  65.     private static String    m_sURL = null;
  66.     private static BufferedInputStream    m_bistr = null;
  67.     private static DataOutputStream        m_dostr = null;
  68.  
  69.  
  70.     /////////////////////////////////////////////////////////////////////////////////////////////////////
  71.  
  72.     private static void close() throws IOException
  73.     {
  74.         if (m_bistr != null) m_bistr.close();
  75.         if (m_dostr != null) m_dostr.close();
  76.         m_bistr = null;
  77.         m_dostr = null;
  78.     }
  79.  
  80.     private static boolean parseArgs( String args[] )
  81.     {
  82.         String        portstr, arg;
  83.         int            i, idx;
  84.         char        c;
  85.  
  86.         // get config file
  87.         try
  88.         {
  89.             m_sConfigFile = args[0];
  90.         }
  91.         catch( IndexOutOfBoundsException e )
  92.         {
  93.             System.out.print( "Syntax error: No configuration file specified.\r\n" +
  94.                                 " Usage: CopyWeather (config. file) [proxy:port]\r\n");
  95.             return false;
  96.         }
  97.         // go through optional args
  98.         try
  99.         {
  100.             i = 1;
  101.             while ( true )
  102.             {
  103.                 arg = args[i++];
  104.                 try
  105.                 {
  106.                     if ( arg.charAt( 0 ) == '/' )
  107.                     {
  108.                         c = arg.charAt( 1 );
  109.                         c = Character.toUpperCase(c);
  110.                         switch( c )
  111.                         {
  112.                             case 'T':
  113.                                 m_sTimeZone = arg.substring( 2, arg.length() );
  114.                                 break;
  115.                             default:
  116.                                 break;
  117.                         }
  118.                     }
  119.                     else
  120.                     {
  121.                         // get optional proxy/port
  122.                         idx = arg.lastIndexOf( ':' );
  123.                         if ( idx < 1 )
  124.                         {
  125.                             System.out.print( "Syntax error: Invalid proxy:port expression.\r\n" +
  126.                                                 " Usage: CopyWeather (config. file) [proxy:port]\r\n");
  127.                             return false;
  128.                         }
  129.                         m_sProxy = arg.substring( 0, idx );
  130.                         portstr  = arg.substring( idx+1, arg.length() );
  131.                         m_iPort = Integer.parseInt( portstr );
  132.                         m_bUseProxy = true;
  133.                     }
  134.                 }  // try
  135.                 catch( StringIndexOutOfBoundsException e )
  136.                 {
  137.                 }
  138.             } // while
  139.         }  // try
  140.         catch( IndexOutOfBoundsException e )
  141.         {
  142.             // all done going through args array
  143.         }
  144.         catch( NumberFormatException e )
  145.         {
  146.             System.out.print( "Syntax error: Invalid proxy:port expression.\r\n" +
  147.                                 " Usage: CopyWeather (config. file) [proxy:port]\r\n");
  148.             return false;
  149.         }
  150.         return true;
  151.     }  // parseArgs
  152.  
  153.     
  154. /**
  155.  * Opens the weather data at URL 'sURL' and reads the data into input stream
  156.  * buffer 'm_bistr'
  157.  */
  158.     private static void OpenWDataDirect( String sURL ) 
  159.         throws IOException, MalformedURLException 
  160.     {
  161.         m_sURL = new String( sURL );
  162.         URL                        url;
  163.         URLConnection            uconn;
  164.         url   = new URL( m_sURL );
  165.         uconn = url.openConnection();
  166.         uconn.setDoOutput( true );
  167.         uconn.setDoInput(true);
  168.         uconn.connect();
  169.         m_bistr = new BufferedInputStream( uconn.getInputStream() );
  170.     }
  171.  
  172. /**
  173.  * Opens the weather data at URL 'sURL' through proxy 'sProxy' at port 'port'
  174.  * and reads the data into input stream buffer 'm_bistr'
  175.  */
  176.     private static void OpenWDataProxy( String sURL, String sProxy, int port )
  177.         throws IOException, MalformedURLException 
  178.     {
  179.         m_sURL   = new String( sURL );
  180.         m_sProxy = new String( sProxy );
  181.         m_iPort  = port;
  182.         String    request = new String( "GET " + m_sURL + " HTTP/1.0\r\n\r\n" );
  183.         Socket    sock = new Socket( m_sProxy, m_iPort );
  184.         m_bistr = new BufferedInputStream( sock.getInputStream() );
  185.         m_dostr = new DataOutputStream( sock.getOutputStream() );
  186.         m_dostr.writeBytes( request );
  187.     }
  188.  
  189.     public static void main(String args[])
  190.     {
  191.         int BUFSIZE = 10000;
  192.  
  193.         // parse arguments
  194.         if ( !parseArgs( args ) )
  195.             return;
  196.  
  197.         // The config. file has lines containing URLs corresponding to the cities
  198.         // For each line read, update the specified dataset file based on the URL
  199.         int        iSetsUpdated = 0;
  200.         String    dataline, setfile, seturl;
  201.  
  202.         try
  203.         {
  204.             FileInputStream fin = new FileInputStream(m_sConfigFile);
  205.             DataInputStream din = new DataInputStream( fin );
  206.             BufferedReader bdin = new BufferedReader(new InputStreamReader(din));
  207.             byte[] b = new byte[BUFSIZE];
  208.             while ( true )
  209.             {
  210.                 dataline = bdin.readLine();
  211.                 if ( null == dataline )
  212.                     break;
  213.                 // File name is curcond+city acronym, e.g., "curcond.lga"
  214.                 setfile = dataline.substring(0, dataline.lastIndexOf("/") );
  215.                 int ib = setfile.lastIndexOf("/")+1;
  216.                 setfile = "currcond." + setfile.substring(ib);
  217.                 seturl  = dataline;
  218.                 setfile = setfile.trim();
  219.                 seturl  = seturl.trim();
  220.                 // Opens the URL, reads data into member 'm_bistr'
  221.                 if ( m_bUseProxy )
  222.                     OpenWDataProxy( seturl, m_sProxy, m_iPort );
  223.                 else
  224.                     OpenWDataDirect( seturl );
  225.  
  226.                 // Read the stream contents and write to the output stream
  227.                 FileOutputStream fo = new FileOutputStream(setfile);
  228.                 int i;
  229.                 while ( (i = m_bistr.read(b, 0, BUFSIZE)) != -1)
  230.                 {
  231.                     if (i == BUFSIZE)
  232.                         throw  new IOException("Buffer size exceeded");
  233.                     fo.write(b, 0, i); 
  234.                 }
  235.                 fo.close(); 
  236.                 // Close the member streams, if opened
  237.                 close();
  238.                 iSetsUpdated++;
  239.             }  // while
  240.             System.out.print( "\r\nComplete.\r\n" );
  241.             System.out.print( iSetsUpdated + " date-set file(s) updated.\r\n\r\n" );
  242.         }  // try
  243.         catch( IOException e )
  244.         {
  245.             System.out.print( "ERROR: " + e.getMessage() + "]\r\n" );
  246.         }
  247.     }  // main
  248. }  // CopyWeather
  249.  
  250. // end of CopyWeather.java
  251. //////////////////////////////
  252.