/*
 * refactoring example, further simplified
 * http://www.informit.com/articles/article.aspx?p=167891&seqNum=1
 * "What Is Refactoring?" by William C. Wake.
 *
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;

/** Replace %CODE% with requested id, and 
%ALTCODE% w/"dashed" version of id.*/

public class CodeReplacer {

  private final static int PREFIX_START = 0;
  private final static int PREFIX_LENGTH = 5;
  private final static int TOTAL_LENGTH = 8;

  protected String sourceTemplate;

  public CodeReplacer(Reader reader) throws IOException {
    sourceTemplate = readTemplate(reader);
  }

  protected String readTemplate(Reader reader) throws IOException {
    BufferedReader br = new BufferedReader(reader);
    StringBuilder sb = new StringBuilder();
    try {
      String line = br.readLine();
      while (line!=null) {
	sb.append(line);
	sb.append("\n");
	line = br.readLine();
      }
    } finally {
      try {
	if (br != null) {
	  br.close();
	}
      } 
      catch (IOException ioException) {
	ioException.printStackTrace();
      }
    }
    return sb.toString();
  }

  public void substitute(String reqId, PrintWriter out)
      throws IOException {
    String s1 = sourceTemplate.replace("%CODE%", reqId);
    String altId = reqId.substring(PREFIX_START,PREFIX_LENGTH) + "-" + 
	reqId.substring(PREFIX_LENGTH,TOTAL_LENGTH);
    String s2 = s1.replace("%ALTCODE%", altId);
    out.write(s2);
    out.flush();
  }
}
