package innovimax.mixthem;

import innovimax.mixthem.interfaces.IInputLine;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
* <p>Reads lines from a character-input file.</p>
* <p>This is the default implementation of IInputLine.</p>
* @see IInputLine
* @author Innovimax
* @version 1.0
*/
public class DefaultLineReader implements IInputLine {

	private final BufferedReader reader;
	private boolean jump;

	/**
 	* Creates a line reader.
 	* @param file The input file to be read
 	* @param first True is this reader is the first one
 	* @throws IOException - If an I/O error occurs
 	*/
	public DefaultLineReader(File input, boolean first) throws IOException {
		this.reader = new BufferedReader(new FileReader(input));		
		this.jump = !first;
	}

	@Override
	public boolean hasLine() throws IOException {
		// should return True only if there is a line to write regarding the type
		return this.reader.ready();
	}

	@Override
	public String nextLine(ReadType type, boolean force) throws IOException {
		String line = null;
		switch (type) {
			case _SIMPLE:
				if (this.jump && !force) {
					this.reader.readLine();						
				}
				line = this.reader.readLine();
				this.jump = true;
				break;
			case _RANDOM:
				//TODO
				break;
		}
		return line;
	}

	@Override
	public void close() throws IOException {
		this.reader.close();
	}

}

@@ -176,16 +176,41 @@
 ception;
+%0Aimport java.util.Random;
 %0A%0A/**%0A* 
@@ -447,29 +447,144 @@
 nal 
-BufferedReader reader
+static int DEFAULT_RANDOM_SEED = 1789;%0A%0A%09private final BufferedReader reader;%0A%09private final boolean first;%0A%09private final Random random
 ;%0A%09p
@@ -919,18 +919,87 @@
 input));
+%0A
 %09%09
+this.first = first;%0A%09%09this.random = new Random(DEFAULT_RANDOM_SEED);
 %0A%09%09this.
@@ -1391,14 +1391,8 @@
 e();
-%09%09%09%09%09%09
 %0A%09%09%09
@@ -1487,14 +1487,305 @@
 %09%09%09%09
-//TODO
+if (this.first) %7B%0A%09%09%09%09%09if (random.nextBoolean() %7C%7C force) %7B%0A%09%09%09%09%09%09line = this.reader.readLine();%0A%09%09%09%09%09%7D else %7B%0A%09%09%09%09%09%09this.reader.readLine();%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D else %7B%0A%09%09%09%09%09if (!random.nextBoolean() %7C%7C force) %7B%0A%09%09%09%09%09%09line = this.reader.readLine();%0A%09%09%09%09%09%7D else %7B%0A%09%09%09%09%09%09this.reader.readLine();%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D
 %0A%09%09%09

Update DefaultLineReader.java