/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.ptc.tifworkbench.generator;
import com.ptc.tifworkbench.jaxbbinding.FieldReference;
import com.ptc.tifworkbench.jaxbbinding.TypeDefinition;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.CharBuffer;
/**
*
* @author pbowden
*/
public abstract class AbstractClassWriter implements JavaClassWriter
{
private String indentStr = " ";
private PrintStream ps;
private TypeDefinition tdef;
private String className;
private String packageName;
public AbstractClassWriter(String packageName, String className, TypeDefinition tdef, File dir) throws FileNotFoundException, IOException
{
File fjava = new File(dir, className + ".java");
fjava.createNewFile();
FileOutputStream fos = new FileOutputStream(fjava);
ps = new PrintStream(fos);
this.tdef=tdef;
this.className = className;
this.packageName = packageName;
}
@Override
public void writeClass() throws Exception
{
writeClassHeader(tdef, className, ps);
writeClassDeclaration(tdef, className, ps);
writeClassMembers(tdef, className, ps);
writeConstructor(tdef, className, ps);
for(FieldReference fref : tdef.getFields().getField())
{
writeFieldAccessors(fref, ps);
}
writeClassEnd(tdef, className, ps);
ps.close();
}
public String getIndentStr()
{
return indentStr;
}
public void setIndentStr(String indentStr)
{
this.indentStr = indentStr;
}
public String getPackageName()
{
return packageName;
}
abstract protected void writeClassHeader(TypeDefinition tdef, String className, PrintStream ps) throws IOException;
abstract protected void writeClassDeclaration(TypeDefinition tdef, String className, PrintStream ps) throws IOException;
abstract protected void writeClassMembers(TypeDefinition tdef, String className, PrintStream ps) throws IOException;
abstract protected void writeConstructor(TypeDefinition tdef, String className, PrintStream ps) throws IOException;
abstract protected void writeFieldAccessors(FieldReference fref, PrintStream ps) throws IOException;
protected void writeClassEnd(TypeDefinition tdef, String className, PrintStream ps) throws IOException
{
println(0, "}");
}
protected void println(String str)
{
ps.println(str);
}
protected void println(int indent, String str)
{
ps.println(getIndentStr(indent) + str);
}
protected String makeJavaName(String fname)
{
return fname.replaceAll("\\s", "");
}
protected String getIndentStr(int indent)
{
if(indent <= 0) return "";
StringBuilder sb = new StringBuilder();
for(int i=0; i<indent; i++)
sb.append(getIndentStr());
return sb.toString();
}
}