public SampleResult runTest( JavaSamplerContext javaSamplerContext )
  {
    WebLogReader reader = null;
    StaticTime st = new StaticTime();

    boolean loopCtl = true;
    int logLinesSuccessfullyProcessed = 0;
    int logLinesFailedProcessing = 0;
    long startTimeMills = 0;

    // TODO check command-line arguments
    // TODO usage syntax

    try
    {
      reader = new WebLogReader( javaSamplerContext );

      while (loopCtl)
      {
        WebLogLine line = null;
        WebLogRecord record = null;

        try {
          line = reader.readLine();
        } catch (WebLogLineException w) {
          continue;
        }

        if ( line != null)
        {
          try
          {
            record = new WebLogRecord(line, st, javaSamplerContext);

          } catch (WebLogRecordException w)
          {
            System.out.println("Unable to create record: " + w);
            logLinesFailedProcessing++;
          }

          if (record != null)
          {
            if (record.getStatus() == 200)
            {
              //TODO fire and forget with some amount of threads.
              record.retrieve(st, javaSamplerContext);
              logLinesSuccessfullyProcessed++;
            }
          }

        } else
        {
          loopCtl = false;
        }
      }

      return this.createSampleResult( startTimeMills, logLinesSuccessfullyProcessed, logLinesFailedProcessing, true );

    } catch (FileNotFoundException fnf)
    {
      System.out.println("Unable to find web log: " + fnf);
      return this.createSampleResult( startTimeMills, logLinesSuccessfullyProcessed, logLinesFailedProcessing, false );

    } catch (IOException ioe)
    {
      System.out.println("Unable to retrieve line: " + ioe);
      return this.createSampleResult( startTimeMills, logLinesSuccessfullyProcessed, logLinesFailedProcessing, false );

    }
  }