package agg.attribute.parser; import java.io.IOException; import java.io.File; import java.io.FileOutputStream; import java.io.FileNotFoundException; import java.util.Vector; import agg.attribute.AttrContext; //import agg.attribute.AttrMember; //import agg.attribute.AttrConditionMember; //import agg.attribute.AttrConditionTuple; //import agg.attribute.AttrManager; //import agg.attribute.AttrMapping; //import agg.attribute.AttrVariableMember; //import agg.attribute.AttrVariableTuple; //import agg.attribute.facade.InformationFacade; //import agg.attribute.handler.AttrHandler; //import agg.attribute.handler.HandlerExpr; //import agg.attribute.handler.impl.javaExpr.JexHandler; //import agg.attribute.impl.AttrTupleManager; //import agg.attribute.impl.ContextView; //import agg.attribute.impl.DeclMember; //import agg.attribute.impl.DeclTuple; import agg.attribute.impl.ValueMember; //import agg.attribute.impl.ValueTuple; import agg.attribute.impl.VarTuple; import agg.attribute.impl.VarMember; public class JavaClassCreation { private static String s1 = "public class "; private static String s2 = " {"; private static String s3 = "}"; private String name; private Vector<String> classPackages; private AttrContext attrContext; private ValueMember member; private String expr; public JavaClassCreation() { agg.attribute.facade.InformationFacade info = agg.attribute.facade.impl.DefaultInformationFacade .self(); agg.attribute.handler.AttrHandler javaHandler = info.getJavaHandler(); this.classPackages = ((agg.attribute.handler.impl.javaExpr.JexHandler) javaHandler) .getClassResolver().getPackages(); } public File createClass(String className, AttrContext attrCntxt, ValueMember vmember, String vexpr, boolean addMethodCall) { this.attrContext = attrCntxt; this.member = vmember; this.expr = vexpr; this.name = className; boolean fileExists = true; int i = 0; while (fileExists) { File f = new File(this.name); f.deleteOnExit(); if (f.exists()) { this.name = this.name + i; i++; } else fileExists = false; } final File file = new File(this.name + ".java"); System.out.println("Output file: " + file); String b = new String(); b = b + createImports() + "\n"; b = b + s1 + this.name + s2 + "\n"; b = b + createFields() + "\n"; if (!addMethodCall) b = b + createGetMethod() + "\n"; else b = b + createAddMethod() + "\n"; b = b + s3; System.out.println("\n" + b + "\n"); try { FileOutputStream fos = new FileOutputStream(file); // byte buffer[] = new byte[1024 * 64]; try { fos.write(b.getBytes()); fos.close(); } catch (IOException ex) { ex.printStackTrace(); } } catch (FileNotFoundException ex) { ex.printStackTrace(); } return file; } private String createImports() { String b = new String(); for (int i = 0; i < this.classPackages.size(); i++) { String p = this.classPackages.get(i); b = b + "import " + p + ".*;\n"; } return b; } private String createFields() { String b = ""; VarTuple vars = (VarTuple) this.attrContext.getVariables(); for (int i = 0; i < vars.getSize(); i++) { VarMember v = vars.getVarMemberAt(i); b = b + "private " + v.getDeclaration().getTypeName() + " " + v.getName() + ";\n"; } return b; } private String createGetMethod() { String b = new String(); String typeName = this.member.getDeclaration().getTypeName(); b = "public " + typeName + " get" + this.member.getName() + "(){ \n"; b = b + "return " + this.expr + ";\n"; b = b + "}\n"; return b; } // @SuppressWarnings("unchecked") private String createAddMethod() { String b = new String(); String typeName = "void"; b = "public " + typeName + " addItem" + "(){ \n"; b = b + this.expr + ";\n"; b = b + "}\n"; return b; } }