All Projects → zaoying → EChartsAnnotation

zaoying / EChartsAnnotation

Licence: MIT License
ECharts的Java注解框架

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to EChartsAnnotation

ngx-echarts-starter
A starter demo project for ngx-echarts
Stars: ✭ 29 (+31.82%)
Mutual labels:  echarts
echarts-for-wechat-wepy
echarts微信小程序wepy版本封装
Stars: ✭ 29 (+31.82%)
Mutual labels:  echarts
fishing-funds
基金,大盘,股票,虚拟货币状态栏显示小应用,基于Electron开发,支持MacOS,Windows,Linux客户端,数据源来自天天基金,蚂蚁基金,爱基金,腾讯证券,新浪基金等
Stars: ✭ 424 (+1827.27%)
Mutual labels:  echarts
vue-echarts-map
Vue版本Echarts中国地图钻取
Stars: ✭ 113 (+413.64%)
Mutual labels:  echarts
grafana-echarts-panel
Grafana集成Echarts
Stars: ✭ 49 (+122.73%)
Mutual labels:  echarts
GTD-Visualization
全球恐怖袭击数据可视化
Stars: ✭ 31 (+40.91%)
Mutual labels:  echarts
ts-vue-questionnaire
微型问卷调查系统 TypeScript 版本,演示账号:admin / admin
Stars: ✭ 89 (+304.55%)
Mutual labels:  echarts
vue-kai-admin
学习vue-admin架构,顺便记录工作的组件
Stars: ✭ 31 (+40.91%)
Mutual labels:  echarts
aaocp
一个对用户行为日志进行分析的大数据项目
Stars: ✭ 53 (+140.91%)
Mutual labels:  echarts
react-visualized-platform
🐞 基于 React 的雾霾数据爬虫分析平台
Stars: ✭ 31 (+40.91%)
Mutual labels:  echarts
GithubProfile
Visualizing GitHub profile
Stars: ✭ 45 (+104.55%)
Mutual labels:  echarts
echarts-graph-modularity
Apache ECharts graph modularity extension for community detection
Stars: ✭ 62 (+181.82%)
Mutual labels:  echarts
7-react-admin-ts
用 ts + react-hooks 实现的管理后台
Stars: ✭ 23 (+4.55%)
Mutual labels:  echarts
vue-admin-work
🎉🎉🚀🚀🚀🚀vue-admin-work是一个中后台系统管理方案。使用 vue2.x 及周边全家桶工具开发而来。支持多种功能,不同角色权限🚀🚀🚀🎉🎉
Stars: ✭ 74 (+236.36%)
Mutual labels:  echarts
zabbix-monitor
monitor system based on zabbix API pyzaabix grafana
Stars: ✭ 70 (+218.18%)
Mutual labels:  echarts
echarts-map-xicheng
Echarts实现北京市西城区各街道地图demo
Stars: ✭ 50 (+127.27%)
Mutual labels:  echarts
echarts-china-map
echarts 中国地图版
Stars: ✭ 81 (+268.18%)
Mutual labels:  echarts
charts
📊 A set of charts based on rsuite and ECharts
Stars: ✭ 65 (+195.45%)
Mutual labels:  echarts
data-visualization
🔗 configurable data visualization
Stars: ✭ 18 (-18.18%)
Mutual labels:  echarts
k-line
股票、虚拟币交易k线图
Stars: ✭ 32 (+45.45%)
Mutual labels:  echarts

ECharts的Java注解框架 EChartsAnnotation

用原生Java注解来映射ECharts的Option类,提供Annotation到JSON的转换功能。

思路 How it works

1在后台使用Annotation来标注Bean类
2注解处理器转换成JSON树
3使用JSON系列化工具包(fastjson/gson)输出到前端页面

注解 Annotation

基于ECharts3.0制作
Option定义
总共有3700+个注解!这里生成的注解只能用于标记Bean类的域Field
根据JSON树的叶子节点的Type属性中的不同类型,3700多注解分成6种不同类型:

JS类型 Java类型 默认值 文件名后缀 备注
boolean boolean false Boolean 布尔类型
Color int 0 Hex Web颜色映射成Java整型,由于常用16进制表示所以后缀是Hex
number Number 0 Number 抽象类Number是int、double等基本类型的父类,一律转为double
string String "" String 字符串类型
Array List Array 数组类型一律转成泛型List
Function Object Function 由于Java不支持函数类型,所以需要实现fastjson接口JSONAware的toJSONString方法输出字符串的“函数”
* Object All 参考Function类型

按注解的参数个数分,可以分为两种:
######标记注解 标记注解没有参数。如果被标记的元素为null或者等于默认值,注解处理器将不会输出任何东西
######单值注解 单值注解只有一个参数。该参数的类型跟注解名件名末尾的单词有关。
由于许多叶子节点有多种类型,所以一个叶子节点可能生成多个注解,但是注解处理器把这些注解当作同一个注解输出。
在单值注解的参数不为空和被标记的元素不为null且不等于默认值的情况下,注解处理器会优先输出被注解元素的值。

注解处理器 AnnotationProcessor

######注解处理器专用的注解:
SingleChartDuplexChart用来标记需要被转换成JSON的Java Bean类,
这两个注解不同之处在于处理seriesdataZoomvisualMap下面的注解时,
同一个类多次同个注解文件,前者把重复出现的注解合并处理;
后者通过AddSeriesAddDataZoomAddVisualMap三种注解提取被SingleChart标记的Java文件中的
seriesdataZoomvisualmap,并添加到当前被DouplexChart标记的文件中。 ######SingleChart 参数 exportTo 默认值是"",不等于默认值时向本地磁盘写入"exportTo".json
参数 extendsFrom 默认值是"",不等于默认值时,将继承自"extendsFrom.json"
######DupelxChart 参数 exportTo 默认值是"",不等于默认值时向本地磁盘写入"exportTo".json
参数 extendsFrom 默认值是"",不等于默认值时,将继承自"extendsFrom.json"
######AddSeries 只能用于DuplexChart的域Field,若域不为null且域的类源文件被SingleChart注解标记,
将会提取源文件中series下的注解并添加到DuplexChart
######AddDataZoom 只能用于DuplexChart的域Field,若域不为null且域的类源文件被SingleChart注解标记,
将会提取源文件中dataZoom下的注解并添加到DuplexChart
######AddVisualMap 只能用于DuplexChart的域Field,若域不为null且域的类源文件被SingleChart注解标记,
将会提取源文件中visualMap下的注解并添加到DuplexChart

如何使用 Get Started

phraseSingleChartphraseDuplexChart已合并到parseChart,不用再区分两者。
1添加EChartsAnnotation到项目
maven

<dependency>
  <groupId>cn.edu.gdut.zaoying</groupId>
  <artifactId>EChartsAnnotation</artifactId>
  <version>1.0.2</version>
  <type>pom</type>
</dependency>

gradle

compile('cn.edu.gdut.zaoying:EChartsAnnotation:1.0.2')

jar
下载Jar包
2增加LineChart折线图

@SingleChart(exportTo = "templates/lineChart.json")
public class LineChart {
    @NameString
    String name;
    @DataArray
    double[] data;
    @cn.edu.gdut.zaoying.Option.xAxis.NameString("横轴")
    String xAxisName;
    @TypeString("category")
    String type;
    @cn.edu.gdut.zaoying.Option.xAxis.DataArray
    int[] xAxisData=new int[]{1,2,3,4};
    @cn.edu.gdut.zaoying.Option.yAxis.NameString("纵轴")
    String yAxisName;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double[] getData() {
        return data;
    }

    public void setData(double[] data) {
        this.data = data;
    }

}

之前的例子因为少了xAxisyAxis没法正常显示,这是ECharts的要求。
3调用图表处理器

public class EChartsTest {
    public static void main(String[] args) {
      LineChart lineChart=new LineChart();
      lineChart.name="线性表一";
      lineChart.data=new double[]{1,2,3,4};
      Object json=EChartsAnnotationProcessor.parseChart(lineChart);
      System.out.print(JSON.toJSONString(json));
    }
}

4编写更复杂的组合图表
######编写条形图

import cn.edu.gdut.zaoying.Option.series.bar.DataArray;
import cn.edu.gdut.zaoying.Option.series.bar.NameString;
import cn.edu.gdut.zaoying.SingleChart;

@SingleChart
public class BarChart {
    @NameString
    String name;
    @DataArray
    double[] data;
}

######CombinedChart组合图表

@DuplexChart
public class CombinedChart {
    @TextString
    String title;
    @BackgroundColorHex(value = 0xfff)
    int backgroundColor;
    @AddSeries
    LineChart lineChart;
    @AddSeries
    LineChart lineChart2;
    @AddSeries
    BarChart barChart;

    public CombinedChart(String title) {
        this.title = title;
        lineChart = new LineChart();
        lineChart.setName("折线图");
        lineChart.setData(new double[]{1,2,3,4});
        lineChart2 = new LineChart();
        lineChart2.setName("折线图二");
        lineChart2.setData(new double[]{3,6,8,9});
        barChart = new BarChart();
        barChart.setName("条形图");
        barChart.setData(new double[]{5,6,7,8});
    }
}

5调用图表处理器

public class EChartsTest {
    public static void main(String[] args) {
        Object json=EChartsAnnotationProcessor.parseChart(new CombinedChart("组合图表"));
        System.out.print(JSON.toJSONString(json));
    }
}

6使用继承 ######编写view.json

{
  "title":{"text":"组合图表"},
  "backgroundColor":"#fff"
}

######修改CombinedChart.java

@DuplexChart(extendFrom = "view.json")//view.json放在同一个目录,不然要加上完整路径
public class CombinedChart {
//    @TextString
//    String title;
//    @BackgroundColorHex(value = 0xfff)
//    int backgroundColor;
    @AddSeries
    LineChart lineChart;
    @AddSeries
    Line2Chart line2Chart;
    @AddSeries
    BarChart barChart;

    public CombinedChart(String title) {
//        this.title = title;//使用view.json提供的值
        lineChart = new LineChart();
        lineChart.setName("折线图");
        lineChart.setData(new double[]{1,2,3,4});
        line2Chart = new Line2Chart();
        line2Chart.setName("折线图二");
        line2Chart.setData(new double[]{1,2,3,4});
        barChart = new BarChart();
        barChart.setName("条形图");
        barChart.setData(new double[]{5,6,7,8});
    }
}

######调用图表处理器

public class EChartsTest {
    public static void main(String[] args) {
        Object json=EChartsAnnotationProcessor.parseChart(new CombinedChart("组合图表"));
        System.out.print(JSON.toJSONString(json));
    }
}

7导出json文件
导出json文件供其它图表继承

@DuplexChart(exportTo = "templates/view.json")//调用图表处理器解析的同时,导出json文件
@SingleChart(exportTo = "templates/view.json")//不建议和DuplexChart注解在同一个类中使用

8添加Function

import com.alibaba.fastjson.JSONAware;
public class Function implements JSONAware{//实现JSONAware接口
    String method;
    String arguments;
    String body;
    
    public Function(String method, String arguments, String body) {
        this.method = method;
        this.arguments = arguments;
        this.body = body;
    }
    @Override
    public String toJSONString() {
        return "function "+method+" ("+arguments+"){\n"+body+"\n}";
    }
}

9测试

import com.alibaba.fastjson.JSON;

public class ECharts {
    public static void main(String[] args) {
        Function function=new Function("toString","str","alert();");
        System.out.println(JSON.toJSONString(function));
    }
}

##写在最后 项目进度已基本完成,后期除了bug fix,不会再有大修改。请放心集成! Taglib项目 电梯

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].