/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 ro.nextreports.designer.chart; import com.l2fprod.common.propertysheet.PropertySheetPanel; import com.l2fprod.common.propertysheet.PropertyEditorRegistry; import com.l2fprod.common.propertysheet.Property; import com.l2fprod.common.propertysheet.DefaultProperty; import com.l2fprod.common.beans.editor.ComboBoxPropertyEditor; import ro.nextreports.engine.chart.ChartTitle; import ro.nextreports.engine.chart.Chart; import ro.nextreports.engine.chart.ChartType; import ro.nextreports.engine.util.NameType; import ro.nextreports.engine.exporter.util.function.FunctionFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import ro.nextreports.designer.Globals; import ro.nextreports.designer.property.ExtendedColorPropertyEditor; import ro.nextreports.designer.property.FieldPatternPropertyEditor; import ro.nextreports.designer.property.SqlPropertyEditor; import ro.nextreports.designer.util.I18NSupport; import ro.nextreports.designer.util.ImageUtil; import ro.nextreports.designer.util.Show; import javax.swing.*; import java.beans.PropertyChangeEvent; import java.awt.*; import java.util.List; import java.util.*; /** * User: mihai.panaitescu * Date: 15-Dec-2009 * Time: 13:30:08 */ public class ChartPropertyPanel extends PropertySheetPanel { public static final int TITLE_CATEGORY = 1; public static final int MAIN_CATEGORY = 2; public static final int XCOLUMN_CATEGORY = 4; public static final int YCOLUMN_CATEGORY = 8; private String TITLE_TEXT = "TITLE_TEXT"; private String TITLE_TEXT_PARAM_NAME = I18NSupport.getString("property.text"); private String TITLE_FONT = "TITLE_FONT"; private String MAIN_FONT = "MAIN_FONT"; private String FONT_PARAM_NAME = I18NSupport.getString("property.font"); private String TITLE_FOREGROUND = "TITLE_FOREGROUND"; private String TITLE_FOREGROUND_PARAM_NAME = I18NSupport.getString("property.foreground"); private String TITLE_ALIGNMENT = "TITLE_ALIGNMENT"; private String ALIGNMENT_PARAM_NAME = I18NSupport.getString("property.allignment"); private String CHART_BACKGROUND = "CHART_BACKGROUND"; private String BACKGROUND_PARAM_NAME = I18NSupport.getString("property.background"); private String CHART_TYPE = "CHART_TYPE"; private String TYPE_PARAM_NAME = I18NSupport.getString("property.chart.type"); private String CHART_STYLE = "CHART_STYLE"; private String STYLE_PARAM_NAME = I18NSupport.getString("property.chart.style"); private String CHART_TRANSPARENCY = "CHART_TRANSPARENCY"; private String TRANSPARENCY_PARAM_NAME = I18NSupport.getString("property.chart.transparency"); private String STYLE_GRID_X = "STYLR_GRID_X"; private String STYLE_GRID_Y = "STYLR_GRID_Y"; private String STYLE_GRID_PARAM_NAME = I18NSupport.getString("property.style.grid"); private String TOOLTIP_MESSAGE = "TOOLTIP_MESSAGE"; private String TOOLTIP_MESSAGE_PARAM_NAME = I18NSupport.getString("property.chart.message"); private String CHART_FOREGROUND = "CHART_FOREGROUND"; private String CHART_FOREGROUND_2 = "CHART_FOREGROUND_2"; private String CHART_FOREGROUND_3 = "CHART_FOREGROUND_3"; private String CHART_FOREGROUND_4 = "CHART_FOREGROUND_4"; private String CHART_FOREGROUND_5 = "CHART_FOREGROUND_5"; private String CHART_FOREGROUND_6 = "CHART_FOREGROUND_6"; private String CHART_FOREGROUND_7 = "CHART_FOREGROUND_7"; private String CHART_FOREGROUND_8 = "CHART_FOREGROUND_8"; private String CHART_FOREGROUND_9 = "CHART_FOREGROUND_9"; private String CHART_FOREGROUND_10 = "CHART_FOREGROUND_10"; private String FOREGROUND_PARAM_NAME = I18NSupport.getString("property.chart.color"); private String X_AXIS_COLOR = "X_AXIS_COLOR"; private String Y_AXIS_COLOR = "Y_AXIS_COLOR"; private String X_AXIS_LABEL_FONT = "X_AXIS_LABEL_FONT"; private String Y_AXIS_LABEL_FONT = "Y_AXIS_LABEL_FONT"; private String X_COLUMN_COL = "X_COLUMN_COL"; private String Y_COLUMN_COL = "Y_COLUMN_COL"; private String Y_COLUMN_COL_2 = "Y_COLUMN_COL_2"; private String Y_COLUMN_COL_3 = "Y_COLUMN_COL_3"; private String Y_COLUMN_COL_4 = "Y_COLUMN_COL_4"; private String Y_COLUMN_COL_5 = "Y_COLUMN_COL_5"; private String Y_COLUMN_COL_6 = "Y_COLUMN_COL_6"; private String Y_COLUMN_COL_7 = "Y_COLUMN_COL_7"; private String Y_COLUMN_COL_8 = "Y_COLUMN_COL_8"; private String Y_COLUMN_COL_9 = "Y_COLUMN_COL_9"; private String Y_COLUMN_COL_10 = "Y_COLUMN_COL_10"; private String COLUMN_COL_PARAM_NAME = I18NSupport.getString("property.chart.column.col"); private String Y_DYNAMIC_COLUMN_QUERY = "Y_DYNAMIC_COLUMN_QUERY"; private String Y_DYNAMIC_COL_PARAM_NAME = I18NSupport.getString("property.chart.column.col.dynamic"); private String Y_COLUMN_LEGEND = "Y_COLUMN_LEGEND"; private String Y_COLUMN_LEGEND_2 = "Y_COLUMN_LEGEND_2"; private String Y_COLUMN_LEGEND_3 = "Y_COLUMN_LEGEND_3"; private String Y_COLUMN_LEGEND_4 = "Y_COLUMN_LEGEND_4"; private String Y_COLUMN_LEGEND_5 = "Y_COLUMN_LEGEND_5"; private String Y_COLUMN_LEGEND_6 = "Y_COLUMN_LEGEND_6"; private String Y_COLUMN_LEGEND_7 = "Y_COLUMN_LEGEND_7"; private String Y_COLUMN_LEGEND_8 = "Y_COLUMN_LEGEND_8"; private String Y_COLUMN_LEGEND_9 = "Y_COLUMN_LEGEND_9"; private String Y_COLUMN_LEGEND_10 = "Y_COLUMN_LEGEND_10"; private String COLUMN_LEGEND_PARAM_NAME = I18NSupport.getString("property.chart.column.legend"); private String X_COLUMN_COLOR = "X_COLUMN_COLOR"; private String Y_COLUMN_COLOR = "Y_COLUMN_COLOR"; private String COLUMN_COLOR_PARAM_NAME = I18NSupport.getString("property.chart.column.color"); private String X_COLUMN_ORIENTATION = "X_COLUMN_ORIENTATION"; private String COLUMN_ORIENTATION_PARAM_NAME = I18NSupport.getString("property.chart.column.orientation"); private String X_LEGEND_TEXT = "X_LEGEND_TEXT"; private String Y_LEGEND_TEXT = "Y_LEGEND_TEXT"; private String LEGEND_PARAM_NAME = I18NSupport.getString("property.chart.legend"); private String X_LEGEND_FONT = "X_LEGEND_FONT"; private String Y_LEGEND_FONT = "Y_LEGEND_FONT"; private String X_LEGEND_COLOR = "X_LEGEND_COLOR"; private String Y_LEGEND_COLOR = "Y_LEGEND_COLOR"; private String X_LEGEND_ALIGNMENT = "X_LEGEND_ALIGNMENT"; private String Y_LEGEND_ALIGNMENT = "Y_LEGEND_ALIGNMENT"; private String Y_DUAL_LEGEND_TEXT = "Y_DUAL_LEGEND_TEXT"; private String Y_DUAL_LEGEND_FONT = "Y_DUAL_LEGEND_FONT"; private String Y_DUAL_LEGEND_COLOR = "Y_DUAL_LEGEND_COLOR"; private String Y2COUNT_PARAM_NAME = I18NSupport.getString("property.chart.y2Count"); private String Y2COUNT_LABEL = "Y2COUNT"; private String X_PATTERN = "X_PATTERN"; private String X_PATTERN_PARAM_NAME = I18NSupport.getString("property.pattern"); private String GRID_COLOR_PARAM_NAME = I18NSupport.getString("property.chart.grid.color"); private String X_GRID_COLOR = "X_GRID_COLOR"; private String Y_GRID_COLOR = "Y_GRID_COLOR"; private String X_SHOW_GRID = "X_SHOW_GRID"; private String Y_SHOW_GRID = "Y_SHOW_GRID"; private String SHOW_GRID_NAME = I18NSupport.getString("property.chart.grid.show"); private String X_SHOW_LABEL = "X_SHOW_LABEL"; private String Y_SHOW_LABEL = "Y_SHOW_LABEL"; private String SHOW_LABEL_NAME = I18NSupport.getString("property.chart.column.show"); private String SHOW_Y_VALUES_LABEL = "Y_SHOW_VALUES"; private String SHOW_Y_VALUES_NAME = I18NSupport.getString("property.chart.values.show"); private String STARTING_FROM_ZERO_LABEL = "STARTING_FROM_ZERO"; private String STARTING_FROM_ZERO_NAME = I18NSupport.getString("property.chart.values.startingFromZero"); private String SHOW_Y_DUAL_AXIS_LABEL = "Y_SHOW_DUAL_AXIS"; private String SHOW_Y_DUAL_AXIS_NAME = I18NSupport.getString("property.chart.dualAxis.show"); private String Y_TOOLTIP_PATTERN = "Y_TOOLTIP_PATTERN"; private String Y_TOOLTIP_PATTERN_PARAM_NAME = I18NSupport.getString("property.pattern"); private String CENTER = I18NSupport.getString("property.allignment.center"); private String LEFT = I18NSupport.getString("property.allignment.left"); private String RIGHT = I18NSupport.getString("property.allignment.right"); private String BAR = I18NSupport.getString("new.chart.bar"); private String NEGATIVE_BAR = I18NSupport.getString("new.chart.negativebar"); private String BAR_COMBO = I18NSupport.getString("new.chart.bar.combo"); private String HORIZONTAL_BAR = I18NSupport.getString("new.chart.horizontalbar"); private String STACKED_BAR = I18NSupport.getString("new.chart.stackedbar"); private String STACKED_BAR_COMBO = I18NSupport.getString("new.chart.stackedbar.combo"); private String HORIZONTAL_STACKED_BAR = I18NSupport.getString("new.chart.horizontalstackedbar"); private String PIE = I18NSupport.getString("new.chart.pie"); private String LINE = I18NSupport.getString("new.chart.line"); private String AREA = I18NSupport.getString("new.chart.area"); private String BUBBLE = I18NSupport.getString("new.chart.bubble"); private String STYLE_NORMAL = I18NSupport.getString("new.chart.style"); private String STYLE_BAR_GLASS = I18NSupport.getString("new.chart.style.bar.glass"); private String STYLE_BAR_CYLINDER = I18NSupport.getString("new.chart.style.bar.cylinder"); private String STYLE_BAR_PARALLELIPIPED = I18NSupport.getString("new.chart.style.bar.parallelipiped"); private String STYLE_BAR_DOME = I18NSupport.getString("new.chart.style.bar.dome"); private String STYLE_LINE_DOT_ANCHOR = I18NSupport.getString("new.chart.style.line.dot.anchor"); private String STYLE_LINE_DOT_BOW = I18NSupport.getString("new.chart.style.line.dot.bow"); private String STYLE_LINE_DOT_STAR = I18NSupport.getString("new.chart.style.line.dot.start"); private String STYLE_LINE_DOT_SOLID = I18NSupport.getString("new.chart.style.line.dot.solid"); private String STYLE_LINE_DOT_HOLLOW = I18NSupport.getString("new.chart.style.line.dot.hollow"); private String ORIENTATION_HORIZONTAL = I18NSupport.getString("new.chart.label.orientation.horizontal"); private String ORIENTATION_VERTICAL = I18NSupport.getString("new.chart.label.orientation.vertical"); private String ORIENTATION_DIAGONAL = I18NSupport.getString("new.chart.label.orientation.diagonal"); private String ORIENTATION_HALF_DIAGONAL = I18NSupport.getString("new.chart.label.orientation.diagonal.half"); private String NONE_TRANSPARENCY = I18NSupport.getString("new.chart.transparency.none"); private String LOW_TRANSPARENCY = I18NSupport.getString("new.chart.transparency.low"); private String AVG_TRANSPARENCY = I18NSupport.getString("new.chart.transparency.average"); private String HIGH_TRANSPARENCY = I18NSupport.getString("new.chart.transparency.high"); private String LINE_STYLE_LINE = I18NSupport.getString("property.lineStyle.line"); private String LINE_STYLE_DOT = I18NSupport.getString("property.lineStyle.dot"); private String LINE_STYLE_DASH = I18NSupport.getString("property.lineStyle.dash"); private String X_GRID_STYLE = "X_GRID_STYLE"; private String Y_GRID_STYLE = "Y_GRID_STYLE"; private Property xAxisColumnProperty; private Property yAxisColumnProperty; private Property styleProperty; private PropertyEditorRegistry editorRegistry; private Chart chart; private List<NameType> columns = new ArrayList<NameType>(); private static Log LOG = LogFactory.getLog(ChartPropertyPanel.class); public ChartPropertyPanel() { this(new Chart()); } public ChartPropertyPanel(Chart chart) { super(); setDescriptionVisible(false); setToolBarVisible(false); setMode(PropertySheetPanel.VIEW_AS_CATEGORIES); editorRegistry = (PropertyEditorRegistry) getEditorFactory(); this.chart = chart; List<Property> props = getFilteredProperties(); setProperties(props.toArray(new Property[props.size()])); } @Override public void propertyChange(PropertyChangeEvent event) { Property prop = (Property) event.getSource(); String propName = prop.getName(); ChartTitle chartTitle = chart.getTitle(); ChartLayoutPanel layoutPanel = Globals.getChartLayoutPanel(); try { if (TITLE_TEXT.equals(propName)) { String propValue = (String) prop.getValue(); chartTitle.setTitle(propValue); layoutPanel.setTitle(propValue); } else if (TITLE_FONT.equals(propName)) { Font propValue = (Font) prop.getValue(); chartTitle.setFont(propValue); layoutPanel.setTitleFont(propValue); } else if (TITLE_FOREGROUND.equals(propName)) { Color propValue = (Color) prop.getValue(); chartTitle.setColor(propValue); layoutPanel.setTitleColor(propValue); } else if (TITLE_ALIGNMENT.equals(propName)) { String propValue = (String) prop.getValue(); byte alignment = getAlignment(propValue); chartTitle.setAlignment(alignment); layoutPanel.setTitleAlignment(alignment); } else if (CHART_BACKGROUND.equals(propName)) { Color propValue = (Color) prop.getValue(); chart.setBackground(propValue); layoutPanel.setMainBackground(propValue); } else if (CHART_FOREGROUND.equals(propName)) { adjustForegroundColors(prop, 0); } else if (CHART_FOREGROUND_2.equals(propName)) { adjustForegroundColors(prop, 1); } else if (CHART_FOREGROUND_3.equals(propName)) { adjustForegroundColors(prop, 2); } else if (CHART_FOREGROUND_4.equals(propName)) { adjustForegroundColors(prop, 3); } else if (CHART_FOREGROUND_5.equals(propName)) { adjustForegroundColors(prop, 4); } else if (CHART_FOREGROUND_6.equals(propName)) { adjustForegroundColors(prop, 5); } else if (CHART_FOREGROUND_7.equals(propName)) { adjustForegroundColors(prop, 6); } else if (CHART_FOREGROUND_8.equals(propName)) { adjustForegroundColors(prop, 7); } else if (CHART_FOREGROUND_9.equals(propName)) { adjustForegroundColors(prop, 8); } else if (CHART_FOREGROUND_10.equals(propName)) { adjustForegroundColors(prop, 9); } else if (CHART_TYPE.equals(propName)) { String type = (String) prop.getValue(); ChartType chartType = getChartType(type); chart.setType(chartType); layoutPanel.setType(chartType.getType()); updateStyleProperty(); } else if (CHART_STYLE.equals(propName)) { String style = (String) prop.getValue(); chart.getType().setStyle(getStyle(style)); } else if (CHART_TRANSPARENCY.equals(propName)) { String transparency = (String) prop.getValue(); chart.setTransparency(getTransparency(transparency)); } else if (STYLE_GRID_X.equals(propName)) { String style = (String) prop.getValue(); chart.setStyleGridX(getGridStyle(style)); } else if (STYLE_GRID_Y.equals(propName)) { String style = (String) prop.getValue(); chart.setStyleGridY(getGridStyle(style)); } else if (TOOLTIP_MESSAGE.equals(propName)) { String message = (String) prop.getValue(); chart.setTooltipMessage(message); } else if (X_AXIS_COLOR.equals(propName)) { Color color = (Color) prop.getValue(); chart.setxAxisColor(color); } else if (X_COLUMN_COL.equals(propName)) { String column = (String) prop.getValue(); chart.setXColumn(column); layoutPanel.setXColumn(column); } else if (X_COLUMN_COLOR.equals(propName)) { Color color = (Color) prop.getValue(); chart.setXColor(color); layoutPanel.setXColor(color); } else if (X_COLUMN_ORIENTATION.equals(propName)) { String orientation = (String) prop.getValue(); chart.setXorientation(getXOrientation(orientation)); } else if (X_AXIS_LABEL_FONT.equals(propName)) { Font font = (Font) prop.getValue(); chart.setXLabelFont(font); } else if (X_LEGEND_TEXT.equals(propName)) { String legend = (String) prop.getValue(); chart.getXLegend().setTitle(legend); } else if (X_LEGEND_FONT.equals(propName)) { Font font = (Font) prop.getValue(); chart.getXLegend().setFont(font); } else if (X_LEGEND_COLOR.equals(propName)) { Color color = (Color) prop.getValue(); chart.getXLegend().setColor(color); } else if (X_LEGEND_ALIGNMENT.equals(propName)) { String propValue = (String) prop.getValue(); byte alignment = getAlignment(propValue); chart.getXLegend().setAlignment(alignment); } else if (X_PATTERN.equals(propName)) { String propValue = (String) prop.getValue(); chart.setXPattern(propValue); } else if (X_GRID_COLOR.equals(propName)) { Color propValue = (Color) prop.getValue(); chart.setXGridColor(propValue); } else if (X_SHOW_GRID.equals(propName)) { Boolean propValue = (Boolean) prop.getValue(); chart.setXShowGrid(propValue); } else if (X_SHOW_LABEL.equals(propName)) { Boolean propValue = (Boolean) prop.getValue(); chart.setXShowLabel(propValue); } else if (Y_AXIS_COLOR.equals(propName)) { Color color = (Color) prop.getValue(); chart.setyAxisColor(color); } else if (Y_COLUMN_COL.equals(propName)) { String column = (String) prop.getValue(); adjustYColumns(prop, 0); layoutPanel.setYColumn(column); } else if (Y_COLUMN_COL_2.equals(propName)) { adjustYColumns(prop, 1); } else if (Y_COLUMN_COL_3.equals(propName)) { adjustYColumns(prop, 2); } else if (Y_COLUMN_COL_4.equals(propName)) { adjustYColumns(prop, 3); } else if (Y_COLUMN_COL_5.equals(propName)) { adjustYColumns(prop, 4); } else if (Y_COLUMN_COL_6.equals(propName)) { adjustYColumns(prop, 5); } else if (Y_COLUMN_COL_7.equals(propName)) { adjustYColumns(prop, 6); } else if (Y_COLUMN_COL_8.equals(propName)) { adjustYColumns(prop, 7); } else if (Y_COLUMN_COL_9.equals(propName)) { adjustYColumns(prop, 8); } else if (Y_COLUMN_COL_10.equals(propName)) { adjustYColumns(prop, 9); } else if (Y_DYNAMIC_COLUMN_QUERY.equals(propName)) { String query = (String) prop.getValue(); chart.setYColumnQuery(query); } else if (Y_COLUMN_LEGEND.equals(propName)) { adjustYColumnsLegends(prop, 0); } else if (Y_COLUMN_LEGEND_2.equals(propName)) { adjustYColumnsLegends(prop, 1); } else if (Y_COLUMN_LEGEND_3.equals(propName)) { adjustYColumnsLegends(prop, 2); } else if (Y_COLUMN_LEGEND_4.equals(propName)) { adjustYColumnsLegends(prop, 3); } else if (Y_COLUMN_LEGEND_5.equals(propName)) { adjustYColumnsLegends(prop, 4); } else if (Y_COLUMN_LEGEND_6.equals(propName)) { adjustYColumnsLegends(prop, 5); } else if (Y_COLUMN_LEGEND_7.equals(propName)) { adjustYColumnsLegends(prop, 6); } else if (Y_COLUMN_LEGEND_8.equals(propName)) { adjustYColumnsLegends(prop, 7); } else if (Y_COLUMN_LEGEND_9.equals(propName)) { adjustYColumnsLegends(prop, 8); } else if (Y_COLUMN_LEGEND_10.equals(propName)) { adjustYColumnsLegends(prop, 9); } else if (Y_COLUMN_COLOR.equals(propName)) { Color color = (Color) prop.getValue(); chart.setYColor(color); layoutPanel.setYColor(color); } else if (Y_LEGEND_TEXT.equals(propName)) { String legend = (String) prop.getValue(); chart.getYLegend().setTitle(legend); } else if (Y_LEGEND_FONT.equals(propName)) { Font font = (Font) prop.getValue(); chart.getYLegend().setFont(font); } else if (Y_LEGEND_COLOR.equals(propName)) { Color color = (Color) prop.getValue(); chart.getYLegend().setColor(color); } else if (Y_LEGEND_ALIGNMENT.equals(propName)) { String propValue = (String) prop.getValue(); byte alignment = getAlignment(propValue); chart.getYLegend().setAlignment(alignment); } else if (Y_DUAL_LEGEND_TEXT.equals(propName)) { String legend = (String) prop.getValue(); chart.getyDualLegend().setTitle(legend); } else if (Y_DUAL_LEGEND_FONT.equals(propName)) { Font font = (Font) prop.getValue(); chart.getyDualLegend().setFont(font); } else if (Y_DUAL_LEGEND_COLOR.equals(propName)) { Color color = (Color) prop.getValue(); chart.getyDualLegend().setColor(color); } else if (Y_GRID_COLOR.equals(propName)) { Color propValue = (Color) prop.getValue(); chart.setYGridColor(propValue); } else if (Y_SHOW_GRID.equals(propName)) { Boolean propValue = (Boolean) prop.getValue(); chart.setYShowGrid(propValue); } else if (Y_SHOW_LABEL.equals(propName)) { Boolean propValue = (Boolean) prop.getValue(); chart.setYShowLabel(propValue); } else if (Y_AXIS_LABEL_FONT.equals(propName)) { Font font = (Font) prop.getValue(); chart.setYLabelFont(font); } else if (SHOW_Y_VALUES_LABEL.equals(propName)) { Boolean propValue = (Boolean) prop.getValue(); chart.setShowYValuesOnChart(propValue); } else if (STARTING_FROM_ZERO_LABEL.equals(propName)) { Boolean propValue = (Boolean) prop.getValue(); chart.setStartingFromZero(propValue); } else if (SHOW_Y_DUAL_AXIS_LABEL.equals(propName)) { Boolean propValue = (Boolean) prop.getValue(); chart.setShowDualAxis(propValue); } else if (Y2COUNT_LABEL.equals(propName)) { Integer propValue = (Integer) prop.getValue(); chart.setY2SeriesCount(propValue); } else if (Y_TOOLTIP_PATTERN.equals(propName)) { String propValue = (String) prop.getValue(); chart.setYTooltipPattern(propValue); } else if (MAIN_FONT.equals(propName)) { Font propValue = (Font) prop.getValue(); chart.setFont(propValue); } } catch (Exception e) { LOG.error(e.getMessage(), e); } } private void adjustForegroundColors(Property prop, int index) { Color propValue = (Color) prop.getValue(); List<Color> color = chart.getForegrounds(); if (color.size() > index) { color.set(index, propValue); } else { color.add(index, propValue); } chart.setForegrounds(color); } private void adjustYColumns(Property prop, int index) { String propValue = (String) prop.getValue(); List<String> columns = chart.getYColumns(); if (columns.size() > index) { columns.set(index, propValue); } else if (index > columns.size()) { prop.setValue(null); return; } else { columns.add(index, propValue); } // if already a numeric function is selected we do not allow for non-numeric columns // for first column (index == 0) the function is modified to COUNT if (index > 0) { if (Globals.getChartLayoutPanel().getMarked(propValue) && !FunctionFactory.isCountFunction(chart.getYFunction())) { prop.setValue(null); Show.info(I18NSupport.getString("chart.undefined.ycolumn.type")); return; } } chart.setYColumns(columns); } private void adjustYColumnsLegends(Property prop, int index) { String propValue = (String) prop.getValue(); List<String> legends = chart.getYColumnsLegends(); if (legends.size() > index) { legends.set(index, propValue); } else if (index > legends.size()) { prop.setValue(null); return; } else { legends.add(index, propValue); } chart.setYColumnsLegends(legends); } public void selectProperties(int category) { List<Property> props = getFilteredProperties(category); setProperties(props.toArray(new Property[props.size()])); } public void refresh() { setProperties(new Property[0]); } public Chart getChart() { return chart; } public void setChart(Chart chart) { this.chart = chart; List<Property> props = getFilteredProperties(); setProperties(props.toArray(new Property[props.size()])); } private Property getTitleTextProperty() { DefaultProperty textProp = new DefaultProperty(); textProp.setName(TITLE_TEXT); textProp.setDisplayName(TITLE_TEXT_PARAM_NAME); textProp.setType(String.class); textProp.setValue(chart.getTitle().getTitle()); textProp.setCategory(I18NSupport.getString("property.category.chart.title")); return textProp; } private Property getYDynamicColumnQueryProperty() { DefaultProperty queryProp = new DefaultProperty(); queryProp.setName(Y_DYNAMIC_COLUMN_QUERY); queryProp.setDisplayName(Y_DYNAMIC_COL_PARAM_NAME); queryProp.setType(String.class); queryProp.setValue(chart.getYColumnQuery()); queryProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); SqlPropertyEditor sqlEditor = new SqlPropertyEditor(); editorRegistry.registerEditor(queryProp, sqlEditor); return queryProp; } private Property getTitleFontProperty() { DefaultProperty fontProp = new DefaultProperty(); fontProp.setName(TITLE_FONT); fontProp.setDisplayName(FONT_PARAM_NAME); fontProp.setType(Font.class); fontProp.setValue(chart.getTitle().getFont()); fontProp.setCategory(I18NSupport.getString("property.category.chart.title")); return fontProp; } private Property getTitleForegroundProperty() { DefaultProperty foregroundProp = new DefaultProperty(); foregroundProp.setName(TITLE_FOREGROUND); foregroundProp.setDisplayName(TITLE_FOREGROUND_PARAM_NAME); foregroundProp.setType(Color.class); foregroundProp.setValue(chart.getTitle().getColor()); foregroundProp.setCategory(I18NSupport.getString("property.category.chart.title")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(foregroundProp, colorEditor); return foregroundProp; } private Property getTitleAlignmentProperty() { DefaultProperty alignmentProp = new DefaultProperty(); alignmentProp.setName(TITLE_ALIGNMENT); alignmentProp.setDisplayName(ALIGNMENT_PARAM_NAME); alignmentProp.setType(String.class); ComboBoxPropertyEditor alignmentEditor = new ComboBoxPropertyEditor(); alignmentEditor.setAvailableValues(new String[]{LEFT, CENTER, RIGHT}); byte alignment = chart.getTitle().getAlignment(); setAlignment(alignment, alignmentProp); alignmentProp.setCategory(I18NSupport.getString("property.category.chart.title")); editorRegistry.registerEditor(alignmentProp, alignmentEditor); return alignmentProp; } private Property getBackgroundProperty() { DefaultProperty foregroundProp = new DefaultProperty(); foregroundProp.setName(CHART_BACKGROUND); foregroundProp.setDisplayName(BACKGROUND_PARAM_NAME); foregroundProp.setType(Color.class); foregroundProp.setValue(chart.getBackground()); foregroundProp.setCategory(I18NSupport.getString("property.category.chart.main")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(foregroundProp, colorEditor); return foregroundProp; } private Property getForegroundProperty() { DefaultProperty foregroundProp = new DefaultProperty(); foregroundProp.setName(CHART_FOREGROUND); foregroundProp.setDisplayName(FOREGROUND_PARAM_NAME); foregroundProp.setType(Color.class); foregroundProp.setValue(chart.getForegrounds().get(0)); foregroundProp.setCategory(I18NSupport.getString("property.category.chart.main")); for (int i = 2; i <= Chart.COLORS.length; i++) { foregroundProp.addSubProperty(getForegroundProperty(i)); } ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(foregroundProp, colorEditor); return foregroundProp; } private Property getForegroundProperty(int index) { DefaultProperty foregroundProp = new DefaultProperty(); foregroundProp.setName(CHART_FOREGROUND + "_" + index); foregroundProp.setDisplayName(FOREGROUND_PARAM_NAME + " " + index); foregroundProp.setType(Color.class); Color color = (chart.getForegrounds().size() > index - 1) ? chart.getForegrounds().get(index - 1) : Chart.COLORS[index - 1]; foregroundProp.setValue(color); foregroundProp.setCategory(I18NSupport.getString("property.category.chart.main")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(foregroundProp, colorEditor); return foregroundProp; } private Property getTooltipMessageProperty() { DefaultProperty textProp = new DefaultProperty(); textProp.setName(TOOLTIP_MESSAGE); textProp.setDisplayName(TOOLTIP_MESSAGE_PARAM_NAME); textProp.setType(String.class); textProp.setValue(chart.getTooltipMessage()); textProp.setCategory(I18NSupport.getString("property.category.chart.main")); return textProp; } private Property getTypeProperty() { DefaultProperty typeProp = new DefaultProperty(); typeProp.setName(CHART_TYPE); typeProp.setDisplayName(TYPE_PARAM_NAME); typeProp.setType(String.class); ComboBoxPropertyEditor typeEditor = new ComboBoxPropertyEditor(); typeEditor.setAvailableValues(new String[]{BAR, NEGATIVE_BAR, BAR_COMBO, HORIZONTAL_BAR, STACKED_BAR, STACKED_BAR_COMBO, HORIZONTAL_STACKED_BAR, PIE, LINE, AREA, BUBBLE}); typeEditor.setAvailableIcons(new Icon[]{ ImageUtil.getImageIcon("chart_bar"), ImageUtil.getImageIcon("chart_negative_bar"), ImageUtil.getImageIcon("chart_bar_combo"), ImageUtil.getImageIcon("chart_horizontal_bar"), ImageUtil.getImageIcon("chart_stacked_bar"), ImageUtil.getImageIcon("chart_stacked_bar_combo"), ImageUtil.getImageIcon("chart_horizontal_stacked_bar"), ImageUtil.getImageIcon("chart_pie"), ImageUtil.getImageIcon("chart_line"), ImageUtil.getImageIcon("chart_area"), ImageUtil.getImageIcon("chart_bubble")}); JComboBox cb = (JComboBox)typeEditor.getCustomEditor(); cb.setMaximumRowCount(11); ChartType chartType = chart.getType(); byte type = ChartType.NONE; if (chartType != null) { type = chartType.getType(); } setChartType(type, typeProp); typeProp.setCategory(I18NSupport.getString("property.category.main")); editorRegistry.registerEditor(typeProp, typeEditor); return typeProp; } private Property getStyleProperty() { DefaultProperty styleProp = new DefaultProperty(); styleProp.setName(CHART_STYLE); styleProp.setDisplayName(STYLE_PARAM_NAME); styleProp.setType(String.class); ComboBoxPropertyEditor styleEditor = new ComboBoxPropertyEditor(); String[] availableValues = new String[]{STYLE_NORMAL}; Object type = getTypeProperty().getValue(); if (BAR.equals(type) || STACKED_BAR.equals(type) || HORIZONTAL_STACKED_BAR.equals(type) || BAR_COMBO.equals(type) || STACKED_BAR_COMBO.equals(type)) { availableValues = new String[]{STYLE_NORMAL, STYLE_BAR_GLASS, STYLE_BAR_CYLINDER, STYLE_BAR_PARALLELIPIPED, STYLE_BAR_DOME}; } else if (NEGATIVE_BAR.equals(type)) { availableValues = new String[]{STYLE_NORMAL, STYLE_BAR_GLASS}; } else if (LINE.equals(type)) { availableValues = new String[]{STYLE_NORMAL, STYLE_LINE_DOT_SOLID, STYLE_LINE_DOT_HOLLOW, STYLE_LINE_DOT_ANCHOR, STYLE_LINE_DOT_BOW, STYLE_LINE_DOT_STAR}; } styleEditor.setAvailableValues(availableValues); ChartType chartType = chart.getType(); setStyle(chartType.getStyle(), styleProp); styleProp.setCategory(I18NSupport.getString("property.category.main")); editorRegistry.registerEditor(styleProp, styleEditor); return styleProp; } private Property getTransparencyProperty() { DefaultProperty transparencyProp = new DefaultProperty(); transparencyProp.setName(CHART_TRANSPARENCY); transparencyProp.setDisplayName(TRANSPARENCY_PARAM_NAME); transparencyProp.setType(String.class); ComboBoxPropertyEditor transparencyEditor = new ComboBoxPropertyEditor(); String[] availableValues = new String[]{NONE_TRANSPARENCY, LOW_TRANSPARENCY, AVG_TRANSPARENCY, HIGH_TRANSPARENCY}; transparencyEditor.setAvailableValues(availableValues); setTransparency(chart.getTransparency(), transparencyProp); transparencyProp.setCategory(I18NSupport.getString("property.category.main")); editorRegistry.registerEditor(transparencyProp, transparencyEditor); return transparencyProp; } private Property getStyleGridXProperty() { DefaultProperty styleProp = new DefaultProperty(); styleProp.setName(STYLE_GRID_X); styleProp.setDisplayName(STYLE_GRID_PARAM_NAME); styleProp.setType(String.class); ComboBoxPropertyEditor styleEditor = new ComboBoxPropertyEditor(); String[] availableValues = new String[]{LINE_STYLE_LINE, LINE_STYLE_DOT, LINE_STYLE_DASH}; styleEditor.setAvailableValues(availableValues); setGridStyle(chart.getStyleGridX(), styleProp); styleProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); editorRegistry.registerEditor(styleProp, styleEditor); return styleProp; } private Property getStyleGridYProperty() { DefaultProperty styleProp = new DefaultProperty(); styleProp.setName(STYLE_GRID_Y); styleProp.setDisplayName(STYLE_GRID_PARAM_NAME); styleProp.setType(String.class); ComboBoxPropertyEditor styleEditor = new ComboBoxPropertyEditor(); String[] availableValues = new String[]{LINE_STYLE_LINE, LINE_STYLE_DOT, LINE_STYLE_DASH}; styleEditor.setAvailableValues(availableValues); setGridStyle(chart.getStyleGridY(), styleProp); styleProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); editorRegistry.registerEditor(styleProp, styleEditor); return styleProp; } private Property getMainFontProperty() { DefaultProperty fontProp = new DefaultProperty(); fontProp.setName(MAIN_FONT); fontProp.setDisplayName(FONT_PARAM_NAME); fontProp.setType(Font.class); fontProp.setValue(chart.getFont()); fontProp.setCategory(I18NSupport.getString("property.category.chart.main")); return fontProp; } private Property getXAxisColumnProperty(List<NameType> columns) { DefaultProperty columnProp = new DefaultProperty(); columnProp.setName(X_COLUMN_COL); columnProp.setDisplayName(COLUMN_COL_PARAM_NAME); columnProp.setType(String.class); ComboBoxPropertyEditor columnEditor = new ComboBoxPropertyEditor(); List<String> names = new ArrayList<String>(); for (NameType nt : columns) { names.add(nt.getName()); } columnEditor.setAvailableValues(names.toArray(new String[names.size()])); String column = chart.getXColumn(); columnProp.setValue(column); columnProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); editorRegistry.registerEditor(columnProp, columnEditor); return columnProp; } private Property getXAxisLabelColorProperty() { DefaultProperty colorProp = new DefaultProperty(); colorProp.setName(X_COLUMN_COLOR); colorProp.setDisplayName(COLUMN_COLOR_PARAM_NAME); colorProp.setType(Color.class); colorProp.setValue(chart.getXColor()); colorProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(colorProp, colorEditor); return colorProp; } private Property getXAxisColorProperty() { DefaultProperty colorProp = new DefaultProperty(); colorProp.setName(X_AXIS_COLOR); colorProp.setDisplayName(FOREGROUND_PARAM_NAME); colorProp.setType(Color.class); colorProp.setValue(chart.getxAxisColor()); colorProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(colorProp, colorEditor); return colorProp; } private Property getXAxisOrientationProperty() { DefaultProperty orientationProp = new DefaultProperty(); orientationProp.setName(X_COLUMN_ORIENTATION); orientationProp.setDisplayName(COLUMN_ORIENTATION_PARAM_NAME); orientationProp.setType(String.class); ComboBoxPropertyEditor orientationEditor = new ComboBoxPropertyEditor(); orientationEditor.setAvailableValues(new String[]{ORIENTATION_HORIZONTAL, ORIENTATION_VERTICAL, ORIENTATION_DIAGONAL, ORIENTATION_HALF_DIAGONAL}); byte xOrientation = chart.getXorientation(); setXOrientation(xOrientation, orientationProp); orientationProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); editorRegistry.registerEditor(orientationProp, orientationEditor); return orientationProp; } private Property getXPatternProperty() { DefaultProperty patternProp = new DefaultProperty(); patternProp.setName(X_PATTERN); patternProp.setDisplayName(X_PATTERN_PARAM_NAME); patternProp.setType(String.class); patternProp.setValue(chart.getXPattern()); patternProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); FieldPatternPropertyEditor patternEditor = new FieldPatternPropertyEditor(); editorRegistry.registerEditor(patternProp, patternEditor); return patternProp; } private Property getXLabelFontProperty() { DefaultProperty fontProp = new DefaultProperty(); fontProp.setName(X_AXIS_LABEL_FONT); fontProp.setDisplayName(FONT_PARAM_NAME); fontProp.setType(Font.class); fontProp.setValue(chart.getXLabelFont()); fontProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); return fontProp; } private Property getYAxisColorProperty() { DefaultProperty colorProp = new DefaultProperty(); colorProp.setName(Y_AXIS_COLOR); colorProp.setDisplayName(FOREGROUND_PARAM_NAME); colorProp.setType(Color.class); colorProp.setValue(chart.getyAxisColor()); colorProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(colorProp, colorEditor); return colorProp; } private Property getYAxisColumnProperty(List<NameType> columns) { DefaultProperty columnProp = new DefaultProperty(); columnProp.setName(Y_COLUMN_COL); columnProp.setDisplayName(COLUMN_COL_PARAM_NAME); columnProp.setType(String.class); ComboBoxPropertyEditor columnEditor = new ComboBoxPropertyEditor(); JComboBox combo = (JComboBox) columnEditor.getCustomEditor(); combo.setRenderer(new ChartColumnListCellRenderer(columns)); List<String> names = new ArrayList<String>(); for (NameType nt : columns) { names.add(nt.getName()); } columnEditor.setAvailableValues(names.toArray(new String[names.size()])); String column = null; if ((chart.getYColumns() != null) && (chart.getYColumns().size() > 0)) { column = chart.getYColumns().get(0); } columnProp.setValue(column); columnProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); editorRegistry.registerEditor(columnProp, columnEditor); for (int i = 2; i <= 10; i++) { columnProp.addSubProperty(getYAxisColumnProperty(getListWithSelect(columns), i)); } return columnProp; } private Property getYAxisColumnProperty(List<NameType> columns, int index) { DefaultProperty columnProp = new DefaultProperty(); columnProp.setName(Y_COLUMN_COL + "_" + index); columnProp.setDisplayName(COLUMN_COL_PARAM_NAME + " " + index); columnProp.setType(String.class); ComboBoxPropertyEditor columnEditor = new ComboBoxPropertyEditor(); JComboBox combo = (JComboBox) columnEditor.getCustomEditor(); combo.setRenderer(new ChartColumnListCellRenderer(columns)); List<String> names = new ArrayList<String>(); for (NameType nt : columns) { names.add(nt.getName()); } columnEditor.setAvailableValues(names.toArray(new String[names.size()])); String column = (chart.getYColumns().size() > index - 1) ? chart.getYColumns().get(index - 1) : null; columnProp.setValue(column); columnProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); editorRegistry.registerEditor(columnProp, columnEditor); return columnProp; } private Property getYAxisLabelColorProperty() { DefaultProperty colorProp = new DefaultProperty(); colorProp.setName(Y_COLUMN_COLOR); colorProp.setDisplayName(COLUMN_COLOR_PARAM_NAME); colorProp.setType(Color.class); colorProp.setValue(chart.getYColor()); colorProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(colorProp, colorEditor); return colorProp; } private Property getYLabelFontProperty() { DefaultProperty fontProp = new DefaultProperty(); fontProp.setName(Y_AXIS_LABEL_FONT); fontProp.setDisplayName(FONT_PARAM_NAME); fontProp.setType(Font.class); fontProp.setValue(chart.getYLabelFont()); fontProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); return fontProp; } private Property getXLegendProperty() { DefaultProperty textProp = new DefaultProperty(); textProp.setName(X_LEGEND_TEXT); textProp.setDisplayName(LEGEND_PARAM_NAME); textProp.setType(String.class); textProp.setValue(chart.getXLegend().getTitle()); textProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); textProp.addSubProperty(getXLegendFontProperty()); textProp.addSubProperty(getXLegendColorProperty()); //textProp.addSubProperty(getXLegendAlignmentProperty()); return textProp; } private Property getXLegendFontProperty() { DefaultProperty fontProp = new DefaultProperty(); fontProp.setName(X_LEGEND_FONT); fontProp.setDisplayName(FONT_PARAM_NAME); fontProp.setType(Font.class); fontProp.setValue(chart.getXLegend().getFont()); fontProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); return fontProp; } private Property getXLegendColorProperty() { DefaultProperty foregroundProp = new DefaultProperty(); foregroundProp.setName(X_LEGEND_COLOR); foregroundProp.setDisplayName(FOREGROUND_PARAM_NAME); foregroundProp.setType(Color.class); foregroundProp.setValue(chart.getXLegend().getColor()); foregroundProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(foregroundProp, colorEditor); return foregroundProp; } private Property getXLegendAlignmentProperty() { DefaultProperty alignmentProp = new DefaultProperty(); alignmentProp.setName(X_LEGEND_ALIGNMENT); alignmentProp.setDisplayName(ALIGNMENT_PARAM_NAME); alignmentProp.setType(String.class); ComboBoxPropertyEditor alignmentEditor = new ComboBoxPropertyEditor(); alignmentEditor.setAvailableValues(new String[]{LEFT, CENTER, RIGHT}); byte alignment = chart.getXLegend().getAlignment(); setAlignment(alignment, alignmentProp); alignmentProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); editorRegistry.registerEditor(alignmentProp, alignmentEditor); return alignmentProp; } private Property getXGridColorProperty() { DefaultProperty textProp = new DefaultProperty(); textProp.setName(X_GRID_COLOR); textProp.setDisplayName(GRID_COLOR_PARAM_NAME); textProp.setType(Color.class); textProp.setValue(chart.getXGridColor()); textProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(textProp, colorEditor); return textProp; } private Property getXShowGridProperty() { DefaultProperty showProp = new DefaultProperty(); showProp.setName(X_SHOW_GRID); showProp.setDisplayName(SHOW_GRID_NAME); showProp.setType(Boolean.class); showProp.setValue(chart.getXShowGrid()); showProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); showProp.addSubProperty(getXGridColorProperty()); showProp.addSubProperty(getStyleGridXProperty()); return showProp; } private Property getXShowLabelProperty() { DefaultProperty showProp = new DefaultProperty(); showProp.setName(X_SHOW_LABEL); showProp.setDisplayName(SHOW_LABEL_NAME); showProp.setType(Boolean.class); showProp.setValue(chart.getXShowLabel()); showProp.setCategory(I18NSupport.getString("property.category.chart.xcolumn")); showProp.addSubProperty(getXLabelFontProperty()); showProp.addSubProperty(getXAxisLabelColorProperty()); showProp.addSubProperty(getXAxisOrientationProperty()); showProp.addSubProperty(getXPatternProperty()); return showProp; } private Property getYShowValuesProperty() { DefaultProperty showProp = new DefaultProperty(); showProp.setName(SHOW_Y_VALUES_LABEL); showProp.setDisplayName(SHOW_Y_VALUES_NAME); showProp.setType(Boolean.class); showProp.setValue(chart.getShowYValuesOnChart()); showProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); return showProp; } private Property getYStartingFromZeroProperty() { DefaultProperty showProp = new DefaultProperty(); showProp.setName(STARTING_FROM_ZERO_LABEL); showProp.setDisplayName(STARTING_FROM_ZERO_NAME); showProp.setType(Boolean.class); showProp.setValue(chart.getStartingFromZero()); showProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); return showProp; } private Property getShowDualAxisProperty() { DefaultProperty showProp = new DefaultProperty(); showProp.setName(SHOW_Y_DUAL_AXIS_LABEL); showProp.setDisplayName(SHOW_Y_DUAL_AXIS_NAME); showProp.setType(Boolean.class); showProp.setValue(chart.getShowDualAxis()); showProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); showProp.addSubProperty(getYDualLegendProperty()); showProp.addSubProperty(getY2SeriesCountProperty()); return showProp; } private Property getY2SeriesCountProperty() { DefaultProperty showProp = new DefaultProperty(); showProp.setName(Y2COUNT_LABEL); showProp.setDisplayName(Y2COUNT_PARAM_NAME); showProp.setType(Integer.class); showProp.setValue(chart.getY2SeriesCount()); showProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); return showProp; } private Property getYTooltipPatternProperty() { DefaultProperty patternProp = new DefaultProperty(); patternProp.setName(Y_TOOLTIP_PATTERN); patternProp.setDisplayName(Y_TOOLTIP_PATTERN_PARAM_NAME); patternProp.setType(String.class); patternProp.setValue(chart.getYTooltipPattern()); patternProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); FieldPatternPropertyEditor patternEditor = new FieldPatternPropertyEditor(); editorRegistry.registerEditor(patternProp, patternEditor); return patternProp; } private Property getYLegendProperty() { DefaultProperty textProp = new DefaultProperty(); textProp.setName(Y_LEGEND_TEXT); textProp.setDisplayName(LEGEND_PARAM_NAME); textProp.setType(String.class); textProp.setValue(chart.getYLegend().getTitle()); textProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); textProp.addSubProperty(getYLegendFontProperty()); textProp.addSubProperty(getYLegendColorProperty()); //textProp.addSubProperty(getYLegendAlignmentProperty()); return textProp; } private Property getYLegendFontProperty() { DefaultProperty fontProp = new DefaultProperty(); fontProp.setName(Y_LEGEND_FONT); fontProp.setDisplayName(FONT_PARAM_NAME); fontProp.setType(Font.class); fontProp.setValue(chart.getYLegend().getFont()); fontProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); return fontProp; } private Property getYLegendColorProperty() { DefaultProperty foregroundProp = new DefaultProperty(); foregroundProp.setName(Y_LEGEND_COLOR); foregroundProp.setDisplayName(FOREGROUND_PARAM_NAME); foregroundProp.setType(Color.class); foregroundProp.setValue(chart.getYLegend().getColor()); foregroundProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(foregroundProp, colorEditor); return foregroundProp; } private Property getYLegendAlignmentProperty() { DefaultProperty alignmentProp = new DefaultProperty(); alignmentProp.setName(Y_LEGEND_ALIGNMENT); alignmentProp.setDisplayName(ALIGNMENT_PARAM_NAME); alignmentProp.setType(String.class); ComboBoxPropertyEditor alignmentEditor = new ComboBoxPropertyEditor(); alignmentEditor.setAvailableValues(new String[]{LEFT, CENTER, RIGHT}); byte alignment = chart.getYLegend().getAlignment(); setAlignment(alignment, alignmentProp); alignmentProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); editorRegistry.registerEditor(alignmentProp, alignmentEditor); return alignmentProp; } private Property getYDualLegendProperty() { DefaultProperty textProp = new DefaultProperty(); textProp.setName(Y_DUAL_LEGEND_TEXT); textProp.setDisplayName(LEGEND_PARAM_NAME); textProp.setType(String.class); String title = ""; if (chart.getyDualLegend() != null) { title = chart.getyDualLegend().getTitle(); } textProp.setValue(title); textProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); textProp.addSubProperty(getYDualLegendFontProperty()); textProp.addSubProperty(getYDualLegendColorProperty()); return textProp; } private Property getYDualLegendFontProperty() { DefaultProperty fontProp = new DefaultProperty(); fontProp.setName(Y_DUAL_LEGEND_FONT); fontProp.setDisplayName(FONT_PARAM_NAME); fontProp.setType(Font.class); if (chart.getyDualLegend() != null) { fontProp.setValue(chart.getyDualLegend().getFont()); } fontProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); return fontProp; } private Property getYDualLegendColorProperty() { DefaultProperty foregroundProp = new DefaultProperty(); foregroundProp.setName(Y_DUAL_LEGEND_COLOR); foregroundProp.setDisplayName(FOREGROUND_PARAM_NAME); foregroundProp.setType(Color.class); if (chart.getyDualLegend() != null) { foregroundProp.setValue(chart.getyDualLegend().getColor()); } foregroundProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(foregroundProp, colorEditor); return foregroundProp; } private Property getYGridColorProperty() { DefaultProperty textProp = new DefaultProperty(); textProp.setName(Y_GRID_COLOR); textProp.setDisplayName(GRID_COLOR_PARAM_NAME); textProp.setType(Color.class); textProp.setValue(chart.getYGridColor()); textProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); ExtendedColorPropertyEditor colorEditor = new ExtendedColorPropertyEditor(); editorRegistry.registerEditor(textProp, colorEditor); return textProp; } private Property getYShowGridProperty() { DefaultProperty showProp = new DefaultProperty(); showProp.setName(Y_SHOW_GRID); showProp.setDisplayName(SHOW_GRID_NAME); showProp.setType(Boolean.class); showProp.setValue(chart.getYShowGrid()); showProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); showProp.addSubProperty(getYGridColorProperty()); showProp.addSubProperty(getStyleGridYProperty()); return showProp; } private Property getYShowLabelProperty() { DefaultProperty showProp = new DefaultProperty(); showProp.setName(Y_SHOW_LABEL); showProp.setDisplayName(SHOW_LABEL_NAME); showProp.setType(Boolean.class); showProp.setValue(chart.getYShowLabel()); showProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); showProp.addSubProperty(getYLabelFontProperty()); showProp.addSubProperty(getYAxisLabelColorProperty()); return showProp; } private Property getYColumnLegendProperty() { DefaultProperty textProp = new DefaultProperty(); textProp.setName(Y_COLUMN_LEGEND); textProp.setDisplayName(COLUMN_LEGEND_PARAM_NAME); textProp.setType(String.class); String legend = null; if ((chart.getYColumnsLegends() != null) && (chart.getYColumnsLegends().size() > 0)) { legend = chart.getYColumnsLegends().get(0); } textProp.setValue(legend); textProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); for (int i = 2; i <= 10; i++) { textProp.addSubProperty(getYColumnLegendProperty(i)); } return textProp; } private Property getYColumnLegendProperty(int index) { DefaultProperty textProp = new DefaultProperty(); textProp.setName(Y_COLUMN_LEGEND + "_" + index); textProp.setDisplayName(COLUMN_LEGEND_PARAM_NAME + " " + index); textProp.setType(String.class); String legend = (chart.getYColumnsLegends().size() > index - 1) ? chart.getYColumnsLegends().get(index - 1) : null; textProp.setValue(legend); textProp.setCategory(I18NSupport.getString("property.category.chart.ycolumn")); return textProp; } private List<Property> getFilteredProperties(int category) { List<Property> props = new ArrayList<Property>(); if ((category & TITLE_CATEGORY) == TITLE_CATEGORY) { props.add(getTitleTextProperty()); props.add(getTitleFontProperty()); props.add(getTitleForegroundProperty()); props.add(getTitleAlignmentProperty()); } if ((category & MAIN_CATEGORY) == MAIN_CATEGORY) { props.add(getTypeProperty()); props.add(getBackgroundProperty()); props.add(getForegroundProperty()); props.add(styleProperty = getStyleProperty()); props.add(getTooltipMessageProperty()); props.add(getTransparencyProperty()); props.add(getMainFontProperty()); } if ((category & XCOLUMN_CATEGORY) == XCOLUMN_CATEGORY) { props.add(xAxisColumnProperty = getXAxisColumnProperty(columns)); props.add(getXShowLabelProperty()); props.add(getXShowGridProperty()); props.add(getXLegendProperty()); props.add(getXAxisColorProperty()); } if ((category & YCOLUMN_CATEGORY) == YCOLUMN_CATEGORY) { props.add(yAxisColumnProperty = getYAxisColumnProperty(columns)); props.add(getYColumnLegendProperty()); props.add(getYDynamicColumnQueryProperty()); props.add(getYShowLabelProperty()); props.add(getYShowGridProperty()); props.add(getYLegendProperty()); props.add(getYTooltipPatternProperty()); props.add(getYShowValuesProperty()); props.add(getYAxisColorProperty()); props.add(getShowDualAxisProperty()); props.add(getYStartingFromZeroProperty()); } return props; } private List<Property> getFilteredProperties() { return getFilteredProperties(TITLE_CATEGORY | MAIN_CATEGORY | XCOLUMN_CATEGORY | YCOLUMN_CATEGORY); } private ChartType getChartType(String type) { if (BAR.equals(type)) { return new ChartType(ChartType.BAR); } else if (NEGATIVE_BAR.equals(type)) { return new ChartType(ChartType.NEGATIVE_BAR); } else if (BAR_COMBO.equals(type)) { return new ChartType(ChartType.BAR_COMBO); } else if (HORIZONTAL_BAR.equals(type)) { return new ChartType(ChartType.HORIZONTAL_BAR); } else if (STACKED_BAR.equals(type)) { return new ChartType(ChartType.STACKED_BAR); } else if (STACKED_BAR_COMBO.equals(type)) { return new ChartType(ChartType.STACKED_BAR_COMBO); } else if (HORIZONTAL_STACKED_BAR.equals(type)) { return new ChartType(ChartType.HORIZONTAL_STACKED_BAR); } else if (PIE.equals(type)) { return new ChartType(ChartType.PIE); } else if (LINE.equals(type)) { return new ChartType(ChartType.LINE); } else if (AREA.equals(type)) { return new ChartType(ChartType.AREA); } else if (BUBBLE.equals(type)) { return new ChartType(ChartType.BUBBLE); } else { return new ChartType(ChartType.NONE); } } private void setChartType(byte type, Property typeProp) { String typeS; switch (type) { case ChartType.BAR: typeS = BAR; break; case ChartType.NEGATIVE_BAR: typeS = NEGATIVE_BAR; break; case ChartType.BAR_COMBO: typeS = BAR_COMBO; break; case ChartType.HORIZONTAL_BAR: typeS = HORIZONTAL_BAR; break; case ChartType.STACKED_BAR: typeS = STACKED_BAR; break; case ChartType.STACKED_BAR_COMBO: typeS = STACKED_BAR_COMBO; break; case ChartType.HORIZONTAL_STACKED_BAR: typeS = HORIZONTAL_STACKED_BAR; break; case ChartType.PIE: typeS = PIE; break; case ChartType.LINE: typeS = LINE; break; case ChartType.AREA: typeS = AREA; break; case ChartType.BUBBLE: typeS = BUBBLE; break; default: typeS = null; break; } typeProp.setValue(typeS); } private byte getStyle(String style) { if (STYLE_BAR_GLASS.equals(style)) { return ChartType.STYLE_BAR_GLASS; } else if (STYLE_BAR_CYLINDER.equals(style)) { return ChartType.STYLE_BAR_CYLINDER; } else if (STYLE_BAR_PARALLELIPIPED.equals(style)) { return ChartType.STYLE_BAR_PARALLELIPIPED; } else if (STYLE_BAR_DOME.equals(style)) { return ChartType.STYLE_BAR_DOME; } else if (STYLE_LINE_DOT_SOLID.equals(style)) { return ChartType.STYLE_LINE_DOT_SOLID; } else if (STYLE_LINE_DOT_HOLLOW.equals(style)) { return ChartType.STYLE_LINE_DOT_HOLLOW; } else if (STYLE_LINE_DOT_ANCHOR.equals(style)) { return ChartType.STYLE_LINE_DOT_ANCHOR; } else if (STYLE_LINE_DOT_BOW.equals(style)) { return ChartType.STYLE_LINE_DOT_BOW; } else if (STYLE_LINE_DOT_STAR.equals(style)) { return ChartType.STYLE_LINE_DOT_STAR; } else { return ChartType.STYLE_NORMAL; } } private void setStyle(byte style, Property styleProp) { String styleS; switch (style) { case ChartType.STYLE_BAR_GLASS: styleS = STYLE_BAR_GLASS; break; case ChartType.STYLE_BAR_CYLINDER: styleS = STYLE_BAR_CYLINDER; break; case ChartType.STYLE_BAR_PARALLELIPIPED: styleS = STYLE_BAR_PARALLELIPIPED; break; case ChartType.STYLE_BAR_DOME: styleS = STYLE_BAR_DOME; break; case ChartType.STYLE_LINE_DOT_SOLID: styleS = STYLE_LINE_DOT_SOLID; break; case ChartType.STYLE_LINE_DOT_HOLLOW: styleS = STYLE_LINE_DOT_HOLLOW; break; case ChartType.STYLE_LINE_DOT_ANCHOR: styleS = STYLE_LINE_DOT_ANCHOR; break; case ChartType.STYLE_LINE_DOT_BOW: styleS = STYLE_LINE_DOT_BOW; break; case ChartType.STYLE_LINE_DOT_STAR: styleS = STYLE_LINE_DOT_STAR; break; default: styleS = STYLE_NORMAL; break; } styleProp.setValue(styleS); } private void updateStyleProperty() { List<Property> props = getFilteredProperties(MAIN_CATEGORY); int index = props.indexOf(styleProperty); props.remove(styleProperty); props.add(index, styleProperty = getStyleProperty()); setProperties(props.toArray(new Property[props.size()])); } public void updateXColumnProperty(String column) { List<Property> props = getFilteredProperties(XCOLUMN_CATEGORY); int index = props.indexOf(xAxisColumnProperty); props.remove(xAxisColumnProperty); props.add(index, xAxisColumnProperty = getXAxisColumnProperty(columns)); setProperties(props.toArray(new Property[props.size()])); } public void updateYColumnProperty(String column) { List<Property> props = getFilteredProperties(YCOLUMN_CATEGORY); int index = props.indexOf(yAxisColumnProperty); props.remove(yAxisColumnProperty); props.add(index, yAxisColumnProperty = getYAxisColumnProperty(columns)); setProperties(props.toArray(new Property[props.size()])); } private byte getXOrientation(String orientation) { if (ORIENTATION_DIAGONAL.equals(orientation)) { return Chart.DIAGONAL; } else if (ORIENTATION_HALF_DIAGONAL.equals(orientation)) { return Chart.HALF_DIAGONAL; } else if (ORIENTATION_VERTICAL.equals(orientation)) { return Chart.VERTICAL; } else { return Chart.HORIZONTAL; } } private void setXOrientation(byte orientation, Property styleProp) { String orientationS; switch (orientation) { case Chart.VERTICAL: orientationS = ORIENTATION_VERTICAL; break; case Chart.DIAGONAL: orientationS = ORIENTATION_DIAGONAL; break; case Chart.HALF_DIAGONAL: orientationS = ORIENTATION_HALF_DIAGONAL; break; default: orientationS = ORIENTATION_HORIZONTAL; break; } styleProp.setValue(orientationS); } private byte getTransparency(String transparency) { if (LOW_TRANSPARENCY.equals(transparency)) { return Chart.LOW_TRANSPARENCY; } else if (AVG_TRANSPARENCY.equals(transparency)) { return Chart.AVG_TRANSPARENCY; } else if (HIGH_TRANSPARENCY.equals(transparency)) { return Chart.HIGH_TRANSPARENCY; } else { return Chart.NONE_TRANSPARENCY; } } private void setTransparency(byte transparency, Property transparencyProp) { String transparencyS; switch (transparency) { case Chart.LOW_TRANSPARENCY: transparencyS = LOW_TRANSPARENCY; break; case Chart.AVG_TRANSPARENCY: transparencyS = AVG_TRANSPARENCY; break; case Chart.HIGH_TRANSPARENCY: transparencyS = HIGH_TRANSPARENCY; break; default: transparencyS = NONE_TRANSPARENCY; break; } transparencyProp.setValue(transparencyS); } private byte getGridStyle(String style) { if (LINE_STYLE_DOT.equals(style)) { return Chart.LINE_STYLE_DOT; } else if (LINE_STYLE_DASH.equals(style)) { return Chart.LINE_STYLE_DASH; } else { return Chart.LINE_STYLE_LINE; } } private void setGridStyle(byte style, Property styleProp) { String styleS; switch (style) { case Chart.LINE_STYLE_DOT: styleS = LINE_STYLE_DOT; break; case Chart.LINE_STYLE_DASH: styleS = LINE_STYLE_DASH; break; case Chart.LINE_STYLE_LINE: default: styleS = LINE_STYLE_LINE; break; } styleProp.setValue(styleS); } private byte getAlignment(String alignment) { if (CENTER.equals(alignment)) { return ChartTitle.CENTRAL_ALIGNMENT; } else if (RIGHT.equals(alignment)) { return ChartTitle.RIGHT_ALIGNMENT; } else { return ChartTitle.LEFT_ALIGNMENT; } } private void setAlignment(byte alignment, Property alignmentprop) { String alignmentS; switch (alignment) { case ChartTitle.CENTRAL_ALIGNMENT: alignmentS = CENTER; break; case ChartTitle.RIGHT_ALIGNMENT: alignmentS = RIGHT; break; case ChartTitle.LEFT_ALIGNMENT: alignmentS = LEFT; break; default: alignmentS = CENTER; break; } alignmentprop.setValue(alignmentS); } public List<NameType> getColumns() { return columns; } public void resetColumns() { columns = new ArrayList<NameType>(); } public void setColumns(List<NameType> columns) { this.columns = columns; List<Property> props = getFilteredProperties(XCOLUMN_CATEGORY); int index = props.indexOf(xAxisColumnProperty); props.remove(xAxisColumnProperty); props.add(index, xAxisColumnProperty = getXAxisColumnProperty(columns)); setProperties(props.toArray(new Property[props.size()])); props = getFilteredProperties(YCOLUMN_CATEGORY); int index2 = props.indexOf(yAxisColumnProperty); props.remove(yAxisColumnProperty); props.add(index2, yAxisColumnProperty = getYAxisColumnProperty(columns)); setProperties(props.toArray(new Property[props.size()])); } private List<NameType> getListWithSelect(List<NameType> columns) { List<NameType> newColumns = new ArrayList<NameType>(); newColumns.add(new NameType(null, null)); newColumns.addAll(columns); return newColumns; } }