package edu.washington.escience.myria.expression;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;

import edu.washington.escience.myria.Type;
import edu.washington.escience.myria.expression.evaluate.ExpressionOperatorParameter;

/**
 * Return the a hash representation as long of the operand.
 */
public class HashMd5Expression extends UnaryExpression {
  /***/
  private static final long serialVersionUID = 1L;

  /**
   * This is not really unused, it's used automagically by Jackson deserialization.
   */
  @SuppressWarnings("unused")
  private HashMd5Expression() {
    super();
  }

  /**
   * Change all characters in a string to upper case.
   *
   * @param operand the operand.
   */
  public HashMd5Expression(final ExpressionOperator operand) {
    super(operand);
  }

  @Override
  public Type getOutputType(final ExpressionOperatorParameter parameters) {
    Type operandType = getOperand().getOutputType(parameters);
    ImmutableList<Type> validTypes = ImmutableList.of(Type.STRING_TYPE, Type.LONG_TYPE, Type.INT_TYPE);
    int operandIdx = validTypes.indexOf(operandType);
    Preconditions.checkArgument(operandIdx != -1, "%s cannot handle operand [%s] of Type %s", getClass()
        .getSimpleName(), getOperand(), operandType);
    return Type.LONG_TYPE;
  }

  @Override
  public String getJavaString(final ExpressionOperatorParameter parameters) {
    Type operandType = getOperand().getOutputType(parameters);
    if (operandType == Type.LONG_TYPE) {
      return getFunctionCallUnaryString("Hashing.md5().hashLong", parameters).concat(".asLong()");
    } else if (operandType == Type.INT_TYPE) {
      return getFunctionCallUnaryString("Hashing.md5().hashInt", parameters).concat(".asLong()");
    } else {
      return new StringBuilder("Hashing.md5().hashString(").append(getOperand().getJavaString(parameters)).append(
          ", Charset.defaultCharset()).asLong()").toString();
    }
  }
}
package edu.washington.escience.myria.expression;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;

import edu.washington.escience.myria.Type;
import edu.washington.escience.myria.expression.evaluate.ExpressionOperatorParameter;

/**
 * Return the a hash representation as long of the operand.
 */
public class HashMd5Expression extends UnaryExpression {
  /***/
  private static final long serialVersionUID = 1L;

  /**
   * This is not really unused, it's used automagically by Jackson deserialization.
   */
  @SuppressWarnings("unused")
  private HashMd5Expression() {
    super();
  }

  /**
   * Compute MD5 hash code.
   *
   * @param operand the operand.
   */
  public HashMd5Expression(final ExpressionOperator operand) {
    super(operand);
  }

  @Override
  public Type getOutputType(final ExpressionOperatorParameter parameters) {
    Type operandType = getOperand().getOutputType(parameters);
    ImmutableList<Type> validTypes = ImmutableList.of(Type.STRING_TYPE, Type.LONG_TYPE, Type.INT_TYPE);
    int operandIdx = validTypes.indexOf(operandType);
    Preconditions.checkArgument(operandIdx != -1, "%s cannot handle operand [%s] of Type %s", getClass()
        .getSimpleName(), getOperand(), operandType);
    return Type.LONG_TYPE;
  }

  @Override
  public String getJavaString(final ExpressionOperatorParameter parameters) {
    Type operandType = getOperand().getOutputType(parameters);
    if (operandType == Type.LONG_TYPE) {
      return getFunctionCallUnaryString("Hashing.md5().hashLong", parameters).concat(".asLong()");
    } else if (operandType == Type.INT_TYPE) {
      return getFunctionCallUnaryString("Hashing.md5().hashInt", parameters).concat(".asLong()");
    } else {
      return new StringBuilder("Hashing.md5().hashString(").append(getOperand().getJavaString(parameters)).append(
          ", Charset.defaultCharset()).asLong()").toString();
    }
  }
}
Fix comment