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

  1. ///////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // GetWData.java    :    base-class for weather-data reader classes
  4. //
  5. //    Author:      F. Salazar
  6. //    Created:     June, 1997
  7. //    
  8. //    Copyright (c)1992-1997 Lotus Development Corp. All Rights Reserved.
  9. //
  10. ///////////////////////////////////////////////////////////////////////////////////
  11. /*******************************************************************************
  12.     Change History:
  13.  
  14.     $Log:   //reebok/xyzL/JavaComp/webpack/samples/weatherchart/GetWData.java  
  15.   
  16.      Rev 1.7.1.1   09 Jan 1998 10:52:06   jdonohue
  17.   Change package name to samples.weatherchart
  18.   
  19.      Rev 1.7   11 Dec 1997 15:19:14   jdonohue
  20.   Don't limit temperature values (for winter)
  21.   
  22.      Rev 1.6   13 Oct 1997 11:19:24   fsalazar
  23.   Correct precision on floating pt values.
  24.   
  25.      Rev 1.5   03 Oct 1997 11:19:26   fsalazar
  26.   Correct for no-proxy read.
  27.   
  28.      Rev 1.4   19 Aug 1997 06:54:38   fsalazar
  29.   Correcthumidity-clip code.
  30.   
  31.      Rev 1.3   18 Aug 1997 09:22:10   fsalazar
  32.   Clip retrieved weather values to appropriate ranges.
  33.   
  34.      Rev 1.2   05 Aug 1997 12:06:30   fsalazar
  35.   Correct deprecated readline().
  36.   
  37.      Rev 1.1   05 Aug 1997 10:15:40   fsalazar
  38.   Use webpack.samples.weatherchart package name.
  39.  
  40. *******************************************************************************/
  41.  
  42.  
  43. package samples.weatherchart;
  44.  
  45. import java.io.*;
  46. import java.net.*;
  47. import java.util.StringTokenizer;
  48.  
  49.  
  50. ///////////////////////////////////////////////////////////////////////////////////
  51.  
  52. public abstract class GetWData
  53. {
  54.     static final String    TEXT_TEMP     = new String( "Temperature" );
  55.     static final String    TEXT_PRESSURE = new String( "Pressure" );
  56.     static final String    TEXT_HUMID    = new String( "Humidity" );
  57.  
  58.     private Integer        m_Temperature;
  59.     private Float        m_Humidity;
  60.     private Float        m_Pressure;
  61.  
  62.  
  63.     GetWData()
  64.     {
  65.         m_Temperature = new Integer( 0 );
  66.         m_Humidity    = new Float( 0.0 );
  67.         m_Pressure    = new Float( 0.0 );
  68.     }
  69.  
  70.     protected void setTemperature( int iTemp )
  71.     {
  72.         m_Temperature = new Integer( iTemp );
  73.     }
  74.  
  75.     protected void setHumidity( double fHumid )
  76.     {
  77.         m_Humidity = new Float( fHumid );
  78.     }
  79.  
  80.     protected void setPressure( double fPressure )
  81.     {
  82.         m_Pressure = new Float( fPressure );
  83.     }
  84.  
  85.     protected int getTemperature()
  86.     {
  87.         return m_Temperature.intValue();
  88.     }
  89.  
  90.     protected double getHumidity()
  91.     {
  92.         return m_Humidity.doubleValue();
  93.     }
  94.  
  95.     protected double getPressure()
  96.     {
  97.         return m_Pressure.doubleValue();
  98.     }
  99.  
  100.  
  101.     protected String getTemperatureString()
  102.     {
  103.         return m_Temperature.toString();
  104.     }
  105.  
  106.     protected String getHumidityString()
  107.     {
  108.         return m_Humidity.toString();
  109.     }
  110.  
  111.     protected String getPressureString()
  112.     {
  113.         return m_Pressure.toString();
  114.     }
  115.  
  116.     public abstract void read() throws IOException, MalformedURLException ;
  117.  
  118.  
  119.     // trim a string so it contains only an integer value
  120.     private String trimInt( String s )
  121.     {
  122.         int        i, max, start, end;
  123.         char    c;
  124.  
  125.         try
  126.         {
  127.             start = 0;
  128.             max = s.length();
  129.  
  130.             // scan to 1st number char
  131.             for ( i = 0; i < max; i++ )
  132.             {
  133.                 c = s.charAt( i );
  134.                 if ( Character.isDigit( c ) )
  135.                     break;
  136.                 start++;
  137.             }
  138.  
  139.             // scan to non-digit
  140.             for ( i = start, end = start; i < max; i++ )
  141.             {
  142.                 c = s.charAt( i );
  143.                 if ( !Character.isDigit( c ) )
  144.                     break;
  145.                 end++;
  146.             }
  147.  
  148.             return s.substring( start, end );
  149.         }
  150.         catch( Exception e )
  151.         {
  152.             return s;
  153.         }
  154.     }  // trimInt
  155.  
  156.     // trim a string so it contains only a floating pt. value.
  157.     private String trimFloat( String s )
  158.     {
  159.         int        i, max, start, end;
  160.         char    c;
  161.  
  162.         try
  163.         {
  164.             start = 0;
  165.             max = s.length();
  166.  
  167.             // scan to 1st number char
  168.             for ( i = 0; i < max; i++ )
  169.             {
  170.                 c = s.charAt( i );
  171.                 if ( Character.isDigit( c ) )
  172.                     break;
  173.                 start++;
  174.             }
  175.  
  176.             // scan to non-digit, non-decimal
  177.             for ( i = start, end = start; i < max; i++ )
  178.             {
  179.                 c = s.charAt( i );
  180.                 if ( !Character.isDigit( c ) && c != '.' )
  181.                     break;
  182.                 end++;
  183.             }
  184.  
  185.             return s.substring( start, end );
  186.         }
  187.         catch( Exception e )
  188.         {
  189.             return s;
  190.         }
  191.     }  // trimFloat
  192.  
  193.  
  194.     /////////////////////////////////////////////////////////////////////////
  195.     //
  196.     // parse weather data from stream.  We do this as follows:
  197.     //
  198.     //    -    skip HTTP header lines
  199.     //    -    read weather data file, in the format:
  200.     //
  201.     //    line #        data
  202.     //    ------        -----------------------------------------------
  203.     //    0            Text description
  204.     //    1            temp;humidity;wind;weather;barometric pressure
  205.     //
  206.     // Example file:
  207.     //
  208.     //        : Observations for  8am(12z) 14-jul-97
  209.     //        : 79;61;w 13;9;fair;29.82
  210.  
  211.     protected boolean parseStream( BufferedInputStream in, boolean bSkipHdr )
  212.     {
  213.         String                s, v, hdr = new String();
  214.         StringTokenizer        tokenizer;
  215.         DataInputStream        di  = new DataInputStream( in );
  216.         BufferedReader        bdi = new BufferedReader( new InputStreamReader( di ) );
  217.  
  218.  
  219.         try
  220.         {
  221.             // Skip HTML header.  The first blank line
  222.             // marks end of the header.
  223.             while ( (bSkipHdr) && (true) )
  224.             {
  225.                 s = bdi.readLine();
  226.                 if ( null == s )
  227.                     return false;        // got to EOF before end of header
  228.                 
  229.                 if ( 0 == s.length() )
  230.                     break;
  231.  
  232.                 hdr = hdr + "\n" + s;    // debug - save header
  233.             }
  234.  
  235.             // read weather data
  236.             // skip 1st line
  237.             s = bdi.readLine();
  238.             if ( null == s )
  239.                 return false;        // EOF; we were expecting data
  240.  
  241.             // read the data line
  242.             s = bdi.readLine();
  243.             if ( null == s )
  244.                 return false;        // EOF; we were expecting data
  245.  
  246.             // read the items from the data line
  247.             tokenizer = new StringTokenizer( s, ";\n\r" );
  248.  
  249.             // temperature
  250.             v = tokenizer.nextToken();
  251.             v = trimInt( v );
  252.             m_Temperature = new Integer( v );
  253.  
  254.             // clip returned value to a reasonable range...
  255.             // JMD: This won't work in the winter
  256.             // if ( m_Temperature.intValue() < 40 )    m_Temperature = new Integer( 40 );
  257.             // if ( m_Temperature.intValue() > 100 )    m_Temperature = new Integer( 100 );
  258.  
  259.             // humidity
  260.             v = tokenizer.nextToken();
  261.             s = trimFloat( s );
  262.             m_Humidity = new Float( v );
  263.  
  264.             // clip returned value to a reasonable range...
  265.             if ( m_Humidity.floatValue() < 0.0 )    m_Humidity = new Float( 0.0 );
  266.             if ( m_Humidity.floatValue() > 100.0 )    m_Humidity = new Float( 100.0 );
  267.  
  268.  
  269.             // skip 3 tokens; wind, weather, visibility
  270.             v = tokenizer.nextToken();
  271.             v = tokenizer.nextToken();
  272.             v = tokenizer.nextToken();
  273.  
  274.             // pressure
  275.             v = tokenizer.nextToken();
  276.             v = trimFloat( v );
  277.             m_Pressure = new Float( v );
  278.  
  279.             // clip returned value to a reasonable range...
  280.             if ( m_Pressure.floatValue() < 29.0 )    m_Pressure = new Float( 29.0 );
  281.             if ( m_Pressure.floatValue() > 31.5 )    m_Pressure = new Float( 31.5 );
  282.         }
  283.         catch( Exception e )
  284.         {
  285.             System.out.print( "Exception in parseStream() : " + e.getMessage() + "\r\n");
  286.             return false;
  287.         }
  288.  
  289.         // success
  290.         return true;
  291.     }  // parseStream
  292.  
  293.  
  294.  
  295. }
  296.  
  297.  
  298.  
  299. // end of GetWData.java
  300. /////////////////////////
  301.