All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.linuxforhealth.core.expression.condition.ConditionUtil Maven / Gradle / Ivy

/*
 * (C) Copyright IBM Corp. 2020, 2021
 *
 * SPDX-License-Identifier: Apache-2.0
 */
package io.github.linuxforhealth.core.expression.condition;

import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringTokenizer;
import com.google.common.base.Preconditions;
import io.github.linuxforhealth.api.Condition;

/**
 * Utility class to create different conditions from string value.
 * 
 *
 */
public class ConditionUtil {
  private ConditionUtil() {}


  public static Condition createCondition(String conditionString) {
    return createCondition(conditionString, false);
  }


  public static Condition createCondition(String conditionString, boolean useGroup) {
    Preconditions.checkArgument(StringUtils.isNotBlank(conditionString),
        "conditionString cannot be blank or null.");
    StringTokenizer ors = new StringTokenizer(conditionString, "||");
    StringTokenizer ands = new StringTokenizer(conditionString, "&&");
    if (ors.getTokenList().size() > 1) {
      return getListOrConditions(ors, useGroup);
    } else if (ands.getTokenList().size() > 1) {
      return getListAndConditions(ands, useGroup);
    } else {
      return createSimpleCondition(conditionString, useGroup);
    }


  }

  private static Condition createSimpleCondition(String conditionString, boolean useGroup) {
    StringTokenizer stk = new StringTokenizer(conditionString);
    stk.setQuoteChar('\'');
    if (stk.getTokenList().size() == 2) {
      String var1 = stk.nextToken();
      String var2 = stk.nextToken();

      if (var2.equalsIgnoreCase(CheckNotNull.NOT_NULL)) {
        return new CheckNotNull(var1, useGroup);
      } else if (var2.equalsIgnoreCase(CheckNull.NULL)) {
        return new CheckNull(var1, useGroup);
      } else {
        throw new IllegalArgumentException("Condition string incorrect format");
      }
    } else if (stk.getTokenList().size() == 3) {
      String var1 = stk.nextToken();
      String operator = stk.nextToken();
      String var2 = stk.nextToken();

      return new SimpleBiCondition(var1, var2, operator);
    } else {
      throw new IllegalArgumentException("Condition string incorrect format");
    }
  }

  private static CompoundAndCondition getListAndConditions(StringTokenizer ands, boolean useGroup) {
    List conditions = new ArrayList<>();
    for (String tok : ands.getTokenList()) {
      conditions.add(createSimpleCondition(tok, useGroup));
    }
    return new CompoundAndCondition(conditions);
  }

  private static CompoundORCondition getListOrConditions(StringTokenizer ors, boolean useGroup) {
    List conditions = new ArrayList<>();
    for (String tok : ors.getTokenList()) {
      conditions.add(createSimpleCondition(tok, useGroup));
    }
    return new CompoundORCondition(conditions);
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy