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 structnew 021 */ 022package lucee.runtime.functions.struct; 023 024import lucee.runtime.PageContext; 025import lucee.runtime.exp.FunctionException; 026import lucee.runtime.exp.PageException; 027import lucee.runtime.functions.BIF; 028import lucee.runtime.op.Caster; 029import lucee.runtime.type.Struct; 030import lucee.runtime.type.StructImpl; 031 032public final class StructNew extends BIF { 033 034 private static final long serialVersionUID = 2439168907287957648L; 035 036 public static Struct call(PageContext pc ) { 037 return new StructImpl(); 038 } 039 public static Struct call(PageContext pc ,String type) throws FunctionException { 040 type=type.toLowerCase(); 041 if(type.equals("linked")) return new StructImpl(Struct.TYPE_LINKED); 042 else if(type.equals("ordered")) return new StructImpl(Struct.TYPE_LINKED); 043 else if(type.equals("weak")) return new StructImpl(Struct.TYPE_WEAKED); 044 else if(type.equals("syncronized")) return new StructImpl(Struct.TYPE_SYNC); 045 else if(type.equals("synchronized")) return new StructImpl(Struct.TYPE_SYNC); 046 else if(type.equals("sync")) return new StructImpl(Struct.TYPE_SYNC); 047 else if(type.equals("soft")) return new StructImpl(StructImpl.TYPE_SOFT); 048 else if(type.equals("normal")) return new StructImpl(); 049 050 else throw new FunctionException(pc,"structNew",1,"type","valid values are [normal, weak, linked, soft, synchronized]"); 051 } 052 @Override 053 public Object invoke(PageContext pc, Object[] args) throws PageException { 054 if(args.length==1) return call(pc,Caster.toString(args[0])); 055 return call(pc); 056 057 } 058}