Estou com uma dificuldade de montar uma estrutura bem específica, gostaria de trocar alguma idéia, ou ver se alguem tem alguma sugestão, ou ainda algum link de como trabalhar com estruturas mais chatas.
A estrutura é o seguinte:
:arrow: Tenho grupo q permite n subgrupos.
:arrow: Um grupo possui n propriedade.
:arrow: As propriedades de um grupo são definidas pelas proprias propriedades se houver e todas as propriedades do grupos que estão acima dele (em linha direta).
:arrow: Uma propriedade possui n valores, serve para restringir os valores possíveis e estes valores mudam de acordo com o grupo. Ou seja uma propriedade de um grupo tem determinados valores, a mesma propriedade num outro grupo pode ter valores diferentes.
// grupos e subgrupos
class Grupo {
private Set<Grupo> subGrupo;
}
// Propriedades de grupo
// Valores de uma propriedade
class Model {
private Map<Grupo, Set<Propriedade>> propriedades;
private Map<Propriedade, Set<Valor>> valores;
}
O problema é q alguns grupos possuem valores diferentes para a mesma propriedade.
Exemplo:
Propriedade: Cor
Grupo 1, Cor: Azul, Verde
Grupo 2, Cor: Azul, Amarelo
Se eu entendi bem o seu problema, acredito que no seu modelo de classe vamos ficar com duas entidades:
Grupo
Propriedades
Com um grupo pode conter 0 ou mais outros grupos e pode conter 0 ou mais propriedades, ficamos com a classe grupo da seguinte forma:
import java.util.HashSet;
import java.util.Set;
public class Grupo {
private Set grupos = new HashSet();
private Set propriedades = new HashSet();
public Set getPropriedades() {
return propriedades;
}
public void setPropriedades(Set propriedades) {
this.propriedades = propriedades;
}
public Set getGrupos() {
return grupos;
}
public void setGrupos(Set grupos) {
this.grupos = grupos;
}
}
Já a classe Propriedade fica
import java.util.ArrayList;
import java.util.List;
public class Propriedade {
private List valores = new ArrayList();
private String nome;
public void setNome(){
...
}
public String getNome(){
...
}
public List getValores() {
return valores;
}
public void setValores(List valores) {
this.valores = valores;
}
}
Caso deseje acessar uma determinada propriedade pode percorrer a coleção e verificar o que retorno o nome ou usar api JXPath.