Olá amigos, depois de algum tempo estudando a tree consegui montar uma buscando dados da base de dados. Utilizo uma forma recursiva pra montar a minha arvore que na verdade é o meu menu principal. Como utilizo JAVA e JAVA é free , porque não deixar aqui os meus processos ? Espero que ajude alguém.... Abraços
TABELA NO BANCO - MENU:
ID_MENU NUMBER
OPERACAO VARCHAR2(7)
OPERACAO_REF VARCHAR2(7) Y
ORDEM NUMBER
TABELA DE OPERACOES.
ID_OPERACAO VARCHAR2(7)
SISTEMA VARCHAR2(2)
DESCRICAO VARCHAR2(40)
TP_OPERACAO NUMBER
PERMISSAO NUMBER
FG_ATIVO VARCHAR2(3)
Na coluna TP_OPERACAO ( 1 Formulário, 2 Relatório, 3 Menu )
ENTITY DA OPERACAO:
@Entity
@Table(name = "asoperacao")
@NamedQueries({
@NamedQuery(name="asOperacao.searchAll", query="select e from asOperacao e "),
@NamedQuery(name="asOperacao.searchFgAtivo", query="select e from asOperacao e where e.fgAtivo = :fgAtivo"),
@NamedQuery(name="asOperacao.searchById", query="select e from asOperacao e where e.idOperacao = :idOperacao")
})
public class asOperacao implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_operacao", nullable = false)
private String idOperacao;
@ManyToOne
@JoinColumn( name="sistema", referencedColumnName="id_sistema")
private asSistema sistema;
@Column(name = "descricao", nullable = false)
private String descricao;
@ManyToOne
@JoinColumn( name="tp_operacao", referencedColumnName="id_tp_operacao")
private asTpOperacao tpOperacao;
@ManyToOne
@JoinColumn( name="permissao", referencedColumnName="id_permissao")
private asPermissao permissao;
@Column(name = "fg_ativo", nullable = false)
private String fgAtivo;
@OneToMany( mappedBy="operacao" )
private List<asMenu> asMenuOperacaoList;
@OneToMany( mappedBy="operacaoRef" )
private List<asMenu> asMenuOperacaoRefList;
public asOperacao() {
}
// GETS E SETS
ENTITY DO MENU:
@Entity
@Table(name = "asmenu")
@NamedQueries({
@NamedQuery(name="asMenu.searchAll" ,query="select e from asMenu e "),
@NamedQuery(name="asMenu.searchById" ,query="select e from asMenu e where e.idMenu = :idMenu" ),
@NamedQuery(name="asMenu.searchOperMestre",query="select e from asMenu e where e.operacao = :operacao"),
@NamedQuery(name="asMenu.searchOperRef" ,query="select e from asMenu e where e.operacaoRef = :operacaoRef")
})
public class asMenu implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_menu", nullable = false)
private int idMenu;
@ManyToOne
@JoinColumn( name="operacao", referencedColumnName="id_operacao")
private asOperacao operacao;
@ManyToOne
@JoinColumn( nullable=true, name="operacao_ref", referencedColumnName="id_operacao")
private asOperacao operacaoRef;
@Column(name = "ordem", nullable = false)
private int ordem;
public asMenu() {
}
GETS E SETS
Agora vem o DAO dos ENTITYs:
public class asOperacaoDAO {
/* Objetos necessarios */
private asOperacao asOperacao;
private List asOperacaoList;
private EntityManager em;
private EntityManagerFactory emf;
/* Construtor */
public asOperacaoDAO() {
emf = Persistence.createEntityManagerFactory("websisPU");
}
/* Criando o Controler com JPA */
private EntityManager getEntityManager() {
return emf.createEntityManager();
}
public asOperacao getAsOperacao() {
if (this.asOperacao == null) {
this.asOperacao = new asOperacao();
}
return this.asOperacao;
}
public void setAsOperacao(asOperacao asOperacao) {
this.asOperacao = asOperacao;
}
public List getAsOperacaoList() {
return asOperacaoList;
}
public void setAsOperacaoList(List asOperacaoList) {
this.asOperacaoList = asOperacaoList;
}
/* Metodo responsavel por executar a query no objeto */
public List searchAll() {
/* Instancia objetos */
em = getEntityManager();
/* Acessa a namedQuery */
try {
Query query = (Query) em.createNamedQuery("asOperacao.searchAll");
this.setAsOperacaoList(query.getResultList());
} finally {
em.close();
}
return this.asOperacaoList;
}
/* Search pelo Id */
public asOperacao searchId(String pIdOperacao) {
try {
/* Instancia objetos */
em = getEntityManager();
Query query = (Query) em.createNamedQuery("asOperacao.searchById").setParameter("idOperacao", (pIdOperacao));
this.asOperacao = (asOperacao) query.getSingleResult();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
em.close();
}
return this.asOperacao;
}
/* Search pelo fgAtivo */
public List searchFgAtivo(String fgAtivo) {
/* Instancia objetos */
em = getEntityManager();
/* Acessa a namedQuery */
try {
Query query = (Query) em.createNamedQuery("asOperacao.searchFgAtivo").setParameter("fgAtivo", fgAtivo);
this.setAsOperacaoList(query.getResultList());
} finally {
em.close();
}
return this.asOperacaoList;
}
/* Grava o objeto no banco */
public String save(asOperacao asOperacaoPar) {
try {
/* Instancia objetos */
em = getEntityManager();
em.getTransaction().begin();
em.persist(asOperacaoPar);
em.getTransaction().commit();
return "saveSucess";
} catch (Exception ex) {
ex.printStackTrace();
messageUtility.addMensage(ex.getMessage(), "N");
return "saveError";
} finally {
em.close();
}
}
/* Delete */
public String delete(asOperacao asOperacaoPar) {
try {
/* Instancia objetos */
this.setAsOperacao(asOperacaoPar);
em = getEntityManager();
em.getTransaction().begin();
asOperacao asOperacaoExcluir = em.find(asOperacao.class, getAsOperacao().getIdOperacao());
em.remove(asOperacaoExcluir);
em.getTransaction().commit();
return "deleteSucess";
} catch (Exception ex) {
ex.printStackTrace();
messageUtility.addMensage(ex.getMessage(), "N");
return "deleteError";
} finally {
em.close();
}
}
/* Grava o objeto no banco */
public String update(asOperacao asOperacaoPar) {
try {
/* Instancia objetos */
em = getEntityManager();
em.getTransaction().begin();
em.merge(asOperacaoPar);
em.getTransaction().commit();
return "updateSucess";
} catch (Exception ex) {
ex.printStackTrace();
messageUtility.addMensage(ex.getMessage(), "N");
return "updateError";
} finally {
em.close();
return "updateSucess";
}
}
/* Metodo responsavel por buscar todos os registros da tabela */
public List selectItems() {
try {
/* Variaveis necessárias */
List lAsOperacao = this.searchAll();
ListIterator iAsOperacao = lAsOperacao.listIterator();
List ret = new ArrayList();
/* Abrindo o LIST e instanciando o RET com os valores String */
while (iAsOperacao.hasNext()) {
asOperacao asOperacaoItem = (asOperacao) iAsOperacao.next();
SelectItem si = new SelectItem();
si.setValue(asOperacaoItem.getIdOperacao());
si.setLabel(asOperacaoItem.getDescricao());
ret.add(si);
}
return ret;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
DAO DO MENU:
public class asMenuDAO {
/* Objetos necessarios */
private asMenu asMenu;
private List asMenuList;
private EntityManager em;
private EntityManagerFactory emf;
/* Construtor */
public asMenuDAO(){
emf = Persistence.createEntityManagerFactory("websisPU");
}
/* Criando o Controler com JPA */
private EntityManager getEntityManager() {
return emf.createEntityManager();
}
public asMenu getAsMenu() {
if (this.asMenu == null) {
this.asMenu = new asMenu();
}
return this.asMenu;
}
public void setAsMenu(asMenu asMenu) {
this.asMenu = asMenu;
}
public List getAsMenuList() {
return asMenuList;
}
public void setAsMenuList (List asMenuList) {
this.asMenuList = asMenuList;
}
/* Metodo responsavel por executar a query no objeto */
public List searchAll() {
/* Instancia objetos */
em = getEntityManager();
/* Acessa a namedQuery */
try {
Query query = (Query) em.createNamedQuery("asMenu.searchAll");
this.setAsMenuList(query.getResultList());
} finally {
em.close();
}
return this.asMenuList;
}
/* Metodo responsavel por executar a query no objeto */
public List searchAllOperacao() {
/* Instancia objetos */
em = getEntityManager();
/* Acessa a namedQuery */
try {
asOperacao asOperacao = new asOperacao();
asOperacaoDAO asOperacaoDAO = new asOperacaoDAO();
asOperacao = asOperacaoDAO.searchId("gsm000");
Query query = (Query) em.createNamedQuery("asMenu.searchOperMestre").setParameter("operacao",asOperacao);
this.setAsMenuList(query.getResultList());
} finally {
em.close();
}
return this.asMenuList;
}
/* Metodo responsavel por executar a query no objeto */
public List searchAllOperacaoRef(String operacao) {
/* Instancia objetos */
em = getEntityManager();
/* Acessa a namedQuery */
try {
asOperacao asOperacao = new asOperacao();
asOperacaoDAO asOperacaoDAO = new asOperacaoDAO();
asOperacao = asOperacaoDAO.searchId(operacao);
Query query = (Query) em.createNamedQuery("asMenu.searchOperRef").setParameter("operacaoRef",asOperacao);
this.setAsMenuList(query.getResultList());
} finally {
em.close();
}
return this.asMenuList;
}
/* Search pelo Id */
public asMenu searchId(String idMenu) {
try {
/* Instancia objetos */
em = getEntityManager();
Query query = (Query) em.createNamedQuery("asMenu.searchById").setParameter("dMenu", Integer.parseInt(idMenu));
this.asMenu = (asMenu) query.getSingleResult();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
em.close();
}
return this.asMenu;
}
/* Grava o objeto no banco */
public String save(asMenu asMenuPar) {
try {
/* Instancia objetos */
em = getEntityManager();
em.getTransaction().begin();
em.persist(asMenuPar);
em.getTransaction().commit();
return "saveSucess";
} catch (Exception ex) {
ex.printStackTrace();
messageUtility.addMensage(ex.getMessage(),"N");
return "saveError";
} finally {
em.close();
}
}
/* Delete */
public String delete(asMenu asMenuPar) {
try {
/* Instancia objetos */
this.setAsMenu(asMenuPar);
em = getEntityManager();
em.getTransaction().begin();
asMenu asMenuExcluir = em.find(asMenu.class, getAsMenu().getIdMenu());
em.remove(asMenuExcluir);
em.getTransaction().commit();
return "deleteSucess";
} catch (Exception ex) {
ex.printStackTrace();
messageUtility.addMensage(ex.getMessage(),"N");
return "deleteError";
} finally {
em.close();
}
}
/* Grava o objeto no banco */
public String update(asMenu asMenuPar) {
try {
/* Instancia objetos */
em = getEntityManager();
em.getTransaction().begin();
em.merge(asMenuPar);
em.getTransaction().commit();
return "updateSucess";
} catch (Exception ex) {
ex.printStackTrace();
messageUtility.addMensage(ex.getMessage(),"N");
return "updateError";
} finally {
em.close();
return "updateSucess";
}
}
}
Depois do MODELO E O DAO PRONTOS vem o metodo que monta a arvore:
public class asMenuTree {
private TreeNode raiz = null;
private String nodeTitle = "";
/*Seleciona os itens da arvore*/
private void loadMenu(String operacao, TreeNode node) {
/* Variaveis necessárias */
asMenuDAO asMenuDAO = new asMenuDAO();
List lasMenu = asMenuDAO.searchAllOperacaoRef(operacao);
ListIterator iasMenu = lasMenu.listIterator();
int cont = 0;
/* Abri o meu LIST e instanciei o RET com os valores String.*/
while (iasMenu.hasNext()) {
cont++;
asMenu asMenu = (asMenu) iasMenu.next();
/**/
if (asMenu.getOperacao().getTpOperacao().getIdTpOperacao() == 3) {
System.out.println("Mestre: "+asMenu.getOperacao().getDescricao());
TreeNodeImpl nodeImpl = new TreeNodeImpl();
nodeImpl.setData(asMenu.getOperacao().getDescricao());
node.addChild(cont, nodeImpl);
loadMenu(asMenu.getOperacao().getIdOperacao(), nodeImpl);
} else {
System.out.println("Detalhe: "+asMenu.getOperacao().getDescricao());
TreeNodeImpl nodeImpl = new TreeNodeImpl();
nodeImpl.setData(asMenu.getOperacao().getDescricao());
node.addChild(cont, nodeImpl);
}
}
}
/*Monta a tree*/
private void loadTree() {
/*Instancia a arvore*/
raiz = new TreeNodeImpl();
loadMenu("gsm000",raiz);
}
/*Encontra a arvore*/
public TreeNode getTreeNode() {
if (raiz == null) {
loadTree();
}
return raiz;
}
E por fim o JSP:
<f:view>
<h:form>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center" colspan="3">
<r:panelBar>
<h:panelGrid>
</h:panelGrid>
</r:panelBar>
</td>
</tr>
<tr>
<td>
<r:tree id="treeMenu"
style="width:300px"
ajaxSubmitSelection="true"
switchType="client"
value="#{asController.tree}"
var="tree">
</r:tree>
</td>
<td><br>
<r:panel id="dobox" styleClass="box">
<f:facet name="header"> <b> - AVISO DO SISTEMA </b> <br> </f:facet>
<r:effect event="onclick" type="DropOut" params="duration:0.8" />
<r:effect event="onclick" for="dobox" type="Appear"/>
<h:outputText value="Em agosto entra em vigor o novo módulo de vendas." />
</r:panel>
</td>
<td>
</td>
</tr>
</table>
</h:form>
</f:view>
Galera, espero que isso ajude. Eu sofri um bocado pra fazer isso por falta de material !!!
Qualquer dúvida estamos as ordens.
Abraços