Bom dia pessoal
Possuo um objeto que tem referencia a ele mesmo.
Gostaria de fazer com que numa lista ficasse ordenado os objetos da seguinte maneira:
Grupo A
SubGrupo A
SubGrupo A2
Grupo B
SubGrupo B
mas não estou conseguindo.
segue o código da classe e como estou fazendo para ordenar:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.tebosoftware.entity.produto;
import br.tebosoftware.entity.AbstractEntity;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
/**
*
* @author Shubacca
*/
@Entity
@Table(name = "grupo")
public class Grupo extends AbstractEntity<Grupo> {
public static final String PROP_ID = "id";
public static final String PROP_DESCRICAO = "descricao";
public static final String PROP_GRUPO = "grupo";
public static final String PROP_SUBGRUPOS = "subGrupos";
public static final int DESCRICAO_LENGTH = 255;
@Id
@SequenceGenerator(name = "seq_grupo", sequenceName = "seq_grupo", allocationSize = 1)
@GeneratedValue(generator = "seq_grupo", strategy = GenerationType.SEQUENCE)
private Integer id;
@Column(nullable = false, length = DESCRICAO_LENGTH)
private String descricao;
@ManyToOne
@JoinColumn(name = "idGrupo")
private Grupo grupo;
@OneToMany(mappedBy = "grupo")
private List<Grupo> subGrupos;
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
String old = this.descricao;
this.descricao = descricao;
firePropertyChange(PROP_DESCRICAO, old, descricao);
}
public Grupo getGrupo() {
return grupo;
}
public void setGrupo(Grupo grupo) {
if (grupo != null && grupo.equals(this)) {
throw new IllegalArgumentException("O Grupo não pode receber ele mesmo como Grupo");
}
Grupo old = this.grupo;
this.grupo = grupo;
firePropertyChange(PROP_GRUPO, old, grupo);
setChangedBean();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
Integer old = this.id;
this.id = id;
firePropertyChange(PROP_ID, old, id);
setChangedBean();
}
public List<Grupo> getSubGrupos() {
return subGrupos;
}
public void setSubGrupos(List<Grupo> subGrupos) {
List<Grupo> old = this.subGrupos;
this.subGrupos = subGrupos;
firePropertyChange(PROP_SUBGRUPOS, old, subGrupos);
setChangedBean();
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Grupo other = (Grupo) obj;
if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 59 * hash + (this.id != null ? this.id.hashCode() : 0);
return hash;
}
@Override
public Serializable getPrimaryKey() {
return getId();
}
@Override
public boolean isValid() {
return descricao != null && descricao.trim().length() > 0;
}
@Override
public String toString() {
return getDescricao();
}
@Override
public int compareTo(Grupo o) {
if (o == null) {
return 0;
}
int resp = descricao.compareTo(o.getDescricao());
if (grupo == null && o.getGrupo() != null) {
resp *= -1;
} else if (grupo != null && o.getGrupo() != null) {
resp += grupo.compareTo(o.getGrupo());
}
return resp;
}
}
agora o código de ordenação:
List<Grupo> grupos = controller.getByDescricao((String) initialValue);
Collections.sort(grupos);
desde já agradeço