5
respostas

Criar um objeto a partir de duas classes que já estão relacionadas

Olá! Tenho duas classes que possuem relacionamento, uma é a Categoria e a outra Despesas. Como posso criar um objeto a partir dessas duas classes resultando no seguinte formato de objeto?

data: [{
            name: 'Categoria 1',
            y:  4, // Quantidade de Despesas para essa categ
            drilldown: 'Categoria1'
        }, {
            name: 'Categoria 2',
            y: 5, // Quantidade de Despesas para essa categ
            drilldown: 'Categoria2'
        }, {
            name: 'Categoria 3',
            y: 6, // Quantidade de Despesas para essa categ
            drilldown: 'Categoria3
}]
 series: [{
            id: 'Categoria1',
            data: [
                ['Despesa1', 4],
                ['Despesa4', 2],
                ['Despesa6', 1],
                ['Despesa8', 4]
            ]
        }, {
            id: 'Categoria2',
            data: [
              ['Despesa1', 7],
              ['Despesa4', 5],
              ['Despesa6', 2]
            ]
        }, {
            id: 'Categoria3',
            data: [
             ['Despesa7', 5],
             ['Despesa3', 6],
             ['Despesa5', 2],
             ['Despesa1',1]
            ]
        }]

Com essa formatação eu preencho um gráfico HighCharts, na qual dentro de todos os que consegui configurar, esse esta me dando um trabalho por ter duas classes envolvidas, e não tenho conseguido, apesar de pesquisar na documentação oficial do site e na rede, não encontrei um solução para essa situação! Também tentei fazer o retorno da lista que tem o relacionamento e fazer o tratamento dos dados no javascript e não consegui.

Obrigado!

5 respostas

Minha sugestão é que você crie uma nova classe só para mapear esse json, algo como DadosRelatorio. Ex:

class DadosRelatorio {
   private List<Data> data = new ArrayList<Data>();
   private List<Serie> series = new ArrayList<Serie>();

  ...
}

Você ainda vai precisar criar a classe Data e Serie e vai preencher tudo em função dos seus objetos de negócio, Categoria e Despesa.

Ok Alberto, providencial a sua dica! Agora que criei as classes, como faço para preenche-las visto que elas não se relacionam?

Você pode receber os objetos do tipo categoria e despesa como argumento do construtor no DadosRelatorio, aí você vai pegando as informações de um objeto e passando para o outro.

Esta aqui a classe que falou criei ela com GraficosPie

public class GraficosPie extends AbstractPersistable<Long>{

    private List<Data> data = new ArrayList<Data>();
    private List<Series> series = new ArrayList<Series>();
    public GraficosPie(List<Data> data, List<Series> series, CatTipoDespesas catDespesas,  MinhasDespesas minhasDespesas) {
        super();
        this.data = data;
        this.series = series;
    }
    //ggas

Classe Data:

public class Data extends AbstractPersistable<Long> {

    private String name;
    private Integer y;
    private String drilldown;
    //ggas

A classe Series:

public class Series extends AbstractPersistable<Long>{
    private Integer identificador;
    private String data;
    //ggas

E implementação no controller que preciso chamar os dados:


        List<Data> data = new ArrayList<Data>();
        List<Series> series = new ArrayList<Series>();
        CatTipoDespesas catDespesas = new CatTipoDespesas();
        MinhasDespesas minhasDespesas = new MinhasDespesas();

        GraficosPie graficoPie = new GraficosPie(data, series, catDespesas, minhasDespesas);

Está correto? Como passo os dados, nesse caso, de um objeto para o outro?

Alberto, trabalhei com objetos em algumas classes até agora, mas com muitas iguais a esse exemplo, tenho muitas dúvidas.... Pode dar um caminho?