001    package railo.runtime.tag;
002    
003    import javax.servlet.jsp.tagext.Tag;
004    
005    import railo.runtime.exp.ApplicationException;
006    import railo.runtime.exp.TagNotSupported;
007    import railo.runtime.ext.tag.TagImpl;
008    import railo.runtime.op.Caster;
009    
010    public class TreeItem extends TagImpl{
011    
012            private String value=null;
013            private String display=null;
014            private String parent=null;
015            private String strImg=null;
016            private int intImg=TreeItemBean.IMG_FOLDER;
017            private String strImgOpen=null;
018            private int intImgOpen=TreeItemBean.IMG_FOLDER;
019            private String href=null;
020            private String target=null;
021            private String query=null;
022            private String strQueryAsRootCustom=null;
023            private int intQueryAsRoot=TreeItemBean.QUERY_AS_ROOT_YES;
024            private boolean expand=true;
025     
026            
027            public TreeItem() throws TagNotSupported{
028                    throw new TagNotSupported("TreeItem");
029            }
030            
031            @Override
032            public void release() {
033                    value=null;
034                    display=null;
035                    parent=null;
036                    strImg=null;
037                    intImg=TreeItemBean.IMG_FOLDER;
038                    strImgOpen=null;
039                    intImgOpen=TreeItemBean.IMG_FOLDER;
040                    href=null;
041                    target=null;
042                    query=null;
043                    strQueryAsRootCustom=null;
044                    intQueryAsRoot=TreeItemBean.QUERY_AS_ROOT_YES;
045                    expand=true;
046            }
047            /**
048             * @param display the display to set
049             */
050            public void setDisplay(String display) {
051                    this.display=display;
052            }
053            /**
054             * @param expand the expand to set
055             */
056            public void setExpand(boolean expand) {
057                    this.expand=expand;
058            }
059            /**
060             * @param href the href to set
061             */
062            public void setHref(String href) {
063                    this.href=href;
064            }
065            /**
066             * @param img the img to set
067             */
068            public void setImg(String img) {
069                    this.strImg=img;
070                    this.intImg=toIntImg(img);
071            }
072            
073            /**
074             * @param imgopen the imgopen to set
075             */
076            public void setImgopen(String imgopen) {
077                    this.strImgOpen=imgopen;
078                    this.intImgOpen=toIntImg(imgopen);
079            }
080            
081            private int toIntImg(String img) {
082                    img=img.trim().toLowerCase();
083                    if("cd".equals(img))                            return TreeItemBean.IMG_CD;
084                    else if("computer".equals(img))         return TreeItemBean.IMG_COMPUTER;
085                    else if("document".equals(img))         return TreeItemBean.IMG_DOCUMENT;
086                    else if("element".equals(img))          return TreeItemBean.IMG_ELEMENT;
087                    else if("folder".equals(img))           return TreeItemBean.IMG_FOLDER;
088                    else if("floppy".equals(img))           return TreeItemBean.IMG_FLOPPY;
089                    else if("fixed".equals(img))            return TreeItemBean.IMG_FIXED;
090                    else if("remote".equals(img))           return TreeItemBean.IMG_REMOTE;
091                    return TreeItemBean.IMG_CUSTOM;
092            }
093            
094            /**
095             * @param parent the parent to set
096             */
097            public void setParent(String parent) {
098                    this.parent=parent;
099            }
100            /**
101             * @param query the query to set
102             */
103            public void setQuery(String query) {
104                    this.query=query;
105            }
106            /**
107             * @param queryAsRoot the queryAsRoot to set
108             */
109            public void setQueryasroot(String queryAsRoot) {
110                    strQueryAsRootCustom = queryAsRoot;
111                    
112                    Boolean b = Caster.toBoolean(queryAsRoot,null);
113                    if(b==null)     intQueryAsRoot=TreeItemBean.QUERY_AS_ROOT_CUSTOM;
114                    else            intQueryAsRoot=b.booleanValue()?TreeItemBean.QUERY_AS_ROOT_YES:TreeItemBean.QUERY_AS_ROOT_NO;
115            }
116            /**
117             * @param target the target to set
118             */
119            public void setTarget(String target) {
120                    this.target=target;
121            }
122            /**
123             * @param value the value to set
124             */
125            public void setValue(String value) {
126                    this.value=value;
127            }
128            
129            public int doStartTag() throws ApplicationException {
130                    Tree tree=getTree();
131                    
132                    if(display==null)display=value;
133                    if(query!=null) doStartTagQuery(tree);
134                    else doStartTagNormal(tree);
135                    
136                    return SKIP_BODY;
137            }
138            
139            
140            
141            
142            private void doStartTagQuery(Tree tree) {
143                    // TODO Auto-generated method stub
144                    
145            }
146            
147            private void doStartTagNormal(Tree tree) {
148                    TreeItemBean bean = new TreeItemBean();
149                    bean.setDisplay(display);
150                    bean.setExpand(expand);
151                    bean.setHref(href);
152                    bean.setImg(intImg);
153                    bean.setImgCustom(strImg);
154                    bean.setImgOpen(intImgOpen);
155                    bean.setImgOpenCustom(strImgOpen);
156                    bean.setParent(parent);
157                    bean.setTarget(target);
158                    bean.setValue(value);
159                    
160                    tree.addTreeItem(bean);
161            }
162            
163            
164            private Tree getTree() throws ApplicationException {
165                    Tag parent=getParent();
166                    while(parent!=null && !(parent instanceof Tree)) {
167                            parent=parent.getParent();
168                    }
169                    
170                    if(parent instanceof Tree) return (Tree) parent;
171                    throw new ApplicationException("Wrong Context, tag TreeItem must be inside a Tree tag");        
172                    
173            }
174    }