Package railo.runtime.functions.list

Source Code of railo.runtime.functions.list.ListSetAt

/**
* Implements the CFML Function listsetat
*/
package railo.runtime.functions.list;

import railo.runtime.PageContext;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.FunctionException;
import railo.runtime.ext.function.Function;
import railo.runtime.type.Array;
import railo.runtime.type.util.ListUtil;

public final class ListSetAt implements Function {

  private static final long serialVersionUID = -105782799713547552L;

  public static String call(PageContext pc , String list, double posNumber, String value) throws ExpressionException {
    return call(pc,list,posNumber,value,",",false);
  }

  public static String call(PageContext pc , String list, double posNumber, String value, String delimiter) throws ExpressionException {
    return call(pc,list,posNumber,value,delimiter,false);
  }
  public static String call(PageContext pc , String list, double posNumber, String value, String delimiter, boolean includeEmptyFields) throws ExpressionException {
   
    if(list.length()==0)
      throw new FunctionException(pc,"listSetAt",1,"list","can't be empty");
   
   
    int pos=((int) posNumber);
    //int[] removedInfo=new int[2];
   
    Array arr = ListUtil.listToArray(list,delimiter);
    int len=arr.size();
   
    // invalid index
    if(pos<1)
      throw new FunctionException(pc,"listSetAt",2,"position","invalid string list index ["+(pos)+"]");
    else if(len<pos) {
      throw new FunctionException(pc,"listSetAt",2,"position","invalid string list index ["+(pos)+"], indexes go from 1 to "+(len));
    }
   
    StringBuffer sb=new StringBuffer();//RepeatString.call(new StringBuffer(),delimiter,removedInfo[0]);
    boolean hasStart=false;
    boolean hasSet=false;
    String v;
    int count=0;
    for(int i=1;i<=len;i++) {
      v=(String)arr.get(i,"");
      if(hasStart) {
        sb.append(delimiter);
      }
      else hasStart=true;
     
      if(includeEmptyFields || v.length()>0)count++;
      if(!hasSet && pos==count) {
        sb.append(value);
        hasSet=true;
      }
      else sb.append(arr.get(i,""));
    }
    if(!hasSet){
      throw new FunctionException(pc,"listSetAt",2,"position","invalid string list index ["+(pos)+"]");
    }
   
   
    return sb.toString();
  }
}
TOP

Related Classes of railo.runtime.functions.list.ListSetAt

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.