queryadmin.java

来自「这是一个轻便的j2ee的web应用框架,是一个在多个项目中运用的实际框架,采用s」· Java 代码 · 共 288 行

JAVA
288
字号
/*
 * Created on 2004-4-1
 *
 */
package com.esimple.service.query;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.SAXException;

import java.io.IOException;
import java.util.*;
import com.esimple.framework.util.DataTypeConverter;
import com.esimple.framework.configuration.*;
import com.esimple.service.query.config.*;
import com.esimple.framework.util.StringUtils;
/**
 * @author steven
 *
 */
public class QueryAdmin {
	private HashMap groups = new HashMap();
	private HashMap queryConfigs = new HashMap();
	
	protected Log logger = LogFactory.getLog(this.getClass());
	
	private String configFile;//list配置文件,可以多个,通过','分割
	private String queryDir;
	
	private ConfigurationReader parser;
	public void setConfigFile(String configFile){
		this.configFile = configFile;
	}
	
	public String getConfigFile(){
		return this.configFile ;
	}
	
	public void setQueryDir(String queryDir){
		this.queryDir = queryDir;
	}
	
	public String getQueryDir(){
		return this.queryDir ;
	}

	public QueryGroupConfig getGroup(String groupID){
		if( groupID == null ) return null;
		if( groups.get(groupID) == null) return null; 
		return (QueryGroupConfig)groups.get(groupID);
	}
	
	public QueryConfig getQuery(String queryID) throws Exception{
		if( queryID == null ) return null;
		
		if( queryConfigs.get(queryID) == null){
			initQueryConfig(queryID);
		}
		
		if( queryConfigs.get(queryID) == null) return null;
		return (QueryConfig)queryConfigs.get(queryID);
	}
	
	/**
	 * 初始化通用查询,首先解析查询配置文件,然后再解析每个查询
	 * @throws Exception
	 */
	public void init() throws Exception{
		parser = new ConfigurationReader();
		
		String[] cfs = StringUtils.split(configFile,",",true,true);
		for( int j=0;j<cfs.length;j++){
			logger.info("begin init Query config:"+ cfs[j] );
			Configuration conf = parser.buildFromFile( cfs[j] );
			Configuration[] confGroup= conf.getChildren();
			for ( int i = 0 ; i < confGroup.length ; i++ ){
				Configuration group = confGroup[i];
				
				String groupID = group.getAttribute( "id" );
				String configLabel = group.getAttribute( "label" );
				
				QueryGroupConfig groupConfig = new QueryGroupConfig();
				groupConfig.setId( groupID );
				groupConfig.setLabel( configLabel );
				
				initCatalog(group,groupConfig);	
				
				groups.put(groupID,groupConfig);
			}
		}//end string[] for	
	}
		
	private void initCatalog(Configuration groupConf,QueryGroupConfig group) throws Exception{
		Configuration[] catalogs = groupConf.getChildren("catalog");
		ArrayList list = new ArrayList();
		for ( int i = 0 ; i < catalogs.length ; i++ ){
			Configuration cataConf = catalogs[i];
			String cataID = cataConf.getAttribute( "id" );
			String cataLabel = cataConf.getAttribute( "label" );
			String role= cataConf.getAttribute( "role" );
			
			CatalogConfig catalog = new CatalogConfig();
			catalog.setId( cataID );
			catalog.setLabel( cataLabel );
			catalog.setRole( role );
			
			initQuery(cataConf,catalog);
			
			list.add(catalog);
		}	
		group.setCatalogList(list )	;
	}
		
	private void initQuery(Configuration group,CatalogConfig catalog) throws Exception{
		Configuration[] querys = group.getChildren("query");
		ArrayList list = new ArrayList();
		for ( int i = 0 ; i < querys.length ; i++ ){
			Configuration query = querys[i];
			String queryID = query.getAttribute( "id" );
			String queryName = query.getValue();
			
			if( queryConfigs.get(queryID) == null ){
				initQueryConfig(queryID);
			}
			
			catalog.addQueryName(queryID,queryName);
			list.add(queryID);
		}	
		
		catalog.setQueryList(list )	;
	}

	private void initQueryConfig(String queryID)
		throws SAXException, IOException, ConfigurationException, Exception {
		String querConfFile = queryDir + queryID + ".xml";
		logger.debug("querConfFile:"+querConfFile);
		
		Configuration queryConf = parser.buildFromFile(querConfFile);
		
		QueryConfig qConfig = new QueryConfig();
		
		String label = queryConf.getAttribute("label");
		
		String pageLength =  queryConf.getAttribute("pageLength");
		
		int pageLengthValue= -1;
		try{
			pageLengthValue=DataTypeConverter.toInt(pageLength);
		}catch(Exception e){
			pageLengthValue= -1;
		}
		qConfig.setPageLength (pageLengthValue);

		boolean count =false;
		try{
			String countValue =  queryConf.getAttribute("count");
			logger.debug("count:"+ countValue);
			if( countValue != null && countValue.equals("true") ) 
				count = true;
		}catch(Exception e){
			count= false;
		}
		qConfig.setCount(count);
				
		String export;
		try{
			export = queryConf.getAttribute("export");
		}catch(Exception e){
			export = "false";
		}
		qConfig.setExport( export );		

		String action;
		try{
			action = queryConf.getAttribute("action");
		}catch(Exception e){
			action = "doQuery";
		}
		qConfig.setAction( action );		
		
		qConfig.setLabel(label);
		qConfig.setId(queryID);
		
		qConfig.setFrom( queryConf.getChild("from").getValue() );
		qConfig.setWhere( queryConf.getChild("where").getValue() );
		
		Configuration select = queryConf.getChild("select");
		qConfig.setSelectHint( select.getAttribute("before") );
		
		initQueryResult(queryID,select,qConfig);
		initQueryCondition(queryID,queryConf.getChild("vars"),qConfig);
		
		//initQueryACL(queryID,queryConf.getChild("rules"),qConfig);
		
		queryConfigs.put(queryID,qConfig);
	}
	
	private void initQueryCondition(String queryID,Configuration vars,QueryConfig qConfig) throws Exception{
		
		Configuration[] conds = vars.getChildren("var");
		ArrayList results = new ArrayList();
		for(int i=0;i<conds.length;i++){
			QueryConditionConfig cond = new QueryConditionConfig();
			Configuration condConf = conds[i];
			cond.setId( condConf.getAttribute("id") );
			cond.setLabel( condConf.getAttribute("label") );
			
			String dict;
			try{
				dict = condConf.getAttribute("dict");
			}catch(Exception e){
				dict = null;
			}
			cond.setDict( dict );

			String defaultValue;
			try{
				defaultValue = condConf.getAttribute("default");
			}catch(Exception e){
				defaultValue = null;
			}
			cond.setDefaultValue( defaultValue );	

			String type;
			try{
				type = condConf.getAttribute("type");
			}catch(Exception e){
				type = null;
			}
			cond.setType( type );		

			results.add(cond);
		}
		qConfig.setConditions(results);

	}

	private void initQueryResult(String queryID,Configuration select,QueryConfig qConfig) throws Exception{
		Configuration[] columns = select.getChildren("column");
		ArrayList results = new ArrayList();
		for(int i=0;i<columns.length;i++){
			QueryResultConfig result = new QueryResultConfig();	
			Configuration column = columns[i];
			
			result.setLabel( column.getAttribute("label") );
			result.setType( column.getAttribute("type") );
			result.setName( column.getValue() );
			
			String alias;
			try{
				alias = column.getAttribute("alias");
			}catch(Exception e){
				alias = column.getValue();
			}
			result.setAlias( alias );
			
			String format;
			try{
				format = column.getAttribute("format");
			}catch(Exception ew){
				format = null;
			}
			result.setFormat( format );
			
			String width;
			try{
				width = column.getAttribute("width");
			}catch(Exception ew){
				width = null;
			}
			result.setWidth( width );
			
			results.add(result);
		}
		qConfig.setResults(results);
	}
	
	private void initQueryACL(String queryID,Configuration rules,QueryConfig qConfig) throws Exception{
		Configuration[] ruleConfs = rules.getChildren("rule");
		QueryACLConfig acl = new QueryACLConfig();
		for(int i=0;i<ruleConfs.length;i++){
			Configuration rule = ruleConfs[i];
			acl.addRule(rule.getAttribute("role"),rule.getValue());
		}
		qConfig.setAcl(acl);
	}	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?