package br.com.citframework.tld; import java.util.Collection; import java.util.Iterator; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import br.com.citframework.util.Reflexao; public class TreeMenu extends TagSupport { private static final long serialVersionUID = 5622076804636058198L; private String target; private String rootLabel; private String jsBaseDir; private String cssBaseDir; private String collection; private String idAttrib; private String idFatherAttrib; private String descAttrib; private String urlAttrib; private String hintAttrib; private boolean makeNull = true; public boolean isMakeNull() { return makeNull; } public void setMakeNull(final boolean makeNull) { this.makeNull = makeNull; } public String getCollection() { return collection; } public void setCollection(final String collection) { this.collection = collection; } public String getCssBaseDir() { return cssBaseDir; } public void setCssBaseDir(final String cssBaseDir) { this.cssBaseDir = cssBaseDir; } public String getDescAttrib() { return descAttrib; } public void setDescAttrib(final String descAttrib) { this.descAttrib = descAttrib; } public String getHintAttrib() { return hintAttrib; } public void setHintAttrib(final String hintAttrib) { this.hintAttrib = hintAttrib; } public String getIdAttrib() { return idAttrib; } public void setIdAttrib(final String idAttrib) { this.idAttrib = idAttrib; } public String getIdFatherAttrib() { return idFatherAttrib; } public void setIdFatherAttrib(final String idFatherAttrib) { this.idFatherAttrib = idFatherAttrib; } public String getJsBaseDir() { return jsBaseDir; } public void setJsBaseDir(final String jsBaseDir) { this.jsBaseDir = jsBaseDir; } public String getRootLabel() { return rootLabel; } public void setRootLabel(final String rootLabel) { this.rootLabel = rootLabel; } public String getTarget() { return target; } public void setTarget(final String target) { this.target = target; } public String getUrlAttrib() { return urlAttrib; } public void setUrlAttrib(final String urlAttrib) { this.urlAttrib = urlAttrib; } @Override public int doStartTag() throws JspException { final Collection<Object> col = this.getCollectionImpl(); if (col == null) { return SKIP_BODY; } if (col.size() > 0) { try { pageContext.getOut().println(" <link rel='StyleSheet' href='" + this.getCssBaseDir() + "/dtree.css' type='text/css' />"); pageContext.getOut().println(" <script type='text/javascript' src='" + this.getJsBaseDir() + "/dtree.js'></script>"); pageContext.getOut().println(" <script>"); pageContext.getOut().println(" d = new dTree('d');"); pageContext.getOut().println(" d.config.useIcons = false;"); pageContext.getOut().println(" d.add(0,-1,'" + this.getRootLabel() + "');"); final Iterator<Object> it = col.iterator(); while (it.hasNext()) { final Object obj = it.next(); final Object id = Reflexao.getPropertyValue(obj, this.getIdAttrib()); if (id == null) { throw new JspException("o valor do atributo " + this.getIdAttrib() + " n�o pode ser nulo "); } final Object desc = Reflexao.getPropertyValue(obj, this.getDescAttrib()); if (desc == null) { throw new JspException("o valor do atributo " + this.getDescAttrib() + " n�o pode ser nulo "); } Object idPai = Reflexao.getPropertyValue(obj, this.getIdFatherAttrib()); if (idPai == null) { idPai = "0"; } Object url = null; if (this.getUrlAttrib() != null) { url = Reflexao.getPropertyValue(obj, this.getUrlAttrib()); } if (url == null) { url = ""; } Object hint = null; if (this.getHintAttrib() != null) { hint = Reflexao.getPropertyValue(obj, this.getHintAttrib()); } if (hint == null) { hint = desc; } if (this.getTarget() == null) { this.setTarget(""); } pageContext.getOut().println(" d.add(" + id + "," + idPai + ",'" + desc + "','" + url + "','" + hint + "','" + target + "','','');"); } pageContext.getOut().println(" document.write(d);"); pageContext.getOut().println(" </script>"); } catch (final Exception e) { e.printStackTrace(); throw new JspException(e); } } return SKIP_BODY; } private Collection<Object> getCollectionImpl() throws JspException { Object obj = pageContext.getRequest().getAttribute(this.getCollection()); if (obj != null) { if (obj instanceof Collection) { return (Collection<Object>) obj; } else { throw new JspException("Objeto " + this.getCollection() + " deve ser do tipo java.util.Collection"); } } else { obj = pageContext.getSession().getAttribute(this.getCollection()); if (obj != null) { if (obj instanceof Collection) { return (Collection<Object>) obj; } else { throw new JspException("Objeto " + this.getCollection() + " deve ser do tipo java.util.Collection"); } } else { if (makeNull) { throw new JspException("Objeto " + this.getCollection() + " n�o encontrado em nenhum escopo"); } else { return null; } } } } }