Nevar pievienot vairāk kā 25 tēmas
Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
158 rindas
5.1 KiB
158 rindas
5.1 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.utils;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import com.bstek.ureport.Utils;
|
|
import com.bstek.ureport.build.Context;
|
|
import com.bstek.ureport.definition.value.DatasetValue;
|
|
import com.bstek.ureport.definition.value.ExpressionValue;
|
|
import com.bstek.ureport.definition.value.Value;
|
|
import com.bstek.ureport.exception.ReportComputeException;
|
|
import com.bstek.ureport.expression.model.Expression;
|
|
import com.bstek.ureport.expression.model.expr.BaseExpression;
|
|
import com.bstek.ureport.expression.model.expr.JoinExpression;
|
|
import com.bstek.ureport.expression.model.expr.ParenExpression;
|
|
import com.bstek.ureport.expression.model.expr.dataset.DatasetExpression;
|
|
import com.bstek.ureport.model.Cell;
|
|
|
|
/**
|
|
* @author Jacky.gao
|
|
* @since 2017年6月12日
|
|
*/
|
|
public class DataUtils {
|
|
public static List<?> fetchData(Cell cell, Context context,String datasetName) {
|
|
Cell leftCell=fetchLeftCell(cell, context, datasetName);
|
|
Cell topCell=fetchTopCell(cell, context, datasetName);
|
|
List<Object> leftList=null,topList=null;
|
|
if(leftCell!=null){
|
|
leftList=leftCell.getBindData();
|
|
}
|
|
if(topCell!=null){
|
|
topList=topCell.getBindData();
|
|
}
|
|
if(leftList==null && topList==null){
|
|
List<?> data=context.getDatasetData(datasetName);
|
|
return data;
|
|
}else if(leftList==null){
|
|
return topList;
|
|
}else if(topList==null){
|
|
return leftList;
|
|
}else{
|
|
List<Object> list=null;
|
|
Object data=null;
|
|
String prop=null;
|
|
if(leftList.size()>topList.size()){
|
|
list=topList;
|
|
data=leftCell.getData();
|
|
Value value=leftCell.getValue();
|
|
DatasetExpression de=fetchDatasetExpression(value);
|
|
if(de==null){
|
|
throw new ReportComputeException("Unsupport value : "+value);
|
|
}
|
|
prop=de.getProperty();
|
|
}else{
|
|
list=leftList;
|
|
data=topCell.getData();
|
|
Value value=topCell.getValue();
|
|
DatasetExpression de=fetchDatasetExpression(value);
|
|
if(de==null){
|
|
throw new ReportComputeException("Unsupport value : "+value);
|
|
}
|
|
prop=de.getProperty();
|
|
}
|
|
List<Object> result=new ArrayList<Object>();
|
|
for(Object obj:list){
|
|
Object o=Utils.getProperty(obj, prop);
|
|
if((o==null && data==null)){
|
|
result.add(obj);
|
|
}else if(o!=null && o.equals(data)){
|
|
result.add(obj);
|
|
}else if(data!=null && data.equals(o)){
|
|
result.add(obj);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
public static Cell fetchLeftCell(Cell cell, Context context,String datasetName){
|
|
Cell targetCell=null;
|
|
Cell leftCell=cell.getLeftParentCell();
|
|
if(leftCell!=null){
|
|
Value leftCellValue=leftCell.getValue();
|
|
DatasetExpression leftDSValue=fetchDatasetExpression(leftCellValue);
|
|
if(leftDSValue!=null){
|
|
String leftDatasetName=leftDSValue.getDatasetName();
|
|
if(leftDatasetName.equals(datasetName)){
|
|
if(leftCell.getBindData()!=null){
|
|
targetCell=leftCell;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return targetCell;
|
|
}
|
|
public static Cell fetchTopCell(Cell cell, Context context,String datasetName){
|
|
Cell targetCell=null;
|
|
Cell topCell=cell.getTopParentCell();
|
|
if(topCell!=null){
|
|
Value topCellValue=topCell.getValue();
|
|
DatasetExpression leftDSValue=fetchDatasetExpression(topCellValue);
|
|
if(leftDSValue!=null){
|
|
String leftDatasetName=leftDSValue.getDatasetName();
|
|
if(leftDatasetName.equals(datasetName)){
|
|
if(topCell.getBindData()!=null){
|
|
targetCell=topCell;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return targetCell;
|
|
}
|
|
public static DatasetExpression fetchDatasetExpression(Value value){
|
|
if(value instanceof ExpressionValue){
|
|
ExpressionValue exprValue=(ExpressionValue)value;
|
|
Expression expr=exprValue.getExpression();
|
|
if(expr instanceof DatasetExpression){
|
|
return (DatasetExpression)expr;
|
|
}else if(expr instanceof ParenExpression){
|
|
ParenExpression parenExpr=(ParenExpression)expr;
|
|
DatasetExpression targetExpr=buildDatasetExpression(parenExpr);
|
|
return targetExpr;
|
|
}else{
|
|
return null;
|
|
}
|
|
}else if(value instanceof DatasetValue){
|
|
return (DatasetValue)value;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private static DatasetExpression buildDatasetExpression(JoinExpression joinExpr){
|
|
List<BaseExpression> expressions=joinExpr.getExpressions();
|
|
for(BaseExpression baseExpr:expressions){
|
|
if(baseExpr instanceof DatasetExpression){
|
|
return (DatasetExpression)baseExpr;
|
|
}else if(baseExpr instanceof JoinExpression){
|
|
JoinExpression childExpr=(JoinExpression)baseExpr;
|
|
return buildDatasetExpression(childExpr);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|