package futils;

import java.io.BufferedReader;
import java.util.Vector;

interface LineProcessor {
    public void process(String l);
}

public class PolymorphicProcessor {
    LineProcessor lp = null;

    PolymorphicProcessor(LineProcessor _lp) {
        lp = _lp;
        process();
    }

    public void process() {
        BufferedReader br =
                ReaderUtil.getBufferedReader("select text file");
        String s = null;
        while ((s = ReaderUtil.readLine(br)) != null) {
            lp.process(s);
        }
        ReaderUtil.close(br);

    }
}
class TestPolymorphicProcessor {

    public static void main(String args[]) {
        new PolymorphicProcessor(
                new LineProcessor() {
                    public void process(String s) {
                        System.out.println(s);
                    }
                }
        );
    }
}

class Reader implements LineProcessor {
    Vector v = new Vector();
    PolymorphicProcessor pp = new
            PolymorphicProcessor(this);

    public String[] getLines() {
        String s[] = new String[v.size()];
        v.copyInto(s);

        return s;
    }

    public static void main(String args[]) {
        System.out.println(new Reader());
    }

    public void process(String s) {
        v.addElement(s);
    }

    public String toString() {
        String s[] = getLines();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < s.length; i++)
            sb.append(s[i] + '\n');
        return sb.toString();
    }
}