You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 rivejä
5.7 KiB
165 rivejä
5.7 KiB
/*******************************************************************************
|
|
* Copyright 2017 Bstek
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
* use this file except in compliance with the License. You may obtain a copy
|
|
* of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations under
|
|
* the License.
|
|
******************************************************************************/
|
|
package com.bstek.ureport.parser.impl;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.dom4j.Element;
|
|
|
|
import com.bstek.ureport.definition.ConditionCellStyle;
|
|
import com.bstek.ureport.definition.ConditionPaging;
|
|
import com.bstek.ureport.definition.ConditionPropertyItem;
|
|
import com.bstek.ureport.definition.LinkParameter;
|
|
import com.bstek.ureport.expression.ExpressionUtils;
|
|
import com.bstek.ureport.expression.model.Condition;
|
|
import com.bstek.ureport.expression.model.Expression;
|
|
import com.bstek.ureport.expression.model.Op;
|
|
import com.bstek.ureport.expression.model.condition.BaseCondition;
|
|
import com.bstek.ureport.expression.model.condition.BothExpressionCondition;
|
|
import com.bstek.ureport.expression.model.condition.Join;
|
|
import com.bstek.ureport.expression.model.condition.PropertyExpressionCondition;
|
|
import com.bstek.ureport.parser.Parser;
|
|
|
|
/**
|
|
* @author Jacky.gao
|
|
* @since 2017年4月11日
|
|
*/
|
|
public class ConditionParameterItemParser implements Parser<ConditionPropertyItem>{
|
|
private Map<String,Parser<?>> parsers=new HashMap<String,Parser<?>>();
|
|
public ConditionParameterItemParser() {
|
|
parsers.put("cell-style",new CellStyleParser());
|
|
parsers.put("link-parameter",new LinkParameterParser());
|
|
parsers.put("paging",new ConditionPagingParser());
|
|
}
|
|
@Override
|
|
public ConditionPropertyItem parse(Element element) {
|
|
ConditionPropertyItem item=new ConditionPropertyItem();
|
|
String rowHeight=element.attributeValue("row-height");
|
|
if(StringUtils.isNotBlank(rowHeight)){
|
|
item.setRowHeight(Integer.valueOf(rowHeight));
|
|
}
|
|
String colWidth=element.attributeValue("col-width");
|
|
if(StringUtils.isNotBlank(colWidth)){
|
|
item.setColWidth(Integer.valueOf(colWidth));
|
|
}
|
|
item.setName(element.attributeValue("name"));
|
|
item.setNewValue(element.attributeValue("new-value"));
|
|
item.setLinkUrl(element.attributeValue("link-url"));
|
|
item.setLinkTargetWindow(element.attributeValue("link-target-window"));
|
|
List<LinkParameter> parameters=null;
|
|
List<Condition> conditions=new ArrayList<Condition>();
|
|
item.setConditions(conditions);
|
|
BaseCondition topCondition=null;
|
|
BaseCondition prevCondition=null;
|
|
for(Object obj:element.elements()){
|
|
if(obj==null || !(obj instanceof Element)){
|
|
continue;
|
|
}
|
|
Element ele=(Element)obj;
|
|
String name=ele.getName();
|
|
if(name.equals("condition")){
|
|
BaseCondition condition = parseCondition(ele);
|
|
conditions.add(condition);
|
|
if(topCondition==null){
|
|
topCondition=condition;
|
|
prevCondition=condition;
|
|
}else{
|
|
prevCondition.setNextCondition(condition);
|
|
prevCondition.setJoin(condition.getJoin());
|
|
prevCondition=condition;
|
|
}
|
|
continue;
|
|
}
|
|
Parser<?> parser=parsers.get(name);
|
|
if(parser==null){
|
|
continue;
|
|
}
|
|
Object data=parser.parse(ele);
|
|
if(data instanceof ConditionCellStyle){
|
|
item.setCellStyle((ConditionCellStyle)data);
|
|
}else if(data instanceof LinkParameter){
|
|
if(parameters==null){
|
|
parameters=new ArrayList<LinkParameter>();
|
|
}
|
|
parameters.add((LinkParameter)data);
|
|
}else if(data instanceof ConditionPaging){
|
|
item.setPaging((ConditionPaging)data);
|
|
}
|
|
}
|
|
item.setCondition(topCondition);
|
|
item.setLinkParameters(parameters);
|
|
return item;
|
|
}
|
|
|
|
private BaseCondition parseCondition(Element ele) {
|
|
String type=ele.attributeValue("type");
|
|
if(type==null || type.equals("property")){
|
|
PropertyExpressionCondition condition=new PropertyExpressionCondition();
|
|
String property=ele.attributeValue("property");
|
|
condition.setLeftProperty(property);
|
|
condition.setLeft(property);
|
|
condition.setOp(Op.parse(ele.attributeValue("op")));
|
|
for(Object o:ele.elements()){
|
|
if(o==null || !(o instanceof Element)){
|
|
continue;
|
|
}
|
|
Element e=(Element)o;
|
|
if(!e.getName().equals("value")){
|
|
continue;
|
|
}
|
|
String expr=e.getTextTrim();
|
|
condition.setRightExpression(ExpressionUtils.parseExpression(expr));
|
|
condition.setRight(expr);
|
|
break;
|
|
}
|
|
String join=ele.attributeValue("join");
|
|
if(StringUtils.isNotBlank(join)){
|
|
condition.setJoin(Join.valueOf(join));
|
|
}
|
|
return condition;
|
|
}else{
|
|
BothExpressionCondition exprCondition=new BothExpressionCondition();
|
|
exprCondition.setOp(Op.parse(ele.attributeValue("op")));
|
|
for(Object o:ele.elements()){
|
|
if(o==null || !(o instanceof Element)){
|
|
continue;
|
|
}
|
|
Element e=(Element)o;
|
|
String name=e.getName();
|
|
if(name.equals("left")){
|
|
String left=e.getText();
|
|
Expression leftExpr=ExpressionUtils.parseExpression(left);
|
|
exprCondition.setLeft(left);
|
|
exprCondition.setLeftExpression(leftExpr);
|
|
}else if(name.equals("right")){
|
|
String right=e.getText();
|
|
Expression rightExpr=ExpressionUtils.parseExpression(right);
|
|
exprCondition.setRight(right);
|
|
exprCondition.setRightExpression(rightExpr);
|
|
}
|
|
}
|
|
String join=ele.attributeValue("join");
|
|
if(StringUtils.isNotBlank(join)){
|
|
exprCondition.setJoin(Join.valueOf(join));
|
|
}
|
|
return exprCondition;
|
|
}
|
|
}
|
|
}
|
|
|