/* * Copyright (C) 2010---2014 星星(wuweixing)<349446658@qq.com> * * This file is part of Wabacus * * Wabacus is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.wabacus.config.component.application.report.condition; import java.util.List; import com.wabacus.config.component.application.report.ConditionBean; import com.wabacus.config.component.application.report.ReportDataSetValueBean; import com.wabacus.exception.WabacusConfigLoadingException; import com.wabacus.exception.WabacusRuntimeException; import com.wabacus.system.ReportRequest; import com.wabacus.system.assistant.ReportAssistant; import com.wabacus.system.datatype.IDataType; import com.wabacus.util.Tools; public class ConditionInSqlBean implements Cloneable { private String conditionname; private String placeholder; private ConditionExpressionBean conditionExpression; private ReportDataSetValueBean owner; public ConditionInSqlBean(ReportDataSetValueBean owner) { this.owner=owner; } public String getConditionname() { return conditionname; } public String getRealConditionname() { if(conditionname==null||conditionname.trim().equals("")||conditionname.equals("{#condition#}")) { return null; } if(conditionname.startsWith("{#")&&conditionname.endsWith("#}")) { return conditionname.substring(2,conditionname.length()-2); } if(conditionname.startsWith("#")&&conditionname.endsWith("#")) {//#name#形式 return conditionname.substring(1,conditionname.length()-1); } return conditionname; } public void setConditionname(String conditionname) { this.conditionname=conditionname; } public String getPlaceholder() { return placeholder; } public void setPlaceholder(String placeholder) { this.placeholder=placeholder; } public ConditionExpressionBean getConditionExpression() { return conditionExpression; } public void setConditionExpression(ConditionExpressionBean conditionExpression) { this.conditionExpression=conditionExpression; } public String parseConditionInSql(ReportRequest rrequest,String sql,List<String> lstConditionValues, List<IDataType> lstConditionTypes) { String conname=this.getRealConditionname(); if(conname==null||conname.trim().equals("")) { if(conditionname.equals("{#condition#}")) { return ReportAssistant.getInstance().addDynamicConditionExpressionsToSql(rrequest,this.owner.getReportBean(),this.owner,sql, owner.getProvider().getLstMyConditionBeans(rrequest),lstConditionValues,lstConditionTypes); } throw new WabacusRuntimeException("报表"+this.owner.getReportBean().getPath()+"中ConditionBeanInSqlBean的conditionname属性为空"); } ConditionBean cbeanRefered=owner.getReportBean().getSbean().getConditionBeanByName(conname);//取到被此条件引用的<condition/> String conditionvalue=cbeanRefered.getDynamicConditionvalueForSql(rrequest,-1); if(!conditionvalue.equals("")||(conditionname.startsWith("#")&&conditionname.endsWith("#"))) { if(conditionname.startsWith("{#")&&conditionname.endsWith("#}")) { return Tools.replaceAll(sql,this.placeholder,conditionvalue); } return Tools.replaceAll(sql,this.placeholder,conditionExpression.getRuntimeConditionExpressionValue(cbeanRefered,conditionvalue, lstConditionValues,lstConditionTypes)); }else { return ReportAssistant.getInstance().replaceSQLConditionPlaceHolderByRealValue(this.owner.getReportBean(),sql,this.placeholder,null); } } public ConditionInSqlBean clone() { try { ConditionInSqlBean newBean=(ConditionInSqlBean)super.clone(); if(this.conditionExpression!=null) { newBean.setConditionExpression((ConditionExpressionBean)conditionExpression.clone()); } return newBean; }catch(CloneNotSupportedException e) { throw new WabacusConfigLoadingException("clone ConditionInSqlBean对象失败",e); } } }