code: @Override
  	public void getNext(CAS cas) throws IOException, CollectionException {
  		if(mCurrentIndex == 0) {
  			logger.info("Reading collection {} ({} documents)", inputDirPath, mFiles.size());
  			progressLoggerTimer.schedule(new TimerTask() {
  				private long lastSize = 0;
  				private long lastTop = System.currentTimeMillis();
  				
  				@Override
  				public void run() {
  					long top = System.currentTimeMillis();
  					long size = currentFileByteSize;
  					AbstractTermSuiteCollectionReader.logger.info("{}% - {} processed out of {} ({} Mb/s) - Processing file {} (doc. {} out of {})", 
  							String.format("%.2f", ((float)currentFileByteSize*100)/totalFileByteSize),
  							fr.univnantes.termsuite.utils.FileUtils.humanReadableByteCount(currentFileByteSize, true),
  							fr.univnantes.termsuite.utils.FileUtils.humanReadableByteCount(totalFileByteSize, true),
  							String.format("%.2f", 0.001*((float)size-lastSize)/((float)Math.max(1, top-lastTop))),
  							mFiles.get(mCurrentIndex).getName(),
  							mCurrentIndex,
  							mFiles.size()
  							);
  					lastSize = size;
  					lastTop = top;
  				}
  			}, 5000l, 5000l);
  		}
  		File file = mFiles.get(mCurrentIndex++);
  		this.currentFileByteSize += file.length();
  		
  		logger.debug("Reading file ("+this.mCurrentIndex+"/"+this.mFiles.size()+") " + file.getAbsolutePath());
  		fillCas(cas, file);
  		if(!hasNext())
  			this.lastFileRead();
  	}
docs: protected abstract TermSuiteCollection getCollectionType();