package code;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
public class CodeXmlElem {
private static List<String> readFile(String filename)
{
List<String> fileline = new ArrayList<String>();
try {
FileReader in = new FileReader(filename);
LineNumberReader reader = new LineNumberReader(in);
String s = reader.readLine();
while( s != null )
{
if(!s.startsWith("#"))
{
fileline.add(s);
}
s = reader.readLine();
}
reader.close();
in.close();
}catch(Exception e)
{
e.printStackTrace();
}
return fileline;
}
public static void genarateCode(List<String> line)
{
String cr="\r\n";
try{
String [] data = line.get(1).split(",");
FileWriter fw = new FileWriter(data[1]+".java");
fw.write(cr);
data = line.get(0).split(",");
fw.write("package "+data[1]+cr);
fw.write(cr);
fw.write(cr);
fw.write("import javax.xml.bind.JAXBContext;"+cr);
fw.write("import javax.xml.bind.JAXBException;"+cr);
fw.write("import javax.xml.bind.Marshaller;"+cr);
fw.write("import javax.xml.bind.annotation.XmlAccessType;"+cr);
fw.write("import javax.xml.bind.annotation.XmlAccessorType;"+cr);
fw.write("import javax.xml.bind.annotation.XmlAttribute;"+cr);
fw.write(cr);
fw.write(cr);
fw.write("@XmlRootElement"+cr);
fw.write("@XmlAccessorType(XmlAccessType.FIELD)"+cr);
data = line.get(1).split(",");
fw.write("public class "+data[1]+" {"+cr);
fw.write(cr);
for(int i = 2;i < line.size();i++)
{
data = line.get(i).split(",");
if(data[1].trim().equalsIgnoreCase("int"))
{
fw.write("@XmlElement(name = \""+data[0]+"\")"+cr);
fw.write("private Integer "+toLowerCaseFirst(data[0])+";"+cr);
}
else if(data[1].trim().equalsIgnoreCase("string"))
{
fw.write("@XmlElement(name = \""+data[0]+"\")"+cr);
fw.write("private String "+toLowerCaseFirst(data[0])+";"+cr);
}
else
{
fw.write("@XmlElement(name = \""+data[0]+"\")"+cr);
fw.write("private "+ data[1]+" "+toLowerCaseFirst(data[0])+";"+cr);
}
}
fw.write(cr);
fw.write(cr);
for(int i = 2;i < line.size();i++)
{
data = line.get(i).split(",");
if(data[1].trim().equalsIgnoreCase("int"))
{
fw.write("public void set"+data[0]+"(Integer value)"+cr);
fw.write("{"+cr);
fw.write(" "+toLowerCaseFirst(data[0])+" = "+"value;"+cr);
fw.write("}"+cr);
fw.write("public Integer get"+data[0]+"()"+cr);
fw.write("{"+cr);
fw.write(" return "+toLowerCaseFirst(data[0])+";"+cr);
fw.write("}"+cr);
}
else if(data[1].trim().equalsIgnoreCase("string"))
{
fw.write("public void set"+data[0]+"(String value)"+cr);
fw.write("{"+cr);
fw.write(" "+toLowerCaseFirst(data[0])+" = "+"value;"+cr);
fw.write("}"+cr);
fw.write("public String get"+data[0]+"()"+cr);
fw.write("{"+cr);
fw.write(" return "+toLowerCaseFirst(data[0])+";"+cr);
fw.write("}"+cr);
}
else
{
fw.write("public void set"+data[0]+"("+data[1]+" value)"+cr);
fw.write("{"+cr);
fw.write(" "+toLowerCaseFirst(data[0])+" = "+"value;"+cr);
fw.write("}"+cr);
fw.write("public "+data[1]+" get"+data[0]+"()"+cr);
fw.write("{"+cr);
fw.write(" return "+toLowerCaseFirst(data[0])+";"+cr);
fw.write("}"+cr);
}
}
fw.write(cr+cr);
data = line.get(1).split(",");
fw.write("public static "+data[1].trim()+" ");
fw.write(" parse"+data[1].trim()+"XML(String xml)"+cr);
fw.write("{"+cr);
fw.write(" JAXBContext jaxbContext;"+cr);
fw.write(" try"+cr);
fw.write(" {"+cr);
fw.write(" jaxbContext = JAXBContext.newInstance("+data[1].trim()+".class);"+cr);
fw.write(" Unmarshaller u = jaxbContext.createUnmarshaller();"+cr);
fw.write(" return ("+data[1].trim()+")u.unmarshal(new StreamSource(new StringReader(xml)));"+cr);
fw.write(cr);
fw.write(" }"+cr);
fw.write(" catch(JAXBException e)"+cr);
fw.write(" {"+cr);
fw.write(" e.printStackTrace();"+cr);
fw.write(" return null;"+cr);
fw.write(" }"+cr);
fw.write("}"+cr);
fw.write(cr+cr);
fw.write("public String ");
fw.write(" create"+data[1].trim()+"XML(String xml)"+cr);
fw.write("{"+cr);
fw.write(" JAXBContext jaxbContext;"+cr);
fw.write(" try"+cr);
fw.write(" {"+cr);
fw.write(" jaxbContext = JAXBContext.newInstance("+data[1].trim()+".class);"+cr);
fw.write(" Unmarshaller u = jaxbContext.createUnmarshaller();"+cr);
fw.write(" marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);"+cr);
fw.write(" marshaller.setProperty(Marshaller.JAXB_ENCODING, \"UTF-8\");"+cr);
fw.write(" marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);//省略xml头信息"+cr);
fw.write(" String xmlHeard = \"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n\";"+cr);
fw.write(" StringWriter sw = new StringWriter();"+cr);
fw.write(" marshaller.marshal(this, sw);"+cr);
fw.write(" return xmlHeard + sw.toString();"+cr);
fw.write(cr);
fw.write(" }"+cr);
fw.write(" catch(JAXBException e)"+cr);
fw.write(" {"+cr);
fw.write(" e.printStackTrace();"+cr);
fw.write(" return null;"+cr);
fw.write(" }"+cr);
fw.write("}"+cr);
fw.write(cr+cr);
fw.write(cr+cr);
fw.write("} "+cr);
fw.close();
}catch(Exception e)
{
}
}
public static String toLowerCaseFirst(String str)
{
StringBuilder sb = new StringBuilder(str);
sb.setCharAt(0, Character.toLowerCase(sb.charAt(0)));
str = sb.toString();
return str;
}
public static void main(String args[])
{
List<String> fileline = readFile("field.txt");
genarateCode(fileline);
System.out.println("success!");
}
}