package com.e2u.file;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class TransformFileFrameWork
{
/**
* @param args
*/
public static void main(String[] args)
{
String inFileName = "mapping.xml";
MyFileContentListener listener = new MyFileContentListener();
FileTransformer transformer = new FileTransformer(inFileName, listener);
try
{
transformer.transform();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
class MyFileContentListener implements FileContentListener
{
private static String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
private PrintWriter pw = null;
private String curFileName = null;
public void actionPeformed(String line, int lineNum) throws Exception
{
if(!line.startsWith(" "))
{
if(line.startsWith("\t"))
{
System.out.println("[REPLACE TAB]:" + "(" + lineNum + ") file="
+ curFileName + line);
line.replaceFirst("\t", " ");
}
else
{
System.out.println("[INVALID START]:" + "(" + lineNum
+ ") file=" + curFileName + line);
return;
}
}
// process
if(line.trim().startsWith("<programEntity "))
{
String programName = getProgramName(line);
if(programName == null)
{
System.err.println("[ERROR]: Get programe name null from "
+ line + "(" + lineNum + ")");
return;
}
if(pw != null)
{
System.err.println("[ERROR]: pw is not null" + "(" + lineNum
+ ")");
throw new Exception("[ERROR]: pw is not null" + "(" + lineNum
+ ")");
}
curFileName = "mapping-" + programName + ".xml";
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(curFileName))), true);
pw.println(XML_HEADER);
pw.println(line.substring(2));
}
else if(line.trim().startsWith("</programEntity>"))
{
pw.println(line.substring(2));
pw.close();
pw = null;
curFileName = null;
}
else
{
if(pw == null)
{
System.out.println("[INFO]: pw = null, line=" + line + "(" + lineNum + ")");
return;
}
pw.println(line.substring(2));
}
}
private String getProgramName(String str)
{
String[] results = str.trim().split(" ");
for(int i = 0; i < results.length; i++)
{
if(results[i].startsWith("programName="))
{
String tmp = results[i].substring("programName=".length());
return tmp.substring(1, tmp.length() - 1);
}
}
return null;
}
}