Package org.yaac.server.egql.evaluator.function

Source Code of org.yaac.server.egql.evaluator.function.LenFunction

package org.yaac.server.egql.evaluator.function;

import java.util.List;

import org.yaac.server.egql.evaluator.EvaluationResult;
import org.yaac.server.egql.exception.EGQLException;
import org.yaac.server.egql.processor.ProcessData.ProcessDataRecord;
import org.yaac.shared.ErrorCode;

import com.google.appengine.api.datastore.Blob;
import com.google.appengine.api.datastore.ShortBlob;
import com.google.appengine.api.datastore.Text;

/**
* @author Max Zhu (thebbsky@gmail.com)
*
*/
public class LenFunction extends Function {

  /**
   *
   */
  private static final long serialVersionUID = 1L;

  @Override
  public void validate() throws EGQLException {
    FunctionUtil.ensureParamSize(ops, 1);
  }

  @Override
  public EvaluationResult evaluate(ProcessDataRecord record) {
    if (this.ops.isEmpty()) {
      return new EvaluationResult(null).withWarning(ErrorCode.W109);
    } else if (this.ops.size() == 1) {
      EvaluationResult r = ops.get(0).evaluate(record);
      Object payload = r.getPayload();
     
      int len = 0;
      if (payload instanceof String) {
        len = ((String)r.getPayload()).length();
      } else if (payload instanceof Text) {
        len = ((Text)r.getPayload()).getValue().length();
      } else if (payload instanceof ShortBlob) {
        len = ((ShortBlob) payload).getBytes().length;
      } else if (payload instanceof Blob) {
        len = ((Blob) payload).getBytes().length;
      } else if (payload instanceof List<?>) {
        len = ((List<?>) payload).size();
      } else {
        return r.withWarning(ErrorCode.W108);
      }
     
      // only long / double / bigdecimal is supported
      return new EvaluationResult(new Long(len), r);
    } else {
      return ops.get(0).evaluate(record).withWarning(ErrorCode.W109);
    }
  }

}
TOP

Related Classes of org.yaac.server.egql.evaluator.function.LenFunction

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.