All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.xmlform.tool.XML2Java Maven / Gradle / Ivy

There is a newer version: 3.2.1
Show newest version
package net.sf.xmlform.tool;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.xml.sax.InputSource;

import net.sf.xmlform.XMLFormException;
import net.sf.xmlform.config.ConfigParseResult;
import net.sf.xmlform.config.ConfigurationFactory;
import net.sf.xmlform.config.FieldDefinition;
import net.sf.xmlform.config.FormDefinition;
import net.sf.xmlform.config.SubformDefinition;
import net.sf.xmlform.config.TypeDefinition;
import net.sf.xmlform.type.BaseTypes;
import net.sf.xmlform.type.IType;
import net.sf.xmlform.util.FormUtils;

/**
 * @author Liu Zhikun
 */
public class XML2Java {
	final static public String META_SUPERCLASS="xml2java.superclass";
	final static public String META_INTERFACES="xml2java.interfaces";
	final static public String META_COMMENT="xml2java.comment";
	final static public String META_ANNOTATION="xml2java.annotation";
	public static void main(String[] args) {
		if(args.length<2){
			System.err.println("usage: XML2Java source... destination");
			return;
		}
		XML2Java xj=new XML2Java(args);
		xj.run();
	}
	class Form{
		public Map getFields() {
			return fields;
		}
		public void setFields(Map fields) {
			this.fields = fields;
		}
		public Map getSubforms() {
			return subforms;
		}
		public void setSubforms(Map subforms) {
			this.subforms = subforms;
		}
		public String getClazz() {
			return clazz;
		}
		String clazz;
		Map fields=new HashMap();
		Map subforms=new HashMap();
		public Form(String clazz){
			this.clazz=clazz;
		}
	}
	String _dirs[];
	Map _types=null;
	Map _forms=null;
	Map _resultFomrs=null;
	final static String LIST_TYPE="java.util.List"; 
	private ConfigurationFactory configurationFactory=new ConfigurationFactory();
	public XML2Java(String args[]){
		_dirs=args;
		_dirs[_dirs.length-1]=_dirs[_dirs.length-1].replaceAll("\\\\","/");
		if(!_dirs[_dirs.length-1].endsWith("/")){
			_dirs[_dirs.length-1]+="/";
		}
	}
	public void run(){
		_types=new HashMap();
		_forms=new HashMap();
		_resultFomrs=new HashMap();
		for(int i=0;i<_dirs.length-1;i++)
			searchFiles(new File(_dirs[i]));
		createJavaFiles();
	}
	private void searchFiles(File dir){
		File files[]=dir.listFiles();
		for(int i=0;i0){
			packageName=fdef.getClazz().substring(0,fdef.getClazz().lastIndexOf("."));
			className=fdef.getClazz().substring(fdef.getClazz().lastIndexOf(".")+1);
			pathName=packageName.replaceAll("\\.","/")+"/";
		}else{
			className=fdef.getClazz();
		}
		String fileName=_dirs[_dirs.length-1]+fdef.getClazz().replaceAll("\\.","/")+".java";
		File dir=new File(_dirs[_dirs.length-1]+pathName);
		dir.mkdirs();
		File javaFile=new File(fileName);
		PrintWriter pw=new PrintWriter(javaFile);
		if(packageName.length()>0){
			pw.print("package ");
			pw.print(packageName);
			pw.println(";");
		}
		pw.println();
		pw.println("/**\n * This java file is generated by XMLForm.\n * http://javaxmlform.sourceforge.net/\n *\n */");
		pw.println();
		pw.print("public class ");
		pw.print(className);
		pw.println(" {");
		
		Iterator fit=fdef.getFields().keySet().iterator();
		while(fit.hasNext()){
			String name=(String)fit.next();
			printField(pw,name,getType((String)fdef.getFields().get(name)));
		}
		Iterator sit=fdef.getSubforms().keySet().iterator();
		while(sit.hasNext()){
			String name=(String)sit.next();
			printField(pw,name,"java.util.List");
		}
		pw.println();
		fit=fdef.getFields().keySet().iterator();
		while(fit.hasNext()){
			String name=(String)fit.next();
			printMethod(pw,name,getType((String)fdef.getFields().get(name)));
		}
		sit=fdef.getSubforms().keySet().iterator();
		while(sit.hasNext()){
			String name=(String)sit.next();
			printMethod(pw,name,"java.util.List");
		}
		pw.println("}");
		pw.close();
	}
	private void printField(PrintWriter pw,String name,String type){
		pw.print("\tprivate ");
		pw.print(type);
		pw.print(" ");
		pw.print(name);
		if(LIST_TYPE.equals(type)){
			pw.write("=new java.util.ArrayList()");
		}
		pw.println(";");
	}
	private void printMethod(PrintWriter pw,String name,String type){
		pw.print("\tpublic ");
		pw.print(type);
		pw.print(" get");
		pw.print(FormUtils.firstCharToUpperCase(name));
		pw.println("(){");
		pw.print("\t\treturn this.");
		pw.print(name);
		pw.println(";");
		pw.println("\t}");
		
		pw.print("\tpublic void set");
		pw.print(FormUtils.firstCharToUpperCase(name));
		pw.print("(");
		pw.print(type);
		pw.print(" ");
		pw.print(name);
		pw.println("){");
		pw.print("\t\tthis.");
		pw.print(name);
		pw.print("=");
		pw.print(name);
		pw.println(";");
		pw.println("\t}");
	}
	private String getType(String typeName){
		IType type=BaseTypes.getTypeByName(typeName);
		if(type!=null)
			return type.getJavaTypeName();
		TypeDefinition tdef=(TypeDefinition)_types.get(typeName);
		if(tdef==null)
			throw new XMLFormException(XMLFormException.SE_TYPE_UNKNOWN,typeName);
		return getType(tdef.getBase());
	}
}	




© 2015 - 2025 Weber Informatics LLC | Privacy Policy