-
Notifications
You must be signed in to change notification settings - Fork 1.2k
定制DataProvider
yzhang921 edited this page Oct 19, 2016
·
5 revisions
前面有介绍,即便是昂贵的商业BI套件想要囊括大数据时代所有的数据源连接都是不可能做到的,在NoSQL领域中,传统观念中的Schema可以通过不同的数据结构来实现,如散列表、数组、树、图等等,不同的人使用相同的NoSQL产品设计出来的Schema都可能千差万别,最熟悉这种存储结构的是用户自己,让用户找一个Java程序员写个Class连接自己的数据源却很容易做到的, 为此我们把这种需求开放给用户自己实现,我们的愿景是让用户在CBoard大架构下轻松的接入自己的各种数据源。
术语 | 解释 |
---|---|
DataProvider | DataProvider是一个Java抽象类,定制的DataProvider需要继承这个类实现getData方法 |
DataSource | DataProvider的实例,在前端界面对应数据源管理 |
DataQuery | 调用getData方法获取数据,返回一个二维数据第一行为表头 |
import com.adminboard.dataprovider.DataProvider;
import com.adminboard.dataprovider.annotation.DatasourceParameter;
import com.adminboard.dataprovider.annotation.ProviderName;
import com.adminboard.dataprovider.annotation.QueryParameter;
import java.util.Map;
/**
* Created by zyong on 2016/9/27.
*/
@ProviderName(name = "MyDataProvider")
public class MyDataProvider extends DataProvider {
// **数据源管理** 页面 创建数据源的时候需要配置的参数
@DatasourceParameter(label = "数据源参数", type = DatasourceParameter.Type.Input, order = 1)
private String DS_PARAM_KEY = "param";
// **图表设计**页面 读取数据接收参数
@QueryParameter(label = "查询参数", type = QueryParameter.Type.Input, order = 1)
private String QUERY_PARAM_KEY = "query";
/**
*
* @param dataSource 参数Map
* @param query 参数Map
* @return
* @throws Exception
*/
@Override
public String[][] getData(Map<String, String> dataSource, Map<String, String> query) throws Exception {
// 获取data source 参数创建数据连接
String param = dataSource.get(DS_PARAM_KEY);
// TODO 利用接收到的DataSource配置参数创建DataSource连接,如:JDBC Connection,这个演示从内存返回数据,就不用创建连接了
// 查询获取数据
String queryParam = query.get(QUERY_PARAM_KEY);
// 表头
String[] header = {"D1", "D2", "D3", "M1", "M2"};
String[] header2 = {"Dim1", "Dim2", "Dim3", "Measure1", "Measure2"};
String[][] result = {
"1".equals(queryParam) ? header : header2, // 第一行返回表头, 这里演示怎么和配置的查询前端参数交互切换表头
{queryParam, "b1", "c1", "1", "2"},
{queryParam, "b2", "c2", "13", "42"},
{queryParam, "b1", "c3", "781", "52"},
{queryParam, "b2", "c4", "17", "92"}
};
return result;
}
}
自定义的DataProvider中配置一个label = "查询参数"
的查询参数,表头根据查询参数自动切换,当然真实应用中逻辑应该是接收查询参数,返回查询对应的数据
欢迎大家通过GitHub Issue系统反馈Bug与需求、提Pull Request