001/**
002 *
003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
004 *
005 * This library is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU Lesser General Public
007 * License as published by the Free Software Foundation; either 
008 * version 2.1 of the License, or (at your option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013 * Lesser General Public License for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public 
016 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
017 * 
018 **/
019/**
020 * Implements the CFML Function getfunctionlist
021 */
022package lucee.runtime.functions.other;
023
024import java.util.Iterator;
025import java.util.Map;
026
027import lucee.runtime.PageContext;
028import lucee.runtime.config.ConfigImpl;
029import lucee.runtime.exp.PageException;
030import lucee.runtime.ext.function.Function;
031import lucee.runtime.type.Struct;
032import lucee.runtime.type.StructImpl;
033import lucee.transformer.library.tag.TagLib;
034import lucee.transformer.library.tag.TagLibTag;
035
036public final class GetTagList implements Function {
037        
038        private static Struct sct;
039        
040
041        public synchronized static lucee.runtime.type.Struct call(PageContext pc) throws PageException {
042                if(sct==null) {
043                    sct=new StructImpl();
044                        //synchronized(sct) {
045                                //hasSet=true;
046                                TagLib[] tlds;
047                                TagLibTag tag;
048                                tlds = ((ConfigImpl)pc.getConfig()).getTLDs();
049                                
050                                for(int i=0;i<tlds.length;i++) {
051                                    String ns = tlds[i].getNameSpaceAndSeparator();
052                                    
053                                    
054                                        Map tags = tlds[i].getTags();
055                                        Iterator it = tags.keySet().iterator();
056                                        Struct inner=new StructImpl();
057                    sct.set(ns,inner);
058                                        while(it.hasNext()){
059                                                Object n=it.next();
060                                                tag = tlds[i].getTag(n.toString());
061                                                if(tag.getStatus()!=TagLib.STATUS_HIDDEN && tag.getStatus()!=TagLib.STATUS_UNIMPLEMENTED)
062                                                        inner.set(n.toString(),"");
063                                        }
064                                        
065                                }
066                        //}
067                }
068                return sct;
069        }
070}