/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * 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 org.dashbuilder.renderer.lienzo.client; import java.util.ArrayList; import java.util.List; import com.ait.lienzo.charts.client.core.AbstractChart; import com.ait.lienzo.charts.client.core.resizer.ChartResizeEvent; import com.ait.lienzo.charts.client.core.resizer.ChartResizeEventHandler; import com.ait.lienzo.client.core.animation.AnimationTweener; import com.ait.lienzo.client.core.shape.Layer; import com.ait.lienzo.client.widget.LienzoPanel; import com.ait.lienzo.shared.core.types.ColorName; import com.ait.lienzo.shared.core.types.IColor; import org.dashbuilder.dataset.ColumnType; public abstract class LienzoCategoriesDisplayerView<P extends LienzoDisplayer, C extends AbstractChart> extends LienzoDisplayerView<P> { public static final ColorName[] DEFAULT_SERIE_COLORS = new ColorName[] { ColorName.DEEPSKYBLUE, ColorName.RED, ColorName.YELLOWGREEN }; public static final int PANEL_MARGIN = 50; public static final String PIXEL = "px"; public static final int ANIMATION_DURATION = 500; private C chart = null; private Layer layer = new Layer(); private LienzoPanel chartPanel = new LienzoPanel(); @Override public void showTitle(String title) { super.showTitle(title); chart.setX(0).setY(0).setName(title); } @Override public void drawChart() { chart = _createChart(); configureChart(chart); layer.setTransformable(true); layer.add(chart); chartPanel.add(layer); resizePanel(width, height); super.showDisplayer(chartPanel); layer.draw(); } @Override public void reloadChart() { _reloadChart(chart); super.showDisplayer(chartPanel); } protected abstract C _createChart(); protected abstract void _reloadChart(C chart); protected void configureChart(C chart) { chart.setWidth(width); chart.setHeight(height); chart.setMarginLeft(marginLeft); chart.setMarginRight(marginRight); chart.setMarginTop(marginTop); chart.setMarginBottom(marginBottom); chart.setFontFamily(fontFamily); chart.setFontStyle(fontStyle); chart.setFontSize(fontSize); chart.setShowTitle(true); // TODO: Bug in Lienzo charting -> If title not visible -> javascript error (nullpointer) chart.setResizable(resizeEnabled); if (resizeEnabled) { chart.addChartResizeEventHandler(new ChartResizeEventHandler() { public void onChartResize(ChartResizeEvent event) { resizePanel((int) event.getWidth(), (int) event.getHeight()); } }); } chart.draw(); // Create the Chart using animations. chart.init(AnimationTweener.LINEAR, ANIMATION_DURATION); } protected void resizePanel(int w, int h) { String _w = w + PANEL_MARGIN + PIXEL; String _h = h + PANEL_MARGIN + PIXEL; chartPanel.setSize(_w, _h); } protected IColor getSeriesColor(int index) { int defaultColorsSize = DEFAULT_SERIE_COLORS.length; if (index >= defaultColorsSize) { return ColorName.getValues().get(90 + index*2); } return DEFAULT_SERIE_COLORS[index]; } // Data generation protected Column categoriesColumn = null; protected List<Column> seriesColumnList = new ArrayList<Column>(); class Column { String columnId; String columnName; ColumnType columnType; public Column(String columnId, String columnName, ColumnType columnType) { this.columnId = columnId; this.columnName = columnName; this.columnType = columnType; } } @Override public void dataClear() { super.dataClear(); categoriesColumn = null; seriesColumnList.clear(); } @Override public void dataAddColumn(String columnId, String columnName, ColumnType columnType) { super.dataAddColumn(columnId, columnName, columnType); Column newColumn = new Column(columnId, columnName, columnType); if (categoriesColumn == null) { categoriesColumn = newColumn; } else { seriesColumnList.add(newColumn); } } }