001 /* 002 * LAPIS lightweight structured text processing system 003 * 004 * Copyright (C) 1998-2002 Carnegie Mellon University, 005 * Copyright (C) 2003 Massachusetts Institute of Technology. 006 * All rights reserved. 007 * 008 * This library is free software; you can redistribute it 009 * and/or modify it under the terms of the GNU General 010 * Public License as published by the Free Software 011 * Foundation, version 2. 012 * 013 * LAPIS homepage: http://graphics.lcs.mit.edu/lapis/ 014 */ 015 016 package lapisx.progress; 017 018 import java.io.*; 019 020 public class ProgressReader extends FilterReader { 021 int chunkSize; 022 int n; // number of characters read for current chunk 023 BasicProgressGenerator gen; 024 025 public ProgressReader (Reader in, int chunkSize, BasicProgressGenerator gen) { 026 super (in); 027 this.chunkSize = chunkSize; 028 this.gen = gen; 029 } 030 031 public int read () throws IOException { 032 int c = super.read (); 033 if (c != -1 && ++n == chunkSize) { 034 gen.fireAddProgress (n); 035 n = 0; 036 } 037 return c; 038 } 039 040 public int read (char[] buf, int off, int len) throws IOException { 041 int r = super.read (buf, off, len); 042 if (r != -1) { 043 n += r; 044 if (n >= chunkSize) { 045 gen.fireAddProgress (n); 046 n = 0; 047 } 048 } 049 return r; 050 } 051 }