/*
* Copyright 2017 TWO SIGMA OPEN SOURCE, LLC
*
* 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.twosigma.beaker.chart;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.twosigma.beaker.chart.categoryplot.CategoryPlot;
import com.twosigma.beaker.chart.categoryplot.plotitem.CategoryBars;
import com.twosigma.beaker.chart.categoryplot.plotitem.CategoryLines;
import com.twosigma.beaker.chart.categoryplot.plotitem.CategoryPoints;
import com.twosigma.beaker.chart.categoryplot.plotitem.CategoryStems;
import com.twosigma.beaker.chart.heatmap.HeatMap;
import com.twosigma.beaker.chart.histogram.Histogram;
import com.twosigma.beaker.chart.legend.LegendPosition;
import com.twosigma.beaker.chart.serializer.AreaSerializer;
import com.twosigma.beaker.chart.serializer.BarsSerializer;
import com.twosigma.beaker.chart.serializer.CategoryBarsSerializer;
import com.twosigma.beaker.chart.serializer.CategoryLinesSerializer;
import com.twosigma.beaker.chart.serializer.CategoryPlotSerializer;
import com.twosigma.beaker.chart.serializer.CategoryPointsSerializer;
import com.twosigma.beaker.chart.serializer.CategoryStemsSerializer;
import com.twosigma.beaker.chart.serializer.ColorSerializer;
import com.twosigma.beaker.chart.serializer.CombinedPlotSerializer;
import com.twosigma.beaker.chart.serializer.ConstantBandSerializer;
import com.twosigma.beaker.chart.serializer.ConstantLineSerializer;
import com.twosigma.beaker.chart.serializer.CrosshairSerializer;
import com.twosigma.beaker.chart.serializer.GradientColorSerializer;
import com.twosigma.beaker.chart.serializer.HeatMapSerializer;
import com.twosigma.beaker.chart.serializer.HistogramSerializer;
import com.twosigma.beaker.chart.serializer.LegendPositionSerializer;
import com.twosigma.beaker.chart.serializer.LineSerializer;
import com.twosigma.beaker.chart.serializer.PointsSerializer;
import com.twosigma.beaker.chart.serializer.RastersSerializer;
import com.twosigma.beaker.chart.serializer.StemsSerializer;
import com.twosigma.beaker.chart.serializer.TextSerializer;
import com.twosigma.beaker.chart.serializer.XYChartSerializer;
import com.twosigma.beaker.chart.serializer.YAxisSerializer;
import com.twosigma.beaker.chart.xychart.CombinedPlot;
import com.twosigma.beaker.chart.xychart.XYChart;
import com.twosigma.beaker.chart.xychart.plotitem.Area;
import com.twosigma.beaker.chart.xychart.plotitem.Bars;
import com.twosigma.beaker.chart.xychart.plotitem.ConstantBand;
import com.twosigma.beaker.chart.xychart.plotitem.ConstantLine;
import com.twosigma.beaker.chart.xychart.plotitem.Crosshair;
import com.twosigma.beaker.chart.xychart.plotitem.Line;
import com.twosigma.beaker.chart.xychart.plotitem.Points;
import com.twosigma.beaker.chart.xychart.plotitem.Rasters;
import com.twosigma.beaker.chart.xychart.plotitem.Stems;
import com.twosigma.beaker.chart.xychart.plotitem.Text;
import com.twosigma.beaker.chart.xychart.plotitem.YAxis;
import com.twosigma.beaker.chart.treemap.TreeMap;
import com.twosigma.beaker.chart.serializer.TreeMapSerializer;
import com.twosigma.beaker.chart.serializer.TreeMapNodeSerializer;
import net.sf.jtreemap.swing.TreeMapNode;
import java.util.Hashtable;
import java.util.Map;
public class ChartToJson {
private static ObjectMapper mapper;
private static Map<Class<?>, JsonSerializer> serializerMap = new Hashtable<>();
static {
serializerMap.put(Color.class, new ColorSerializer());
serializerMap.put(XYChart.class, new XYChartSerializer());
serializerMap.put(CombinedPlot.class, new CombinedPlotSerializer());
serializerMap.put(Line.class, new LineSerializer());
serializerMap.put(Points.class, new PointsSerializer());
serializerMap.put(Bars.class, new BarsSerializer());
serializerMap.put(Stems.class, new StemsSerializer());
serializerMap.put(Area.class, new AreaSerializer());
serializerMap.put(YAxis.class, new YAxisSerializer());
serializerMap.put(Crosshair.class, new CrosshairSerializer());
serializerMap.put(LegendPosition.class, new LegendPositionSerializer());
serializerMap.put(Text.class, new TextSerializer());
serializerMap.put(ConstantLine.class, new ConstantLineSerializer());
serializerMap.put(ConstantBand.class, new ConstantBandSerializer());
serializerMap.put(CategoryBars.class, new CategoryBarsSerializer());
serializerMap.put(CategoryStems.class, new CategoryStemsSerializer());
serializerMap.put(CategoryPoints.class, new CategoryPointsSerializer());
serializerMap.put(CategoryLines.class, new CategoryLinesSerializer());
serializerMap.put(CategoryPlot.class, new CategoryPlotSerializer());
serializerMap.put(GradientColor.class, new GradientColorSerializer());
serializerMap.put(Histogram.class, new HistogramSerializer());
serializerMap.put(HeatMap.class, new HeatMapSerializer());
serializerMap.put(Rasters.class, new RastersSerializer());
serializerMap.put(TreeMap.class, new TreeMapSerializer());
serializerMap.put(TreeMapNode.class, new TreeMapNodeSerializer());
SimpleModule module = new SimpleModule("ChartSerializer", new Version(1, 0, 0, null));
serializerMap.forEach((k, v) -> {
module.addSerializer(k, v);
});
mapper = new ObjectMapper();
mapper.registerModule(module);
}
public static Map toJson(Object result) {
return getMapper().convertValue(result, Map.class);
}
private static ObjectMapper getMapper() {
return mapper;
}
}