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

com.liferay.poshi.runner.util.RuntimeVariables Maven / Gradle / Ivy

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.poshi.runner.util;

import java.net.InetAddress;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author Brian Wing Shun Chan
 */
public class RuntimeVariables {

	public static String evaluateLocator(
			String locator, Map context)
		throws Exception {

		String locatorValue = locator;

		if (locatorValue.contains("${") && locatorValue.contains("}")) {
			String regex = "\\$\\{([^}]*?)\\}";

			Pattern pattern = Pattern.compile(regex);

			Matcher matcher = pattern.matcher(locatorValue);

			while (matcher.find()) {
				String variableKey = matcher.group(1);

				if (context.containsKey(variableKey)) {
					locatorValue = locatorValue.replaceFirst(
						regex, context.get(variableKey));
				}
				else {
					throw new Exception(
						"Variable \"" + variableKey + "\" found in \"" +
							locator + "\" is not set");
				}
			}
		}

		return locatorValue;
	}

	public static String evaluateVariable(
		String value, Map context) {

		String varValue = value;

		Matcher matcher = _variablePattern.matcher(varValue);

		while (matcher.find()) {
			String statement = matcher.group(1);

			Matcher statementMatcher = _variableStatementPattern.matcher(
				statement);

			if (statementMatcher.find()) {
				String operand = statementMatcher.group(1);

				if (!context.containsKey(operand)) {
					continue;
				}

				String[] arguments = StringUtil.split(
					statementMatcher.group(3), "'");

				List argumentsList = new ArrayList<>();

				for (int i = 1; i < arguments.length; i++) {
					if ((i % 2) == 1) {
						argumentsList.add(arguments[i]);
					}
				}

				String method = statementMatcher.group(2);

				String operandValue = context.get(operand);

				String replaceRegex = "\\$\\{([^}]*?)\\}";

				String result = "";

				if (method.startsWith("getFirstNumber")) {
					result = operandValue.replaceFirst("\\D*(\\d*).*", "$1");
				}
				else if (method.startsWith("increment")) {
					int i = GetterUtil.getInteger(operandValue) + 1;

					result = String.valueOf(i);
				}
				else if (method.startsWith("length")) {
					result = String.valueOf(operandValue.length());
				}
				else if (method.startsWith("lowercase")) {
					result = StringUtil.toLowerCase(operandValue);
				}
				else if (method.startsWith("replace")) {
					result = StringUtil.replace(
						operandValue, argumentsList.get(0),
						argumentsList.get(1));
				}
				else if (method.startsWith("uppercase")) {
					result = StringUtil.toUpperCase(operandValue);
				}

				varValue = varValue.replaceFirst(replaceRegex, result);
			}
			else if (statement.equals("getIPAddress()")) {
				try {
					InetAddress inetAddress = InetAddress.getLocalHost();

					String result = inetAddress.getHostAddress();

					varValue = varValue.replaceFirst(
						"\\$\\{([^}]*?)\\}", result);
				}
				catch (Exception exception) {
				}
			}
			else {
				String varName = statement;

				if (!context.containsKey(varName)) {
					continue;
				}

				String replaceRegex = "\\$\\{([^}]*?)\\}";

				String result = context.get(varName);

				result = Matcher.quoteReplacement(result);

				varValue = varValue.replaceFirst(replaceRegex, result);
			}
		}

		varValue = StringUtil.replace(varValue, "\\$", "$");
		varValue = StringUtil.replace(varValue, "\\{", "{");
		varValue = StringUtil.replace(varValue, "\\}", "}");

		return varValue;
	}

	public static String getValue(String key) {
		return _instance._getValue(key);
	}

	public static boolean isVariableSet(
		String varName, Map context) {

		if (!context.containsKey(varName)) {
			return false;
		}

		String varValue = context.get(varName);

		varValue = StringUtil.replace(varValue, "${line.separator}", "");

		if (varValue.contains("${") && varValue.contains("}")) {
			return false;
		}

		return true;
	}

	public static String replace(String text) {
		return _instance._replace(text);
	}

	public static String replaceRegularExpression(
		String content, String regex, int group) {

		Pattern pattern = Pattern.compile(regex);

		Matcher matcher = pattern.matcher(content);

		if (matcher.find()) {
			return matcher.group(group);
		}

		return StringPool.BLANK;
	}

	public static void setValue(String key, String value) {
		_instance._setValue(key, value);
	}

	private String _getValue(String key) {
		return _runtimeVariables.get(key);
	}

	private String _replace(String text) {
		if (_contextReplace == null) {
			return text;
		}

		return _contextReplace.replace(text);
	}

	private void _setValue(String key, String value) {
		_runtimeVariables.put(key, value);

		_contextReplace = new ContextReplace(_runtimeVariables);
	}

	private static final RuntimeVariables _instance = new RuntimeVariables();

	private static final Pattern _variablePattern = Pattern.compile(
		"\\$\\{([^}]*?)\\}");
	private static final Pattern _variableStatementPattern = Pattern.compile(
		"(.*)\\?(.*)\\(([^\\)]*?)\\)");

	private ContextReplace _contextReplace;
	private final Map _runtimeVariables = new HashMap<>();

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy