JSD-8210开源任务材料
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.
 
 

93 lines
3.5 KiB

package com.fr.plugin.xxx.report.core;
import com.fr.base.ParameterMapNameSpace;
import com.fr.base.SynchronizedLiveDataModelUtils;
import com.fr.base.TableData;
import com.fr.data.TableDataSource;
import com.fr.data.api.TableDataAssist;
import com.fr.general.data.DataModel;
import com.fr.main.TemplateWorkBook;
import com.fr.script.Calculator;
import com.fr.stable.ParameterProvider;
import com.fr.web.request.ReportletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
**/
public final class DsUtils {
private DsUtils(){}
private final static Calculator initCalculator(TemplateWorkBook book){
Calculator calculator = Calculator.createCalculator();
calculator.setAttribute(TableDataSource.KEY,book);
return calculator;
}
private final static void initParameter(Calculator calculator,TableData ds,ReportletRequest request){
Map<String,Object> parameters = new HashMap<String,Object>();
ParameterProvider[] ps = ds.getParameters(calculator);
for( ParameterProvider p : ps ){
String pname = p.getName();
Object v = request.getParameter(pname);
if( null != v ){
parameters.put(pname, v);
}
}
ParameterMapNameSpace space = ParameterMapNameSpace.create(parameters);
calculator.pushNameSpace(space);
}
public static DataModel getDataModel(TemplateWorkBook book, ReportletRequest request, String dsName ){
Calculator calculator = initCalculator(book);
TableData ds = TableDataAssist.getTableData(calculator, dsName);
initParameter(calculator,ds,request);
DataModel dm = SynchronizedLiveDataModelUtils.getSELiveDataModel4Share(calculator, dsName);
if ( null == dm ) {
dm = ds == null ? null : ds.createDataModel(calculator);
}
return dm;
}
public static DataModel getDataModel(TemplateWorkBook book, Calculator calculator, String dsName ){
TableData ds = TableDataAssist.getTableData(calculator, dsName);
DataModel dm = SynchronizedLiveDataModelUtils.getSELiveDataModel4Share(calculator, dsName);
if ( null == dm ) {
dm = ds == null ? null : ds.createDataModel(calculator);
}
return dm;
}
public static Map<String,String> getRelation(String dsName, String keyCol, String valueCol, TemplateWorkBook book, Calculator cal){
Map<String,String> rt = new HashMap<String,String>();
try{
DataModel dm = getDataModel(book,cal,dsName);
int vIdx = dm.getColumnIndex(valueCol);
int kIdx = dm.getColumnIndex(keyCol);
for( int i=0,len=dm.getRowCount();i<len;i++ ){
rt.put( (String)dm.getValueAt( i, kIdx), (String)dm.getValueAt( i, vIdx) );
}
}catch(Exception e){
}
return rt;
}
public static Map<String,String> getRelation(String dsName, String keyCol, String valueCol, TemplateWorkBook book, ReportletRequest request){
Map<String,String> rt = new HashMap<String,String>();
try{
DataModel dm = getDataModel(book,request,dsName);
int vIdx = dm.getColumnIndex(valueCol);
int kIdx = dm.getColumnIndex(keyCol);
for( int i=0,len=dm.getRowCount();i<len;i++ ){
rt.put( (String)dm.getValueAt( i, kIdx), (String)dm.getValueAt( i, vIdx) );
}
}catch(Exception e){
}
return rt;
}
}