页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。
评论: 源码和扩展包附件

...

代码块
languagejava
titleCSVQuery
linenumberstrue
package com.proj;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import smartbi.freequery.metadata.IJavaQueryData;
import smartbi.freequery.metadata.JavaQueryConfig;
import smartbi.freequery.metadata.JavaQueryOutputField;
import smartbi.freequery.metadata.JavaQueryParameter;
import smartbi.freequery.querydata.CellData;
import smartbi.freequery.querydata.GridData;
import smartbi.net.sf.json.JSONObject;
import smartbi.util.StringUtil;
import smartbi.util.ValueType;
public class MyJavaQuery implements IJavaQueryData.ISimpleData {
	private Map<String, JavaQueryConfig> configs = new LinkedHashMap<String, JavaQueryConfig>();
	 private BufferedReader reader;
	 private List<JavaQueryOutputField> outputFields;
	 private int currentLine;
	  
	 public MyJavaQuery() {
	  //增加一个名称为FileName的配置项
	  addConfig("FileName", "文件名", "给定一个文件名", "test.csv", true);
	  addConfig("Encoding", "编码", "编码方式", "GBK", true);
	 }
	  
	 /**
	  * 获取Java查询需要的配置信息
	  */
	 public List<JavaQueryConfig> getConfigs() {
	  return new ArrayList<JavaQueryConfig>(configs.values());
	 }
	 /**
	  * 添加一个配置项
	  * @param name 名称
	  * @param alias 别名
	  * @param desc 描述
	  * @param defaultValue 默认值
	  * @param notNull 是否允许为空
	  */
	 private void addConfig(String name, String alias, String desc, String defaultValue, boolean notNull) {
	  JavaQueryConfig p = new JavaQueryConfig();
	  p.setName(name);
	  p.setAlias(alias);
	  p.setDesc(desc);
	  p.setValue(defaultValue);
	  p.setNotNull(notNull);
	  configs.put(name, p);
	 }
	  
	 /**
	  * 从保存的字符串中恢复配置信息
	  * @param configStr 配置字符串
	  */
	 public void loadConfigs(String configStr) {
	  if(StringUtil.isNullOrEmpty(configStr))
	   return;
	  JSONObject obj = JSONObject.fromString(configStr);
	  configs.get("FileName").setValue(obj.has("FileName") ? obj.getString("FileName") : null);
	  configs.get("Encoding").setValue(obj.has("Encoding") ? obj.getString("Encoding") : null);
	 }
	 /**
	  * 保存配置信息
	  * @return 返回配置字符串
	  */
	 public String saveConfigs() {
	  JSONObject json = new JSONObject();
	  for(JavaQueryConfig config : configs.values())
	   json.put(config.getName(), config.getValue());
	  return json.toString();
	 }
	 /**
	  * 设置配置信息
	  * @param key 名称
	  * @param value 配置值
	  */
	 public void setConfigValue(String key, String value) {
	  configs.get(key).setValue(value);
	 }
	 /**
	  * 设置配置信息
	  */
	 public void setConfigValues(Map<String, String> configValues) {
	  for(Entry<String, String> config : configValues.entrySet())
	   configs.get(config.getKey()).setValue(config.getValue());
	 }
	 /**
	  * 根据配置信息初始化Java查询对象
	  */
	 public void init() {
	  try {
	   reader = new BufferedReader(new InputStreamReader(new FileInputStream(configs.get("FileName").getValue()), configs.get("Encoding").getValue()));
	   String titleLine = reader.readLine();
	   String[] fields = titleLine.split(",");
	   outputFields = new ArrayList<JavaQueryOutputField>();
	   for(String str : fields) {
	    JavaQueryOutputField f =  new JavaQueryOutputField();
	    f.setId(str);
	    f.setName(str);
	    f.setAlias(str);
	    f.setDataType(ValueType.STRING);
	    outputFields.add(f);
	   }
	   currentLine = 0;
	  } catch (UnsupportedEncodingException e) {
	   throw new IllegalArgumentException(e);
	  } catch (FileNotFoundException e) {
	   throw new IllegalArgumentException(e);
	  } catch (IOException e) {
	   throw new IllegalArgumentException(e);
	  }
	 }
	 /**
	  * 关闭Java查询对象,关闭必要的资源
	  */
	 public void close() {
	  try {
	   if(reader != null) {
	    reader.close();
	    reader = null;
	   }
	  } catch (IOException e) {
	   throw new IllegalArgumentException(e);
	  }
	 }
	 /**
	  * 返回参数对象
	  */
	 public List<JavaQueryParameter> getParameters() {
	  return new ArrayList<JavaQueryParameter>();
	 }
	 /**
	  * 设置参数值
	  */
	 public void setParameterValue(String id, String value, String displayValue) {
	 }
	 /**
	  * 返回Java查询的输出字段
	  */
	 public List<JavaQueryOutputField> getOutputFields() {
	  return outputFields;
	 }
	 /**
	  * 获取指定行的数据
	  */
	 public GridData getGridData(int from, int count) {
	  try {
	   if(currentLine > from) {
	    reader.close();
	    reader = new BufferedReader(new InputStreamReader(new FileInputStream(configs.get("FileName").getValue()), configs.get("Encoding").getValue()));
	    reader.readLine();
	    currentLine = 0;
	   }
	   while(currentLine < from) {
	    reader.readLine();
	    currentLine++;
	   }
	   List<List<CellData>> datas = new ArrayList<List<CellData>>();
	   for(int i = 0; i < count; i++) {
	    String line = reader.readLine();
	    if(line == null)
	     break;
	    currentLine++;
	    String[] fs = line.split(",");
	    List<CellData> row = new ArrayList<CellData>();
	    for(int j = 0; j < fs.length; j++) {
	     CellData c = new CellData();
	     c.setStringValue(fs[j]);
	     row.add(c);
	    }
	    datas.add(row);
	   }
	   GridData d = new GridData();
	   List<String> headers = new ArrayList<String>();
	   for(JavaQueryOutputField  f : outputFields)
	    headers.add(f.getName());
	   d.setStringHeaders(headers);
	   d.setData(datas);
	   return d;
	  } catch (UnsupportedEncodingException e) {
	   throw new IllegalArgumentException(e);
	  } catch (FileNotFoundException e) {
	   throw new IllegalArgumentException(e);
	  } catch (IOException e) {
	   throw new IllegalArgumentException(e);
	  }
	 }
	 /**
	  * 返回总行数,返回Integer.MAX_VALUE表示未知总行数
	  */
	 public int getRowCount() {
	  return Integer.MAX_VALUE;
	 }
}

 附件

源代码:MyJavaQueryProj.rar,扩展包:MyJavaQueryProj.ext