package cn.org.rapid_framework.generator.ext.tableconfig.builder; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.List; import org.xml.sax.SAXException; import cn.org.rapid_framework.generator.GeneratorConstants; import cn.org.rapid_framework.generator.GeneratorProperties; import cn.org.rapid_framework.generator.ext.tableconfig.model.TableConfig; import cn.org.rapid_framework.generator.ext.tableconfig.model.TableConfigSet; import cn.org.rapid_framework.generator.ext.tableconfig.model.TableConfig.ColumnConfig; import cn.org.rapid_framework.generator.ext.tableconfig.model.TableConfig.OperationConfig; import cn.org.rapid_framework.generator.ext.tableconfig.model.TableConfig.ParamConfig; import cn.org.rapid_framework.generator.ext.tableconfig.model.TableConfig.ResultMapConfig; import cn.org.rapid_framework.generator.ext.tableconfig.model.TableConfig.SqlConfig; import cn.org.rapid_framework.generator.util.BeanHelper; import cn.org.rapid_framework.generator.util.IOHelper; import cn.org.rapid_framework.generator.util.StringHelper; import cn.org.rapid_framework.generator.util.XMLHelper; import cn.org.rapid_framework.generator.util.XMLHelper.NodeData; public class TableConfigXmlBuilder { public TableConfigSet parseFromXML(String _package,File basedir) { String[] tableConfigFilesArray = basedir.list(); TableConfigSet tableConfigSet = new TableConfigXmlBuilder().parseFromXML(basedir,_package, Arrays.asList(tableConfigFilesArray)); return tableConfigSet; } public TableConfigSet parseFromXML(String _package,File basedir,String tableConfigFiles) { String[] tableConfigFilesArray = StringHelper.tokenizeToStringArray(tableConfigFiles, ", \t\n\r\f"); TableConfigSet tableConfigSet = new TableConfigXmlBuilder().parseFromXML(basedir,_package, Arrays.asList(tableConfigFilesArray)); return tableConfigSet; } public TableConfigSet parseFromXML(File basedir,String _package,List<String> tableConfigFiles) { TableConfigSet result = new TableConfigSet(); result.setPackage(_package); for(String filepath : tableConfigFiles ) { if(filepath.endsWith(".xml")) { File file = new File(basedir,filepath); result.addTableConfig(parseFromXML(file)); } } return result; } public TableConfig parseFromXML(File file) { InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(file)); return parseFromXML(in); }catch(Throwable e) { throw new RuntimeException("parse file:"+file.getAbsolutePath()+" occer error",e); }finally { IOHelper.close(in, null); } } public TableConfig parseFromXML(InputStream inputStream) throws SAXException, IOException { NodeData nodeData = new XMLHelper().parseXML(inputStream); TableConfig config = new TableConfig(); // table BeanHelper.copyProperties(config, nodeData.attributes,true); for(NodeData child : nodeData.childs) { // table/operation if("operation".equals(child.nodeName)) { OperationConfig target = new OperationConfig(); BeanHelper.copyProperties(target, child.attributes,true); for(NodeData opChild : child.childs) { // table/operation/extraparams if("extraparams".equals(opChild.nodeName)) { // table/operation/extraparams/param for(NodeData paramNode : opChild.childs) { ParamConfig mp = new ParamConfig(); BeanHelper.copyProperties(mp, paramNode.attributes,true); target.extraparams.add(mp); } }else { BeanHelper.setProperty(target, opChild.nodeName, getNodeValue(opChild)); } } config.operations.add(target); } // table/column if("column".equals(child.nodeName)) { ColumnConfig target = new ColumnConfig(); BeanHelper.copyProperties(target, child.attributes,true); config.columns.add(target); } // table/sql if("sql".equals(child.nodeName)) { SqlConfig target = new SqlConfig(); BeanHelper.copyProperties(target, child.attributes,true); target.setSql(getNodeValue(child)); config.addSqlConfig(target); } // table/resultmap if("resultmap".equals(child.nodeName)) { ResultMapConfig target = new ResultMapConfig(); BeanHelper.copyProperties(target, child.attributes,true); // table/resultmap/column for(NodeData c : child.childs) { if("column".equals(c.nodeName)) { ColumnConfig column = new ColumnConfig(); BeanHelper.copyProperties(column, c.attributes,true); target.getColumns().add(column); } } config.resultMaps.add(target); } } return config; } public String getNodeValue(NodeData v) { if(GeneratorProperties.getBoolean(GeneratorConstants.USE_INNER_XML_FOR_XML_PARSING)) { return v.innerXML; }else { return v.nodeValue; } } }