7
respostas

Como transitar objeto entre essas classes

Olá pessoal, estou com uma dúvida diante de uma situação que foi colocada aqui mesmo no fórum, como posso transitar um objeto em mais de três classes sendo que esses objeto preciso dele em forma de lista. A saída que em JSON que preciso é esta:

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]
            ]
        }]

A sugestão dada foi para que eu criasse 3 classes para poder chamar o objeto entre essas classes para ter a saída correta. Segue as 3 classes:

public class GraficosPie extends AbstractPersistable<Long>{

    public List<Data> data = new ArrayList<Data>();
    private List<Series> series = new ArrayList<Series>();
    public GraficosPie(CatTipoDespesas catDespesas,  MinhasDespesas minhasDespesas) {
        super();
        catDespesas.getNomeTipoDespesas();
        minhasDespesas.getDescricaoDespesa();
        minhasDespesas.getValorDespesa();
    }
    //ggas
}
public class Data extends AbstractPersistable<Long> {
    private Data data;
    private String name;    
    private Integer y;
    private String drilldown;
    //ggas
}
public class Series extends AbstractPersistable<Long>{
    private Integer identificador;
    private String data;
    //ggas
}

Foi pedido ainda para fazer um contrutor da classe GraficosPie e recuperar como argumento os dois objeto que preciso e então pegar as informações de um objeto e passar para outro. As perguntas: 1 - Que tipo de argumento passo no contrutor? List ou objeto normal? 2 - Como recupero esse objeto entre essas classes no controller para gerar s saída correta?

Obrigado pela atenção de quem puder ajudar!

7 respostas

Oi Clerman tudo bem?

Primeiramente, repare que a classe GraficosPie, é a representação do JSON que você precisa gerar, essa classe contem um lista de Data e uma lista de Series. Então, você tem algumas opções, a primeira é você passar no construtor as duas listas que precisa, conforme o código abaixo.

public class GraficosPie extends AbstractPersistable<Long>{

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

A outra opção é passar algum objeto(s), que você consiga extrair essas duas informações (data e series). Agora, como recuperar essas informações vai depender de como seu projeto esta modelado.

Esperto ter ajudado :), Bons Estudos

Olá Caio. Já é um progresso... Agora eu tenho as entidades MinhasDespesas e CaTipoDespesas que possuem relacionamentos, como passo esses objetos para serem recuperados no objeto graficoPie.data?

Oi Clerman, voce poderia postar postar as classes MinhasDespesas, CaTipoDespesas para eu te ajudar :)

Com prazer Caio, agradeço muito a força! A primeira é a de categorias:

@Entity
@Table(name = "cat_tipo_despesas")
@JsonIgnoreProperties(value = {"listMinhasDespesas", "limitarGastos", "new"})
public class CatTipoDespesas extends AbstractPersistable<Long> {

    @Column(name = "nome_tipo_despesa", nullable = false, length = 30)
    private String nomeTipoDespesas;

    @Column(name = "cor_tipo_despesa", nullable = false, length = 7)
    private String corTipoDespesas;

    @Column(name ="data_tipo_despesas", nullable = false)
    @DateTimeFormat(pattern = "dd/MM/yyyy HH:MM:SS", iso = ISO.DATE_TIME)
    private LocalDate dataTipoDespesas;

    @Column(name = "descricao_tipo_despesas", nullable = true)
    private String descricaoTipoDespesas;

    @Enumerated(EnumType.STRING)
    @Column(name = "definicao_despesas")
    private GrupoDeDespesas definicaoDespesas;

    @ManyToMany(cascade = CascadeType.REMOVE)
    @JoinTable(
            name = "categorias_has_despesas", 
            joinColumns = @JoinColumn(name = "categoria_id"), 
            inverseJoinColumns = @JoinColumn(name = "despesas_cat_id"))
    private List<MinhasDespesas> listMinhasDespesas;

    @ManyToOne
    @JoinColumn(name = "usuario_id")
    private Usuario usuario;

    @OneToMany(mappedBy = "categoriaTipoDespesas", cascade = CascadeType.ALL)
    private List<DefinirGastos> definirGastos;
}

Essa outra das despesas

@Entity
@Table(name = "minhas_despesas")
@JsonIgnoreProperties(value = { "etiquetas", "new", "usuario" })
public class MinhasDespesas extends AbstractPersistable<Long> {

    @Column(name = "descricao", nullable = true, unique = false)
    private String descricaoDespesa;

    @Column(name = "data_despesa", nullable = true)
    @DateTimeFormat(pattern = "dd/MM/yyyy'T'HH:mm:ss.SSSZ", iso = ISO.DATE_TIME)
    private LocalDateTime dataDespesa;

    @Column(name = "valor", nullable = true)
    @NumberFormat(style = Style.CURRENCY, pattern = ("###,##0.00"))
    private BigDecimal valorDespesa;

    @Column(name = "status", nullable = true)
    private Status status;

    @Column(name = "pagamento", nullable = true)
    private boolean pagamento;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "categorias_has_despesas", joinColumns = @JoinColumn(name = "despesas_cat_id"), inverseJoinColumns = @JoinColumn(name = "categoria_id"))
    private List<CatTipoDespesas> tipoDespesas;

    @Column(name = "cat_id", nullable = true)
    private Integer catDespesaId;

    @Column(name = "cat_nome", nullable = true)
    private String nomeCategoria;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "contas_has_despesas", joinColumns = @JoinColumn(name = "despesas_id"), inverseJoinColumns = @JoinColumn(name = "contas_id"))
    private List<MinhasContas> minhasContas;

    @Column(name = "despesa_fixa", nullable = true)
    private boolean despesaFixa;

    @Column(name = "despesa_fixa_quantidade", nullable = true)
    private Integer despesaFixaQuantida;

    @Enumerated(EnumType.STRING)
    @Column(name = "despesa_fixa_tempo", nullable = true)
    private DespesaFixaTempo despesaFixaTempo;

    @Column(name = "repetir_lanc", nullable = true)
    private boolean repetirLancDespesa;

    @Enumerated(EnumType.STRING)
    @Column(name = "repetir_por_periodo", nullable = true)
    private RepetirPorPeriodo repetirPorPeriodo;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "etiquetas_has_despesas", joinColumns = @JoinColumn(name = "despesas_id"), inverseJoinColumns = @JoinColumn(name = "etiquetas_id"))
    private List<Etiquetas> etiquetas;

    @Column(name = "adicionar_observacao", nullable = true)
    private String addObservacao;

    @ManyToOne(fetch = FetchType.EAGER)
    private GrupoDespesas grupoDespesas;

    @Column(name = "grupos", nullable = true)
    private Integer grupos;

    @Column(name = "cor", nullable = true)
    private String cor;

    @ManyToOne
    @JoinColumn(name = "usuario_id")
    private Usuario usuario;

    // Getters Setters
}

Caio tem alguma sugestão?

Alberto, nesse caso dessas 3 classes, como posso setar um objeto dentro da outra e assim por diante até que me retorne o JSON no formato esperado!

Olá Caio, consegui resolver aqui a saída do json, mas preciso de alguns ajustes: O data em Series esta dentro de um array principal que tem outros arrays... e na meu arquivo é apenas um objeto!

GraficosPie gp = new GraficosPie();
    Map<String, String> map = new HashMap<String, String>(); 

    map.put("Despesa 1", "256000");
    map.put("Despesa 2", "360005");
    map.put("Despesa 3", "987552");

    Data data2 = new Data();
    data2.setName("Despesa 1");
    data2.setY(1);
    data2.setDrilldown("Despesa 1");

    Series series2 = new Series();
    series2.setId(1);
    series2.setData(map);

    List<Data> dt = new ArrayList<Data>();
    dt.add(data2);

    List<Series> sr = new ArrayList<Series>();
    sr.add(series2);

    gp.setData(dt);
    gp.setSeries(sr)