método que retorna um BigDecimal com os valores do gráfico na pag web

4 respostas
T

salve, salve...

eu preciso plotar um grafico na minha pagina web, a partir do que for inserido no banco de dados. A classe que tem essa função é ContaService, que deve possuir a implementação do seguinte método:

public BigDecimal consultarValorTotalPorTipoConta(TipoConta despesa) {

		return null;
	}
se eu quiser que o grafico insira qualquer valor como teste, ou seja, magic numbers, para ser mais especifico, eu fiz assim:
public BigDecimal consultarValorTotalPorTipoConta(TipoConta despesa) {

		return new BigDecimal(3569.85);
	}

com esse metodo me retornou o grafico na tela bonitin, mas com um valor inserido "na mao".

como eu faço para instanciar um objeto dessa classe BigDecimal e me retornar o que foi inserido no banco??

Minha servlet que gera o grafico segue abaixo:

package br.com.financas.imperiumpecunia.servlets;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

import br.com.financas.imperiumpecunia.dominio.TipoConta;
import br.com.financas.imperiumpecunia.negocio.ContaService;

public class GraficoPizzaDespesasReceitasServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("image/png");
		OutputStream output = response.getOutputStream();

		BufferedImage image = criarGrafico(criarDataSet()).createBufferedImage(
				650, 250);
		ImageIO.write(image, "png", output);

		output.close();
	}

	private PieDataset criarDataSet() {
		NumberFormat formatador = DecimalFormat.getNumberInstance(new Locale(
				"pt", "BR"));
		ContaService contaService = new ContaService();
		BigDecimal valorDespesas = contaService
				.consultarValorTotalPorTipoConta(TipoConta.DESPESA);
		BigDecimal valorReceitas = contaService
				.consultarValorTotalPorTipoConta(TipoConta.RECEITA);

		DefaultPieDataset dataSet = new DefaultPieDataset();

		dataSet.setValue("Despesas [" + formatador.format(valorDespesas) + "]",
				valorDespesas);
		dataSet.setValue("Receitas [" + formatador.format(valorReceitas) + "]",
				valorReceitas);
		return dataSet;
	}

	private JFreeChart criarGrafico(PieDataset dataSet) {
		JFreeChart chart = ChartFactory.createPieChart3D("Receitas x Despesas",
				dataSet, false, true, false);
		PiePlot3D plot = (PiePlot3D) chart.getPlot();
		plot.setBackgroundPaint(Color.WHITE);
		plot.setStartAngle(290);
		plot.setForegroundAlpha(0.5f);
		return chart;
	}
}

galera, por favor, preciso de uma ajuda de vcs!

agradeço.

4 Respostas

A

você chegou a dar uma lida na documentação do BigDecimal ou em alguma outra documentação para ver se encontrava o eixo da solução ou você já testou várias coisas?

T

meu velho, agradeço pela resposta…

ja dei uma lida sim na API, mas confesso q nao entendi mtu bem… e ja testei d varias maneiras o retorno desse metodo.

tu tem como me ajudar?

T

galera, me da uma ajuda aew… preciso resolver esse metodo, sem passar um primitivo e nao to sabendo.

R

Olá amigo,
Sei que o post eh antigo, acompanhei a apostila e vi esse erro.
Conseguiu resolver
Fiz como estah aqui embaixo.
Abraços,
Roberto

O meu ficou assim:

public interface ContaDAO extends GenericDAO<Conta> {
	
	...

	public Integer consultarValorTotalPorTipoConta(TipoConta tipoConta);
}
public class HibernateContaDAO extends HibernateGenericDAO<Conta> implements ContaDAO {
	
	...

	public Integer consultarValorTotalPorTipoConta(TipoConta tipoConta) {
		Criteria criteria = this.getSession().createCriteria(Conta.class);
		criteria.setProjection(Projections.rowCount());
		criteria.add(Restrictions.eq("tipo", tipoConta));
		return (Integer) criteria.uniqueResult();
	}
}
public class ContaService {

	...

	public Integer consultarValorTotalPorTipoConta(TipoConta tipoConta) {
		DAOFactory daoFactory = DAOFactory.getDAOFactory();
		ContaDAO contaDAO = daoFactory.getContaDAO();
		Integer valorTotalPorTipoConta = contaDAO.consultarValorTotalPorTipoConta(tipoConta);
		daoFactory.encerrar();
		return valorTotalPorTipoConta;
	}
}
public class GraficoPizzaDespesasReceitasServlet extends HttpServlet {

	...

	private PieDataset criarDataSet() {
		NumberFormat formatador = DecimalFormat.getNumberInstance(new Locale("pt", "BR"));
		ContaService contaService = new ContaService();
		Integer valorDespesas = contaService.consultarValorTotalPorTipoConta(TipoConta.DESPESA);
		Integer valorReceitas = contaService.consultarValorTotalPorTipoConta(TipoConta.RECEITA);
		DefaultPieDataset dataSet = new DefaultPieDataset();
		dataSet.setValue("Despesas [" + formatador.format(valorDespesas) + "]", valorDespesas);
		dataSet.setValue("Receitas [" + formatador.format(valorReceitas) + "]", valorReceitas);
		return dataSet;
	}

	...

}
Criado 26 de julho de 2011
Ultima resposta 27 de mai. de 2012
Respostas 4
Participantes 3