Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4543 dpurdie 1
//==============================================================================
2
//
3
//    ERG TRANSIT SYSTEMS      Licensed software
4
//    (C) 2006                 All rights reserved
5
//
6
//==============================================================================
7
//
8
// Description: Provides a BufferedReader with a readLine method that
9
//              blocks for only a specified number of seconds. If no
10
//              input is read in that time, a specified default
11
//              string is returned. Otherwise, the input read is returned.
12
//
13
//==============================================================================
14
 
15
package com.erggroup.jats;
16
 
17
import java.io.Reader;
18
import java.io.BufferedReader;
19
import java.io.IOException;
20
 
21
public class TimedBufferedReader extends BufferedReader
22
{
23
  private int    timeout    = 5 * 60; // 5 minute
24
  private String defaultStr = "";
25
 
26
  /**
27
   * TimedBufferedReader constructor.
28
   * @param in Reader
29
   */
30
  TimedBufferedReader(Reader in) 
31
  {
32
    super(in);
33
  }
34
 
35
  /**
36
   * TimedBufferedReader constructor.
37
   * @param in Reader
38
   * @param sz int Size of the input buffer.
39
   */
40
  TimedBufferedReader(Reader in, int sz) 
41
  {
42
    super(in, sz);
43
  }
44
 
45
  /**
46
   * Sets number of seconds to block for input.
47
   * @param seconds int
48
   */
49
  public void setTimeout(int timeout) 
50
  {
51
    this.timeout=timeout;
52
  }
53
 
54
  /**
55
   * Sets defaultStr to use if no input is read.
56
   * @param str String
57
   */
58
  public void setDefaultStr(String str) 
59
  {
60
    defaultStr = str;
61
  }
62
 
63
  /**
64
   * We use ms internally
65
   * @return String
66
   */
67
  public String readLine() throws IOException 
68
  {
69
    int waitms = timeout*1000;
70
    int ms     = 0;
71
    while (!this.ready()) 
72
    {
73
      try 
74
      { 
75
        Thread.currentThread().sleep(10);
76
        ms += 10;
77
      }
78
      catch (InterruptedException e) 
79
      { 
80
        break; 
81
      }
82
      if (ms >= waitms) 
83
      {
84
      	return defaultStr;
85
      }
86
    }
87
    return super.readLine();
88
  }
89
}