/*
 *
 *  *  Copyright 2010-2016 OrientDB LTD (http://orientdb.com)
 *  *
 *  *  Licensed under the Apache License, Version 2.0 (the "License");
 *  *  you may not use this file except in compliance with the License.
 *  *  You may obtain a copy of the License at
 *  *
 *  *       http://www.apache.org/licenses/LICENSE-2.0
 *  *
 *  *  Unless required by applicable law or agreed to in writing, software
 *  *  distributed under the License is distributed on an "AS IS" BASIS,
 *  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  *  See the License for the specific language governing permissions and
 *  *  limitations under the License.
 *  *
 *  * For more information: http://orientdb.com
 *
 */
package com.orientechnologies.orient.core.query;

import java.util.Locale;

public class OQueryHelper {
  protected static final String WILDCARD_ANYCHAR = "?";
  protected static final String WILDCARD_ANY = "%";

  public static boolean like(String currentValue, String iValue) {
    if (currentValue == null
        || currentValue.length() == 0
        || iValue == null
        || iValue.length() == 0)
      // EMPTY/NULL PARAMETERS
      return false;

    iValue = iValue.toLowerCase(Locale.ENGLISH);
    currentValue = currentValue.toLowerCase(Locale.ENGLISH);

    iValue = iValue.replace("\\", "\\\\");
    iValue = iValue.replace("[", "\\[");
    iValue = iValue.replace("]", "\\]");
    iValue = iValue.replace("{", "\\{");
    iValue = iValue.replace("}", "\\}");
    iValue = iValue.replace("(", "\\(");
    iValue = iValue.replace(")", "\\)");
    iValue = iValue.replace("|", "\\|");
    iValue = iValue.replace("*", "\\*");
    iValue = iValue.replace("+", "\\+");
    iValue = iValue.replace("$", "\\$");
    iValue = iValue.replace("^", "\\^");
    iValue = iValue.replace(".", "\\.");
    iValue = iValue.replace(WILDCARD_ANY, ".*");
    iValue = iValue.replace(WILDCARD_ANYCHAR, ".");

    return currentValue.matches(iValue);
  }
}
