/* * Sistema de Ouvidoria: um canal através do qual os usuários * podem encaminhar suas reclamações, elogios e sugestões. * * Copyright (C) 2011 SERPRO * * Este programa é software livre; você pode redistribuí-lo e/ou * modificá-lo sob os termos da Licença Pública Geral GNU, conforme * publicada pela Free Software Foundation; tanto a versão 2 da * Licença como (a seu critério) qualquer versão mais nova. * * Este programa é distribuído na expectativa de ser útil, mas SEM * QUALQUER GARANTIA; sem mesmo a garantia implícita de * COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM * PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais * detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral GNU, * sob o título "LICENCA.txt", junto com esse programa. Se não, * acesse o Portal do Software Público Brasileiro no endereço * http://www.softwarepublico.gov.br/ ou escreva para a Fundação do * Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston, * MA 02111-1301, USA. * * Contatos através do seguinte endereço internet: * http://www.serpro.gov.br/sistemaouvidoria/ */ package br.gov.serpro.ouvidoria.util.freechart.data; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import org.jfree.chart.labels.PieSectionLabelGenerator; import org.jfree.data.jdbc.JDBCPieDataset; /** * @author SERPRO * @version $Revision: 1.1.2.1 $, $Date: 2011/10/21 18:47:37 $ */ public class EnhancedJDBCPieDataset extends JDBCPieDataset { private static final long serialVersionUID = 1L; private JDBCColumnHelper columnHelper; private boolean appendMode; private boolean useFilter; private PieDatasetFilterListener filter; private PieSectionLabelGenerator labelGenerator; private double maxVal; private double grandTotal; public EnhancedJDBCPieDataset(Connection con) { super(con); init(); } public EnhancedJDBCPieDataset(Connection con, String query) throws SQLException { this(con); executeQuery(query, true); } private void init() { columnHelper = JDBCColumnHelper.getInstance(this); } public final JDBCColumnHelper getColumnHelper() { return columnHelper; } public final double getMaxVal() { return maxVal; } public final double getGrandTotal() { return grandTotal; } public final boolean isAppendMode() { return appendMode; } public final void setAppendMode(boolean appendMode) { this.appendMode = appendMode; } public final PieSectionLabelGenerator getLabelGenerator() { return labelGenerator; } public final void setLabelGenerator(PieSectionLabelGenerator labelGenerator) { this.labelGenerator = labelGenerator; } public final PieDatasetFilterListener getFilter() { return filter; } public final void setFilter(PieDatasetFilterListener filter) { this.filter = filter; useFilter = filter != null; } public final boolean isUseFilter() { return useFilter; } public final void setUseFilter(boolean useFilter) { if (useFilter && filter == null) { throw new IllegalArgumentException("No filter set."); } else { this.useFilter = useFilter; return; } } public void executeQuery(String query) throws SQLException { executeQuery(query, false); } public void executeQuery(String query, boolean closeCon) throws SQLException { try { super.executeQuery(query); } finally { if (closeCon) close(); } return; } public void executeQuery(Connection con, String query) throws SQLException { Statement statement = null; ResultSet resultSet = null; try { statement = con.createStatement(); resultSet = statement.executeQuery(query); loadFrom(resultSet); } finally { JDBCColumnHelper.closeQuietly(resultSet); JDBCColumnHelper.closeQuietly(statement); } return; } public void loadFrom(ResultSet resultSet) throws SQLException { Comparable rowKey = null; int indexes[] = new int[2]; Comparable keys[] = new Comparable[1]; ResultSetMetaData metaData = resultSet.getMetaData(); try { columnHelper.computeIndexes(metaData.getColumnCount(), indexes, keys); } catch (IllegalArgumentException iae) { throw new SQLException(iae.getMessage()); } int rowIndex = indexes[0]; int valueIndex = indexes[1]; rowKey = keys[0]; int columnType = metaData.getColumnType(valueIndex); Number value; while (resultSet.next()) if ((value = JDBCColumnHelper.asNumber( resultSet.getObject(valueIndex), columnType)) != null) { if (rowIndex > 0) rowKey = resultSet.getString(rowIndex); if (useFilter) value = filter.filterValue(rowKey, value, resultSet); double doubleVal = value.doubleValue(); if (doubleVal > maxVal) maxVal = doubleVal; grandTotal += doubleVal; setValue(rowKey, value); } fireDatasetChanged(); } }