Java tutorial
/** SpagoBI, the Open Source Business Intelligence suite Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. **/ package it.eng.spagobi.studio.extchart.utils; import it.eng.spagobi.studio.extchart.configuration.ExtChartConfigurations; import it.eng.spagobi.studio.extchart.model.bo.Axes; import it.eng.spagobi.studio.extchart.model.bo.AxesList; import it.eng.spagobi.studio.extchart.model.bo.ExtChart; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Vector; import org.dom4j.Document; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.eclipse.core.runtime.Platform; import org.osgi.framework.Bundle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExtChartUtils { private static Logger logger = LoggerFactory.getLogger(ExtChartUtils.class); /** Get input stream from a resource * * @param resourcePath * @return * @throws IOException */ public static InputStream getInputStreamFromResource(String resourcePath) throws IOException { Bundle b = Platform.getBundle(it.eng.spagobi.studio.extchart.Activator.PLUGIN_ID); URL res = b.getResource(resourcePath); InputStream is = res.openStream(); return is; } /** Get the chart image path for the selected type * * @param imageType * @return * @throws Exception */ public static String getChartImagePath(String imageType) throws Exception { String toReturn = null; InputStream is = getInputStreamFromResource(ExtChartConfigurations.INFO_FILE); Document document = new SAXReader().read(is); List charts = document.selectNodes("//EXTCHARTS/EXTCHART"); if (charts == null || charts.size() == 0) throw new Exception("No charts configured"); for (int i = 0; i < charts.size(); i++) { Node chart = (Node) charts.get(i); String type = chart.valueOf("@type"); if (imageType.equalsIgnoreCase(type)) { String imagePath = chart.valueOf("@imagePath"); toReturn = imagePath; break; } } return toReturn; } public static String getXAxeTypeFromChartType(String chartType) throws Exception { String toReturn = null; InputStream is = getInputStreamFromResource(ExtChartConfigurations.INFO_FILE); Document document = new SAXReader().read(is); List charts = document.selectNodes("//EXTCHARTS/EXTCHART"); if (charts == null || charts.size() == 0) throw new Exception("No charts configured"); for (int i = 0; i < charts.size(); i++) { Node chart = (Node) charts.get(i); String type = chart.valueOf("@type"); if (chartType.equalsIgnoreCase(type)) { String imagePath = chart.valueOf("@xAxeName"); toReturn = imagePath; break; } } return toReturn; } public static String getYAxeTypeFromChartType(String chartType) throws Exception { String toReturn = null; InputStream is = getInputStreamFromResource(ExtChartConfigurations.INFO_FILE); Document document = new SAXReader().read(is); List charts = document.selectNodes("//EXTCHARTS/EXTCHART"); if (charts == null || charts.size() == 0) throw new Exception("No charts configured"); for (int i = 0; i < charts.size(); i++) { Node chart = (Node) charts.get(i); String type = chart.valueOf("@type"); if (chartType.equalsIgnoreCase(type)) { String imagePath = chart.valueOf("@yAxeName"); toReturn = imagePath; break; } } return toReturn; } public static String getSerieTypeFromChartType(String chartType) throws Exception { String toReturn = null; InputStream is = getInputStreamFromResource(ExtChartConfigurations.INFO_FILE); Document document = new SAXReader().read(is); List charts = document.selectNodes("//EXTCHARTS/EXTCHART"); if (charts == null || charts.size() == 0) throw new Exception("No charts configured"); for (int i = 0; i < charts.size(); i++) { Node chart = (Node) charts.get(i); String type = chart.valueOf("@type"); if (chartType.equalsIgnoreCase(type)) { String imagePath = chart.valueOf("@defaultSerieType"); toReturn = imagePath; break; } } return toReturn; } /** * @return */ static public Axes getAxeFromPosition(ExtChart extChart, String position) { logger.debug("IN"); Axes toReturn = null; AxesList axesList = extChart.getAxesList(); for (Iterator iterator = axesList.getAxes().iterator(); iterator.hasNext();) { Axes axe = (Axes) iterator.next(); if (axe.getPosition() != null && axe.getPosition().equalsIgnoreCase(position)) { toReturn = axe; break; } } if (toReturn != null) logger.debug("found axe on the " + position); else logger.debug(position + " axe not found"); logger.debug("OUT"); return toReturn; } /** * @return */ static public Axes getAxeFromPositionAndType(ExtChart extChart, String type, String position) { logger.debug("IN"); Axes toReturn = null; AxesList axesList = extChart.getAxesList(); for (Iterator iterator = axesList.getAxes().iterator(); iterator.hasNext();) { Axes axe = (Axes) iterator.next(); if (axe.getType() != null && axe.getType().equalsIgnoreCase(type)) { if (axe.getPosition() != null && axe.getPosition().equalsIgnoreCase(position)) { toReturn = axe; break; } } } if (toReturn != null) logger.debug("found axe of type " + type + " on the " + position); else logger.debug(type + " axe at position " + position + " not found"); logger.debug("OUT"); return toReturn; } static public Axes getXAxe(ExtChart extChart) { logger.debug("IN"); Axes toReturn = null; AxesList axesList = extChart.getAxesList(); String typeToSearch = null; try { typeToSearch = getXAxeTypeFromChartType(extChart.getType()); } catch (Exception e) { logger.error("error in reading xml configuration file, check its syntax", e); throw new RuntimeException("error in reading xml configuration file, check its syntax", e); } logger.debug("return axe of type " + typeToSearch); for (Iterator iterator = axesList.getAxes().iterator(); iterator.hasNext();) { Axes axe = (Axes) iterator.next(); if (axe.getType() != null && axe.getType().equalsIgnoreCase(typeToSearch)) { toReturn = axe; break; } } if (toReturn != null) logger.debug("found axe"); else logger.debug(" axe not found"); logger.debug("OUT"); return toReturn; } // // order of retrieval: the order is left, bottom, right top // static public ArrayList<Axes> orderAxes(AxesList axesList){ // logger.debug("IN"); // Vector<Axes> axes = axesList.getAxes(); // Axes leftAxe; // Axes rightAxe; // Axes rightAxe; // // // logger.debug("OUT"); // } // order can be 1 or 2 static public Axes getYAxe(ExtChart extChart) { logger.debug("IN"); Axes toReturn = null; AxesList axesList = extChart.getAxesList(); String typeToSearch = null; try { typeToSearch = getYAxeTypeFromChartType(extChart.getType()); } catch (Exception e) { logger.error("error in reading xml configuration file, check its syntax", e); throw new RuntimeException("error in reading xml configuration file, check its syntax", e); } logger.debug("return axe of type " + typeToSearch); for (Iterator iterator = axesList.getAxes().iterator(); iterator.hasNext();) { Axes axe = (Axes) iterator.next(); if (axe.getType() != null && axe.getType().equalsIgnoreCase(typeToSearch)) { toReturn = axe; break; } } if (toReturn != null) logger.debug("found axe"); else logger.debug(" axe not found"); logger.debug("OUT"); return toReturn; } // order can be 1 or 2; order is left = 0, bottom = 1, right = 2, top = 3 static public Axes getYAxe(ExtChart extChart, int order) { final Integer LEFT = 0; final Integer BOTTOM = 1; final Integer RIGHT = 2; final Integer TOP = 3; logger.debug("IN"); Axes[] axes = new Axes[4]; Axes toReturn = null; AxesList axesList = extChart.getAxesList(); String typeToSearch = null; try { typeToSearch = getYAxeTypeFromChartType(extChart.getType()); } catch (Exception e) { logger.error("error in reading xml configuration file, check its syntax", e); throw new RuntimeException("error in reading xml configuration file, check its syntax", e); } logger.debug("return axe of type " + typeToSearch); for (Iterator iterator = axesList.getAxes().iterator(); iterator.hasNext();) { Axes axe = (Axes) iterator.next(); if (axe.getType() != null && axe.getType().equalsIgnoreCase(typeToSearch)) { String position = axe.getPosition(); if (position.equalsIgnoreCase("left")) axes[LEFT] = axe; else if (position.equalsIgnoreCase("bottom")) axes[BOTTOM] = axe; else if (position.equalsIgnoreCase("right")) axes[RIGHT] = axe; else if (position.equalsIgnoreCase("top")) axes[TOP] = axe; } } if (toReturn != null) logger.debug("found axe"); else logger.debug(" axe not found"); int counter = 0; for (int i = 0; i < axes.length; i++) { Axes a = axes[i]; if (a != null) { counter++; if (counter == order) { logger.debug("found axe"); toReturn = a; } } } logger.debug("OUT"); return toReturn; } static public void deleteNumericAxe(ExtChart extChart, String typeToSearch, String position) { logger.debug("IN"); AxesList axesList = extChart.getAxesList(); for (Iterator iterator = axesList.getAxes().iterator(); iterator.hasNext();) { Axes axe = (Axes) iterator.next(); if (axe.getType() != null && axe.getType().equalsIgnoreCase(typeToSearch)) { if (axe.getPosition() != null && axe.getPosition() == position) { logger.debug("delete axe in position " + position); int index = axesList.getAxes().indexOf(axe); axesList.getAxes().remove(index); break; } } } logger.debug("OUT"); } static public void updateAxesField(ExtChart extChart, String typeToSearch, String fieldsToInsert, String position) { logger.debug("IN"); AxesList axesList = extChart.getAxesList(); for (Iterator iterator = axesList.getAxes().iterator(); iterator.hasNext();) { Axes axe = (Axes) iterator.next(); if (axe.getType() != null && axe.getType().equalsIgnoreCase(typeToSearch)) { if (axe.getPosition() != null && axe.getPosition() == position) { logger.debug("change fields_list of axe in position " + position); logger.debug("fields_list to insert are " + fieldsToInsert); axe.setFields_list(fieldsToInsert); break; } } } logger.debug("OUT"); } }