/**
SpagoBI - The Business Intelligence Free Platform
Copyright (C) 2005-2008 Engineering Ingegneria Informatica S.p.A.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
**/
package it.eng.spagobi.engines.chart.bo;
import it.eng.spago.base.SourceBean;
import it.eng.spago.base.SourceBeanAttribute;
import it.eng.spago.security.IEngUserProfile;
import it.eng.spagobi.commons.constants.SpagoBIConstants;
import it.eng.spagobi.commons.utilities.messages.IMessageBuilder;
import it.eng.spagobi.commons.utilities.messages.MessageBuilderFactory;
import it.eng.spagobi.engines.chart.bo.charttypes.XYCharts.BlockChart;
import it.eng.spagobi.engines.chart.bo.charttypes.barcharts.CombinedCategoryBar;
import it.eng.spagobi.engines.chart.bo.charttypes.barcharts.LinkableBar;
import it.eng.spagobi.engines.chart.bo.charttypes.barcharts.OverlaidBarLine;
import it.eng.spagobi.engines.chart.bo.charttypes.barcharts.OverlaidStackedBarLine;
import it.eng.spagobi.engines.chart.bo.charttypes.barcharts.SimpleBar;
import it.eng.spagobi.engines.chart.bo.charttypes.barcharts.StackedBar;
import it.eng.spagobi.engines.chart.bo.charttypes.barcharts.StackedBarGroup;
import it.eng.spagobi.engines.chart.bo.charttypes.blockcharts.TimeBlockChart;
import it.eng.spagobi.engines.chart.bo.charttypes.boxcharts.SimpleBox;
import it.eng.spagobi.engines.chart.bo.charttypes.clusterchart.SimpleCluster;
import it.eng.spagobi.engines.chart.bo.charttypes.dialcharts.BulletGraph;
import it.eng.spagobi.engines.chart.bo.charttypes.dialcharts.Meter;
import it.eng.spagobi.engines.chart.bo.charttypes.dialcharts.SBISpeedometer;
import it.eng.spagobi.engines.chart.bo.charttypes.dialcharts.SimpleDial;
import it.eng.spagobi.engines.chart.bo.charttypes.dialcharts.SpeedometerMultiValue;
import it.eng.spagobi.engines.chart.bo.charttypes.dialcharts.Thermometer;
import it.eng.spagobi.engines.chart.bo.charttypes.piecharts.LinkablePie;
import it.eng.spagobi.engines.chart.bo.charttypes.piecharts.SimplePie;
import it.eng.spagobi.engines.chart.bo.charttypes.scattercharts.MarkerScatter;
import it.eng.spagobi.engines.chart.bo.charttypes.scattercharts.SimpleScatter;
import it.eng.spagobi.engines.chart.bo.charttypes.targetcharts.SparkLine;
import it.eng.spagobi.engines.chart.bo.charttypes.targetcharts.WinLose;
import it.eng.spagobi.engines.chart.utils.DatasetMap;
import it.eng.spagobi.engines.chart.utils.StyleLabel;
import java.awt.Color;
import java.awt.Font;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Vector;
import org.apache.log4j.Logger;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.block.BlockContainer;
import org.jfree.chart.block.BorderArrangement;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.Dataset;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.VerticalAlignment;
/** @author Giulio Gavardi
* giulio.gavardi@eng.it
*/
public class ChartImpl implements IChart {
private static transient Logger logger=Logger.getLogger(ChartImpl.class);
protected int titleDimension;
protected String name=null;
protected String subName=null;
protected int width;
protected int height;
protected String data;
protected String confDataset;
protected boolean isLovConfDefined;
protected IEngUserProfile profile;
protected String type="";
protected String subtype="";
protected Color color;
protected boolean legend=true;
protected String legendPosition="bottom";
protected Map parametersObject;
protected boolean filter=true;
protected boolean slider=true;
protected boolean sliderStartFromEnd=false;
protected String positionSlider;
protected StyleLabel styleTitle;
protected StyleLabel styleSubTitle;
protected StyleLabel defaultLabelsStyle;
protected StyleLabel styleLegend;
protected HashMap seriesLabelsMap = null;
protected boolean multichart=false;
protected String orientationMultichart="";
protected Locale locale=Locale.ITALIAN;
// REGISTER CHART TYPES and SUB TYPES
public static final String DIAL_CHART = "DIALCHART";
public static final String speedometer = "speedometer";
public static final String speedometerMultiValue = "speedometerMultiValue";
public static final String simpledial = "simpledial";
public static final String thermomether = "thermomether";
public static final String meter = "meter";
public static final String bullet = "bullet";
public static final String PIECHART = "PIECHART";
public static final String simplepie = "simplepie";
public static final String linkablepie = "linkablepie";
public static final String BARCHART = "BARCHART";
public static final String simplebar = "simplebar";
public static final String linkablebar = "linkablebar";
public static final String overlaid_barline = "overlaid_barline";
public static final String stacked_bar = "stacked_bar";
public static final String stacked_bar_group = "stacked_bar_group";
public static final String overlaid_stacked_barline= "overlaid_stacked_barline";
public static final String combined_category_bar= "combined_category_bar";
public static final String BOXCHART = "BOXCHART";
public static final String simplebox = "simplebox";
public static final String CLUSTERCHART = "CLUSTERCHART";
public static final String simplecluster = "simplecluster";
public static final String XYCHART = "XYCHART";
public static final String blockchart = "blockchart";
public static final String SCATTERCHART = "SCATTERCHART";
public static final String simplescatter = "simplescatter";
public static final String markerscatter = "markerscatter";
public static final String TARGETCHART = "TARGETCHART";
public static final String sparkline = "spark_line";
public static final String winlose = "win_lose";
public static final String BLOCKCHART = "BLOCKCHART";
public static final String simpletimeblock = "simpletimeblock";
// Register Parameters
/** Nameof the chart., can be parametrized */
public static final String NAME = "name";
/** tag for style title */
public static final String STYLE_TITLE = "STYLE_TITLE";
/** tag for style subTitle */
public static final String STYLE_SUBTITLE = "STYLE_SUBTITLE";
/** tag for style default labels */
public static final String STYLE_LABELS_DEFAULT = "STYLE_LABELS_DEFAULT";
/** parameters for style tags */
public static final String NAME_STYLE = "name";
public static final String FONT_STYLE = "font";
public static final String SIZE_STYLE = "size";
public static final String COLOR_STYLE = "color";
public static final String ORIENTATION_STYLE = "orientation";
/** title dimension */
public static final String TITLE_DIMENSION = "title_dimension";
/** title dimension */
public static final String COLORS_BACKGROUND = "COLORS.background";
/** dimensions of chart */
public static final String DIMENSION_WIDTH = "DIMENSION.width";
public static final String DIMENSION_HEIGHT = "DIMENSION.height";
/** dataset for configuration */
public static final String CONF_DATASET = "confdataset";
/** Parameter in the tag CONF*/
/** TAG CONF */
public static final String CONF = "CONF";
/** if true draw legend */
public static final String LEGEND = "legend";
/** legend position; bottom, top, left, right*/
public static final String LEGEND_POSITION = "legend_position";
/** legend style; font, sizem color*/
public static final String LEGEND_STYLE = "STYLE_LEGEND";
/** if true view filter*/
public static final String VIEW_FILTER = "view_filter";
/** if true view slider*/
public static final String VIEW_SLIDER = "view_slider";
/** if true the slider starts from last n categories*/
public static final String SLIDER_START_FROM_END = "slider_start_from_end";
/** top or bottom, where to put slider*/
public static final String POSITION_SLIDER = "position_slider";
// Outside of CONF
/** Labels for series, should be put outside CONF*/
public static final String SERIES_LABELS = "SERIES_LABELS";
/**
* configureChart reads the content of the template and sets the chart parameters.
*
* @param content the content
*/
public void configureChart(SourceBean content) {
logger.debug("IN");
// common part for all charts
//setting the title with parameter values if is necessary
if(content.getAttribute(NAME)!=null) {
String titleChart = (String)content.getAttribute(NAME);
String tmpTitle = titleChart;
while (!tmpTitle.equals("")){
if (tmpTitle.indexOf("$P{") >= 0){
String parName = tmpTitle.substring(tmpTitle.indexOf("$P{")+3, tmpTitle.indexOf("}"));
String parValue = (parametersObject.get(parName)==null)?"":(String)parametersObject.get(parName);
parValue = parValue.replaceAll("\'", "");
if(parValue.equals("%")) parValue = "";
int pos = tmpTitle.indexOf("$P{"+parName+"}") + (parName.length()+4);
titleChart = titleChart.replace("$P{" + parName + "}", parValue);
tmpTitle = tmpTitle.substring(pos);
}
else
tmpTitle = "";
}
setName(titleChart);
}
else setName("");
SourceBean styleTitleSB = (SourceBean)content.getAttribute(STYLE_TITLE);
if(styleTitleSB!=null){
String fontS = (String)styleTitleSB.getAttribute(FONT_STYLE);
String sizeS = (String)styleTitleSB.getAttribute(SIZE_STYLE);
String colorS = (String)styleTitleSB.getAttribute(COLOR_STYLE);
try{
Color color=Color.decode(colorS);
int size=Integer.valueOf(sizeS).intValue();
styleTitle=new StyleLabel(fontS,size,color);
}
catch (Exception e) {
logger.error("Wrong style Title settings, use default");
}
}
SourceBean styleSubTitleSB = (SourceBean)content.getAttribute(STYLE_SUBTITLE);
if(styleSubTitleSB!=null){
String subTitle = (String)styleSubTitleSB.getAttribute(NAME_STYLE);
if(subTitle!=null) {
String tmpSubTitle = subTitle;
while (!tmpSubTitle.equals("")){
if (tmpSubTitle.indexOf("$P{") >= 0){
String parName = tmpSubTitle.substring(tmpSubTitle.indexOf("$P{")+3, tmpSubTitle.indexOf("}"));
String parValue = (parametersObject.get(parName)==null)?"":(String)parametersObject.get(parName);
parValue = parValue.replaceAll("\'", "");
if(parValue.equals("%")) parValue = "";
int pos = tmpSubTitle.indexOf("$P{"+parName+"}") + (parName.length()+4);
subTitle = subTitle.replace("$P{" + parName + "}", parValue);
tmpSubTitle = tmpSubTitle.substring(pos);
}
else
tmpSubTitle = "";
}
setSubName(subTitle);
}
else setSubName("");
String fontS = (String)styleSubTitleSB.getAttribute(FONT_STYLE);
String sizeS = (String)styleSubTitleSB.getAttribute(SIZE_STYLE);
String colorS = (String)styleSubTitleSB.getAttribute(COLOR_STYLE);
try{
Color color=Color.decode(colorS);
int size=Integer.valueOf(sizeS).intValue();
styleSubTitle=new StyleLabel(fontS,size,color);
}
catch (Exception e) {
logger.error("Wrong style SubTitle settings, use default");
}
}
SourceBean styleLabelsSB = (SourceBean)content.getAttribute(STYLE_LABELS_DEFAULT);
if(styleLabelsSB!=null){
String fontS = (String)styleLabelsSB.getAttribute(FONT_STYLE);
if(fontS==null){
fontS = "Arial";
}
String sizeS = (String)styleLabelsSB.getAttribute(SIZE_STYLE);
if(sizeS==null){
sizeS = "12";
}
String colorS = (String)styleLabelsSB.getAttribute(COLOR_STYLE);
if(colorS==null){
colorS = "#000000";
}
String orientationS = (String)styleLabelsSB.getAttribute(ORIENTATION_STYLE);
if(orientationS==null){
orientationS = "horizontal";
}
try{
Color color=Color.decode(colorS);
int size=Integer.valueOf(sizeS).intValue();
defaultLabelsStyle=new StyleLabel(fontS,size,color,orientationS);
}
catch (Exception e) {
logger.error("Wrong style labels settings, use default");
}
}else{
defaultLabelsStyle=new StyleLabel("Arial", 12,Color.BLACK);
}
if(content.getAttribute("title_dimension")!=null)
{
String titleD=((String)content.getAttribute(TITLE_DIMENSION));
titleDimension=Integer.valueOf(titleD).intValue();
}
else setTitleDimension(18);
String colS = (String)content.getAttribute(COLORS_BACKGROUND);
if(colS!=null)
{
Color col=new Color(Integer.decode(colS).intValue());
if(col!=null){
setColor(col);}
else{
setColor(Color.white);
}
}
else {
setColor(Color.white);
}
String widthS = (String)content.getAttribute(DIMENSION_WIDTH);
String heightS = (String)content.getAttribute(DIMENSION_HEIGHT);
if(widthS==null || heightS==null){
logger.warn("Width or height non defined, use default ones");
widthS="400";
heightS="300";
}
width=Integer.valueOf(widthS).intValue();
height=Integer.valueOf(heightS).intValue();
// get all the data parameters
try{
Map dataParameters = new HashMap();
SourceBean dataSB = (SourceBean)content.getAttribute(CONF);
List dataAttrsList = dataSB.getContainedSourceBeanAttributes();
Iterator dataAttrsIter = dataAttrsList.iterator();
while(dataAttrsIter.hasNext()) {
SourceBeanAttribute paramSBA = (SourceBeanAttribute)dataAttrsIter.next();
SourceBean param = (SourceBean)paramSBA.getValue();
String nameParam = (String)param.getAttribute("name");
String valueParam = (String)param.getAttribute("value");
dataParameters.put(nameParam, valueParam);
}
if(dataParameters.get(CONF_DATASET)!=null && !(((String)dataParameters.get(CONF_DATASET)).equalsIgnoreCase("") )){
confDataset=(String)dataParameters.get(CONF_DATASET);
isLovConfDefined=true;
}
else {
isLovConfDefined=false;
}
legend=true;
if(dataParameters.get(LEGEND)!=null && !(((String)dataParameters.get(LEGEND)).equalsIgnoreCase("") )){
String leg=(String)dataParameters.get(LEGEND);
if(leg.equalsIgnoreCase("false"))
legend=false;
}
legendPosition="bottom";
if(dataParameters.get(LEGEND_POSITION)!=null && !(((String)dataParameters.get(LEGEND_POSITION)).equalsIgnoreCase("") )){
String leg=(String)dataParameters.get(LEGEND_POSITION);
if(leg.equalsIgnoreCase("bottom") || leg.equalsIgnoreCase("left") || leg.equalsIgnoreCase("right") || leg.equalsIgnoreCase("top"))
legendPosition=leg;
}
filter=true;
if(dataParameters.get(VIEW_FILTER)!=null && !(((String)dataParameters.get(VIEW_FILTER)).equalsIgnoreCase("") )){
String fil=(String)dataParameters.get(VIEW_FILTER);
if(fil.equalsIgnoreCase("false"))
filter=false;
}
slider=true;
if(dataParameters.get(VIEW_SLIDER)!=null && !(((String)dataParameters.get(VIEW_SLIDER)).equalsIgnoreCase("") )){
String sli=(String)dataParameters.get(VIEW_SLIDER);
if(sli.equalsIgnoreCase("false"))
slider=false;
}
sliderStartFromEnd=false;
if(dataParameters.get(SLIDER_START_FROM_END)!=null && !(((String)dataParameters.get(SLIDER_START_FROM_END)).equalsIgnoreCase("") )){
String sli=(String)dataParameters.get(SLIDER_START_FROM_END);
if(sli.equalsIgnoreCase("true"))
sliderStartFromEnd=true;
}
positionSlider="top";
if(dataParameters.get(POSITION_SLIDER)!=null && !(((String)dataParameters.get(POSITION_SLIDER)).equalsIgnoreCase("") )){
positionSlider=(String)dataParameters.get(POSITION_SLIDER);
}
//reading series orders if present
SourceBean sbSerieLabels = (SourceBean)content.getAttribute(SERIES_LABELS);
// back compatibility
if(sbSerieLabels==null){
sbSerieLabels = (SourceBean)content.getAttribute("CONF.SERIES_LABELS");
}
if(sbSerieLabels!=null){
seriesLabelsMap=new LinkedHashMap();
List atts=sbSerieLabels.getContainedAttributes();
String serieLabel="";
for (Iterator iterator = atts.iterator(); iterator.hasNext();) {
SourceBeanAttribute object = (SourceBeanAttribute) iterator.next();
String serieName=(String)object.getKey();
serieLabel=new String((String)object.getValue());
if(serieLabel!=null){
seriesLabelsMap.put(serieName, serieLabel);
}
}
}
SourceBean styleLegendSB = (SourceBean)content.getAttribute(LEGEND_STYLE);
if(styleLegendSB!=null){
String fontS = (String)styleLegendSB.getAttribute(FONT_STYLE);
String sizeS = (String)styleLegendSB.getAttribute(SIZE_STYLE);
String colorS = (String)styleLegendSB.getAttribute(COLOR_STYLE);
try{
Color color=Color.decode(colorS);
int size=Integer.valueOf(sizeS).intValue();
styleLegend=new StyleLabel(fontS,size,color);
}
catch (Exception e) {
logger.error("Wrong style Legend settings, use default");
}
}
}
catch (Exception e) {
logger.error(e.getCause()+" "+e.getStackTrace());
logger.error("many error in reading data source parameters",e);
}
}
/**
* This function creates the chart object.
*
* @param chartTitle the chart title
* @param dataset the dataset
*
* @return the j free chart
*/
public JFreeChart createChart(DatasetMap dataset) {
return null;
}
/**
* This function creates the object of the right subtype as specified by type and subtype parameters found in template.
*
* @param type the type
* @param subtype the subtype
*
* @return the chart impl
*/
public static ChartImpl createChart(String type,String subtype){
ChartImpl sbi=null;
if(type.equals(DIAL_CHART)){
if(subtype.equalsIgnoreCase(speedometer)){
sbi=new SBISpeedometer();
}
if(subtype.equalsIgnoreCase(speedometerMultiValue)){
sbi=new SpeedometerMultiValue();
}
else if(subtype.equalsIgnoreCase(simpledial)){
sbi= new SimpleDial();
}
else if(subtype.equalsIgnoreCase(thermomether)){
sbi= new Thermometer();
}
else if(subtype.equalsIgnoreCase(meter)){
sbi= new Meter();
}
else if(subtype.equalsIgnoreCase(bullet)){
sbi= new BulletGraph();
}
}
else if(type.equals(PIECHART)){
if(subtype.equalsIgnoreCase(simplepie)){
sbi=new SimplePie();
}
if(subtype.equalsIgnoreCase(linkablepie)){
sbi=new LinkablePie();
}
}
else if(type.equals(BARCHART)){
if(subtype.equalsIgnoreCase(simplebar)){
sbi=new SimpleBar();
}
else if(subtype.equalsIgnoreCase(linkablebar)){
sbi=new LinkableBar();
}
else if(subtype.equalsIgnoreCase(overlaid_barline)){
sbi=new OverlaidBarLine();
}
else if(subtype.equalsIgnoreCase(stacked_bar)){
sbi=new StackedBar();
}
else if(subtype.equalsIgnoreCase(stacked_bar_group)){
sbi=new StackedBarGroup();
}
else if(subtype.equalsIgnoreCase(overlaid_stacked_barline)){
sbi=new OverlaidStackedBarLine();
}
else if(subtype.equalsIgnoreCase(combined_category_bar)){
sbi=new CombinedCategoryBar();
}
}
else if(type.equals(BOXCHART)){
if(subtype.equalsIgnoreCase(simplebox)){
sbi=new SimpleBox();
}
}
else if(type.equals(CLUSTERCHART)){
if(subtype.equalsIgnoreCase(simplecluster)){
sbi=new SimpleCluster();
}
}
else if(type.equals(XYCHART)){
if(subtype.equalsIgnoreCase(blockchart)){
sbi=new BlockChart();
}
}
else if(type.equals(SCATTERCHART)){
if(subtype.equalsIgnoreCase(simplescatter)){
sbi=new SimpleScatter();
}
if(subtype.equalsIgnoreCase(markerscatter)){
sbi=new MarkerScatter();
}
}
else if(type.equals(TARGETCHART)){
if(subtype.equalsIgnoreCase(sparkline)){
sbi=new SparkLine();
}
if(subtype.equalsIgnoreCase(winlose)){
sbi=new WinLose();
}
}
else if(type.equals(BLOCKCHART)){
if(subtype.equalsIgnoreCase(simpletimeblock)){
sbi=new TimeBlockChart();
}
}
return sbi;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#getData()
*/
public String getData() {
return data;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#getHeight()
*/
public int getHeight() {
return height;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#getName()
*/
public String getName() {
return name;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#getWidth()
*/
public int getWidth() {
return width;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#setData(java.lang.String)
*/
public void setData(String _data) {
data=_data;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#setHeight(int)
*/
public void setHeight(int _height) {
height=_height;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#setName(java.lang.String)
*/
public void setName(String _name) {
name=_name;
}
public void setSubName(String _name) {
subName=_name;
}
/**
* @return the subName
*/
public String getSubName() {
return subName;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#setWidth(int)
*/
public void setWidth(int _width) {
width=_width;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#calculateValue()
*/
public DatasetMap calculateValue() throws Exception {
return null;
}
/**
* Gets the conf dataset.
*
* @return the conf dataset
*/
public String getConfDataset() {
return confDataset;
}
/**
* Sets the conf dataset.
*
* @param confDataset the new conf dataset
*/
public void setConfDataset(String confDataset) {
this.confDataset = confDataset;
}
/**
* Gets the profile.
*
* @return the profile
*/
public IEngUserProfile getProfile() {
return profile;
}
/**
* Sets the profile.
*
* @param profile the new profile
*/
public void setProfile(IEngUserProfile profile) {
this.profile = profile;
}
/**
* Checks if is lov conf defined.
*
* @return true, if is lov conf defined
*/
public boolean isLovConfDefined() {
return isLovConfDefined;
}
/**
* Sets the lov conf defined.
*
* @param isLovConfDefined the new lov conf defined
*/
public void setLovConfDefined(boolean isLovConfDefined) {
this.isLovConfDefined = isLovConfDefined;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#isLinkable()
*/
public boolean isLinkable() {
return false;
}
/**
* Gets the type.
*
* @return the type
*/
public String getType() {
return type;
}
/**
* Sets the type.
*
* @param type the new type
*/
public void setType(String type) {
this.type = type;
}
/**
* Gets the subtype.
*
* @return the subtype
*/
public String getSubtype() {
return subtype;
}
/**
* Sets the subtype.
*
* @param subtype the new subtype
*/
public void setSubtype(String subtype) {
this.subtype = subtype;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#isChangeableView()
*/
public boolean isChangeableView() {
return false;
}
/**
* Gets the change view label.
*
* @param theme the theme
* @param i the i
*
* @return the change view label
*/
public String getChangeViewLabel(String theme, int i) {
return "";
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#setChangeViewChecked(boolean)
*/
public void setChangeViewChecked(boolean b) {
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#getPossibleChangePars()
*/
public List getPossibleChangePars() {
return new Vector();
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#setChangeViewsParameter(java.lang.String, boolean)
*/
public void setChangeViewsParameter(String changePar, boolean how) {
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#getChangeViewParameter(java.lang.String)
*/
public boolean getChangeViewParameter(String changePar) {
return false;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#getChangeViewParameterLabel(java.lang.String, int)
*/
public String getChangeViewParameterLabel(String changePar, int i) {
return null;
}
/**
* Gets the color.
*
* @return the color
*/
public Color getColor() {
return color;
}
/**
* Sets the color.
*
* @param color the new color
*/
public void setColor(Color color) {
this.color = color;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#filterDataset(org.jfree.data.general.Dataset, java.util.HashMap, int, int)
*/
public Dataset filterDataset(Dataset dataset, HashMap categories, int catSelected, int numberCatsVisualization) {
return null;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#isLegend()
*/
public boolean isLegend() {
return legend;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#setLegend(boolean)
*/
public void setLegend(boolean legend) {
this.legend = legend;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#getParametersObject()
*/
public Map getParametersObject() {
return parametersObject;
}
/* (non-Javadoc)
* @see it.eng.spagobi.engines.chart.bo.IChart#setParametersObject(java.util.Map)
*/
public void setParametersObject(Map parametersObject) {
this.parametersObject = parametersObject;
}
public boolean isFilter() {
return filter;
}
public void setFilter(boolean filter) {
this.filter = filter;
}
public boolean isSlider() {
return slider;
}
/**
* @return the positionSlider
*/
public String getPositionSlider() {
return positionSlider;
}
/**
* @param positionSlider the positionSlider to set
*/
public void setPositionSlider(String positionSlider) {
this.positionSlider = positionSlider;
}
public void setSlider(boolean slider) {
this.slider = slider;
}
public void setTitleParameter(List atts) {
try{
String tmpTitle=new String(name);
if (tmpTitle.indexOf("$F{") >= 0){
String parName = tmpTitle.substring(tmpTitle.indexOf("$F{")+3, tmpTitle.indexOf("}"));
logger.debug("parName: " + parName);
for (Iterator iterator2 = atts.iterator(); iterator2.hasNext();) {
SourceBeanAttribute object = (SourceBeanAttribute) iterator2.next();
String nameP=new String(object.getKey());
String value=new String((String)object.getValue());
logger.debug("nameP: " + nameP + " - value: "+ value);
if(nameP.equalsIgnoreCase(parName))
{
int pos = tmpTitle.indexOf("$F{"+parName+"}") + (parName.length()+4);
name = name.replace("$F{" + parName + "}", value);
tmpTitle = tmpTitle.substring(pos);
}
}
}
}
catch (Exception e) {
logger.error("Error in parameters Title:", e);
}
}
public void setSubTitleParameter(List atts) {
try{
String tmpTitle=new String(getSubName());
if (tmpTitle != null && tmpTitle.indexOf("$F{") >= 0){
String parName = tmpTitle.substring(tmpTitle.indexOf("$F{")+3, tmpTitle.indexOf("}"));
for (Iterator iterator2 = atts.iterator(); iterator2.hasNext();) {
SourceBeanAttribute object = (SourceBeanAttribute) iterator2.next();
String nameP=new String(object.getKey());
String value=(object.getValue()==null)?" ":new String((String)object.getValue());
if (nameP.equalsIgnoreCase(parName))
{
int pos = tmpTitle.indexOf("$F{"+parName+"}") + (parName.length()+4);
setSubName(getSubName().replace("$F{" + parName + "}", value));
tmpTitle = tmpTitle.substring(pos);
}
}
}
}
catch (Exception e) {
logger.error("Error in parameters SubTitle");
}
}
public void setSubTitleParameter(String attValue) {
try{
String tmpTitle=new String(getSubName());
if (tmpTitle != null && tmpTitle.indexOf("$F{") >= 0){
String parName = tmpTitle.substring(tmpTitle.indexOf("$F{")+3, tmpTitle.indexOf("}"));
int pos = tmpTitle.indexOf("$F{"+parName+"}") + (parName.length()+4);
setSubName(getSubName().replace("$F{" + parName + "}", attValue));
tmpTitle = tmpTitle.substring(pos);
}
}
catch (Exception e) {
logger.error("Error in parameters SubTitle");
}
}
public void setTitleParameter(String attValue) {
try{
String tmpTitle=new String(getName());
if (tmpTitle != null && tmpTitle.indexOf("$F{") >= 0){
String parName = tmpTitle.substring(tmpTitle.indexOf("$F{")+3, tmpTitle.indexOf("}"));
int pos = tmpTitle.indexOf("$F{"+parName+"}") + (parName.length()+4);
setSubName(getName().replace("$F{" + parName + "}", attValue));
tmpTitle = tmpTitle.substring(pos);
}
}
catch (Exception e) {
logger.error("Error in parameters Title");
}
}
public TextTitle setStyleTitle(String title,StyleLabel titleLabel){
Font font=null;
Color color=null;
boolean definedFont=true;
boolean definedColor=true;
if(titleLabel!=null ){
if(titleLabel.getFont()!=null){
font=titleLabel.getFont();
}
else{
definedFont=false;
}
if(titleLabel.getColor()!=null){
color=titleLabel.getColor();
}
else{
definedColor=false;
}
}
else{
definedColor=false;
definedFont=false;
}
if(!definedFont)
font=new Font("Tahoma", Font.BOLD, 18);
if(!definedColor)
color=Color.BLACK;
TextTitle titleText=new TextTitle(title,font,color, RectangleEdge.TOP, HorizontalAlignment.CENTER, VerticalAlignment.TOP, RectangleInsets.ZERO_INSETS);
return titleText;
}
public int getTitleDimension() {
return titleDimension;
}
public void setTitleDimension(int titleDimension) {
this.titleDimension = titleDimension;
}
public HashMap getSeriesLabels() {
return seriesLabelsMap;
}
public void setSeriesLabels(HashMap seriesLabels) {
this.seriesLabelsMap = seriesLabels;
}
public String getLegendPosition() {
return legendPosition;
}
public void setLegendPosition(String legendPosition) {
this.legendPosition = legendPosition;
}
/**
* @return the multichart
*/
public boolean getMultichart() {
return multichart;
}
/**
* @param multichart the multichart to set
*/
public void setMultichart(boolean multichart) {
this.multichart = multichart;
}
/**
* @return the orientationMultichart
*/
public String getOrientationMultichart() {
return orientationMultichart;
}
/**
* @param orientationMultichart the orientationMultichart to set
*/
public void setOrientationMultichart(String orientationMultichart) {
this.orientationMultichart = orientationMultichart;
}
public void drawLegend(JFreeChart chart){
//remove ipotetical other legend
chart.removeLegend();
BlockContainer wrapper = new BlockContainer(new BorderArrangement());
wrapper.setFrame(new BlockBorder(1.0, 1.0, 1.0, 1.0));
/*LabelBlock titleBlock = new LabelBlock("Legend Items:",
new Font("SansSerif", Font.BOLD, 12));
titleBlock.setPadding(5, 5, 5, 5);
wrapper.add(titleBlock, RectangleEdge.TOP);*/
LegendTitle legend = new LegendTitle(chart.getPlot());
BlockContainer items = legend.getItemContainer();
if(styleLegend!=null && styleLegend.getFont()!=null){
legend.setItemFont(new Font(styleLegend.getFontName(), Font.BOLD, styleLegend.getSize()));
}
items.setPadding(2, 5, 5, 2);
wrapper.add(items);
legend.setWrapper(wrapper);
if(legendPosition.equalsIgnoreCase("bottom")) legend.setPosition(RectangleEdge.BOTTOM);
else if(legendPosition.equalsIgnoreCase("left")) legend.setPosition(RectangleEdge.LEFT);
else if(legendPosition.equalsIgnoreCase("right")) legend.setPosition(RectangleEdge.RIGHT);
else if(legendPosition.equalsIgnoreCase("top")) legend.setPosition(RectangleEdge.TOP);
else legend.setPosition(RectangleEdge.BOTTOM);
legend.setHorizontalAlignment(HorizontalAlignment.CENTER);
chart.addSubtitle(legend);
}
public void setLocalizedTitle() {
if(name!=null){
IMessageBuilder msgBuilder = MessageBuilderFactory.getMessageBuilder();
String toSet=msgBuilder.getUserMessage(name, SpagoBIConstants.DEFAULT_USER_BUNDLE, locale);
setName(toSet);
}
return;
}
public boolean isSliderStartFromEnd() {
return sliderStartFromEnd;
}
public void setSliderStartFromEnd(boolean sliderStartFromEnd) {
this.sliderStartFromEnd = sliderStartFromEnd;
}
public Locale getLocale() {
return locale;
}
public void setLocale(Locale locale) {
this.locale = locale;
}
}