| 1 16 package org.outerj.daisy.query.model.functions; 17 18 import org.outerj.daisy.repository.Document; 19 import org.outerj.daisy.repository.Version; 20 import org.outerj.daisy.repository.query.QueryException; 21 import org.outerj.daisy.repository.query.EvaluationContext; 22 import org.outerj.daisy.query.QueryContext; 23 import org.outerj.daisy.query.model.*; 24 25 import java.util.Locale ; 26 27 public class LengthFunction extends AbstractFunction { 28 public static final String NAME = "Length"; 29 30 public String getFunctionName() { 31 return NAME; 32 } 33 34 public void prepare(QueryContext context) throws QueryException { 35 super.prepare(context); 36 37 if (params.size() != 1) 38 throw new QueryException("Function " + NAME + " expects exactly one parameter."); 39 ValueExpr param = getParam(0); 40 QValueType paramValueType = param.getValueType(); 41 if ((paramValueType != QValueType.UNDEFINED && paramValueType != QValueType.STRING) || param.isSymbolicIdentifier() || param.isMultiValue()) 42 throw new QueryException("Function " + NAME + " needs a string as parameter."); 43 } 44 45 public void generateSqlValueExpr(StringBuffer sql, SqlGenerationContext context) throws QueryException { 46 String [] sqlFunction = context.getJdbcHelper().getStringLengthFunction(); 47 sql.append(' ').append(sqlFunction[0]); 48 super.generateSqlValueExpr(sql, context); 49 sql.append(sqlFunction[1]).append(' '); 50 } 51 52 public Object evaluate(QValueType valueType, EvaluationContext evaluationContext) throws QueryException { 53 String value = (String )((ValueExpr)params.get(0)).evaluate(QValueType.STRING, evaluationContext); 54 return evaluate(value); 55 } 56 57 public Object evaluate(QValueType valueType, Document document, Version version, EvaluationContext evaluationContext) throws QueryException { 58 String value = (String )((ValueExpr)params.get(0)).evaluate(QValueType.STRING, document, version, evaluationContext); 59 return evaluate(value); 60 } 61 62 private Object evaluate(String value) { 63 if (value == null) 64 return null; 65 else 66 return new Long (value.length()); 67 } 68 69 public QValueType getValueType() { 70 return QValueType.LONG; 71 } 72 73 public String getTitle(Locale locale) { 74 return getExpression(); 75 } 76 77 public QValueType getOutputValueType() { 78 return QValueType.LONG; 79 } 80 81 public Object getOutputValue(Document document, Version version, EvaluationContext evaluationContext) throws QueryException { 82 return evaluate(null, document, version, evaluationContext); 83 } 84 } 85 | Popular Tags |