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

uk.co.automatictester.lightning.utils.LightningConfigProcessingHelper Maven / Gradle / Ivy

package uk.co.automatictester.lightning.utils;

import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import uk.co.automatictester.lightning.enums.ServerSideTestType;
import uk.co.automatictester.lightning.exceptions.*;

public class LightningConfigProcessingHelper {

    private static final String EXCEPTION_MESSAGE = "Incorrect %s value for %s: %s";

    public static String getTestName(Element element) {
        return getSubElementValueByTagName(element, "testName");
    }

    public static ServerSideTestType getSubType(Element element) {
        NodeList list = element.getElementsByTagName("subType");
        Node descriptionElement = list.item(0);
        String subType = (descriptionElement == null) ? "" : descriptionElement.getTextContent();
        ServerSideTestType testSubType;
        if (subType.equalsIgnoreCase(ServerSideTestType.LESS_THAN.name())) {
            testSubType = ServerSideTestType.LESS_THAN;
        } else if (subType.equalsIgnoreCase(ServerSideTestType.GREATER_THAN.name())) {
            testSubType = ServerSideTestType.GREATER_THAN;
        } else if (subType.equalsIgnoreCase(ServerSideTestType.BETWEEN.name())) {
            testSubType = ServerSideTestType.BETWEEN;
        } else {
            throw new XMLFileNoValidSubTypeException("Value of subType element is not in set (LESS_THAN, BETWEEN, GREATER_THAN)");
        }
        return testSubType;
    }

    public static boolean hasRegexp(Element element) {
        return isSubElementPresent(element, "regexp");
    }

    public static boolean hasTransactionName(Element element) {
        return isSubElementPresent(element, "transactionName");
    }

    public static boolean hasHostAndMetric(Element element) {
        return isSubElementPresent(element, "hostAndMetric");
    }

    public static boolean isSubElementPresent(Element element, String subElement) {
        NodeList list = element.getElementsByTagName(subElement);
        return list.getLength() > 0;
    }

    public static String getTransactionName(Element element) {
        return getSubElementTextContent(element, "transactionName");
    }

    public static String getHostAndMetric(Element element) {
        return getSubElementTextContent(element, "hostAndMetric");
    }

    public static String getTestDescription(Element element) {
        NodeList list = element.getElementsByTagName("description");
        Node descriptionElement = list.item(0);
        return (descriptionElement == null) ? "" : descriptionElement.getTextContent();
    }

    public static int getIntegerValueFromElement(Element element, String subElement) {
        String elementValue = getSubElementValueByTagName(element, subElement);
        try {
            return Integer.parseInt(elementValue);
        } catch (NumberFormatException e) {
            String parentNodeName = element.getNodeName();
            String errorMessage = String.format(EXCEPTION_MESSAGE, subElement, parentNodeName, elementValue);
            throw new XMLFileNumberFormatException(errorMessage);
        }
    }

    public static double getDoubleValueFromElement(Element element, String subElement) {
        String elementValue = getSubElementValueByTagName(element, subElement);
        try {
            return Double.parseDouble(elementValue);
        } catch (NumberFormatException e) {
            String parentNodeName = element.getNodeName();
            String errorMessage = String.format(EXCEPTION_MESSAGE, subElement, parentNodeName, elementValue);
            throw new XMLFileNumberFormatException(errorMessage);
        }
    }

    public static int getPercentile(Element element, String subElement) {
        int elementValue = getIntegerValueFromElement(element, subElement);
        if (Percentile.isPercentile(elementValue)) {
            return elementValue;
        } else {
            String parentNodeName = element.getNodeName();
            String errorMessage = String.format(EXCEPTION_MESSAGE, subElement, parentNodeName, elementValue);
            throw new XMLFilePercentileException(errorMessage);
        }
    }

    public static int getPercentAsInt(Element element, String subElement) {
        int elementValue = getIntegerValueFromElement(element, subElement);
        return new Percent(elementValue).getValue();
    }

    private static String getSubElementTextContent(Element element, String tagName) {
        NodeList list = element.getElementsByTagName(tagName);
        return list.item(0).getTextContent();
    }

    private static String getSubElementValueByTagName(Element element, String subElement) {
        String elementValue = getNodeByTagName(element, subElement).getTextContent();
        if (elementValue.length() == 0) {
            String parentNodeName = element.getNodeName();
            String errorMessage = String.format("Missing %s value for %s", subElement, parentNodeName);
            throw new XMLFileMissingElementValueException(errorMessage);
        } else {
            return elementValue;
        }
    }

    private static Node getNodeByTagName(Element element, String subElement) {
        NodeList list = element.getElementsByTagName(subElement);
        Node node = list.item(0);
        if (node == null) {
            String errorMessage = String.format("Missing element %s for %s", subElement, element.getNodeName());
            throw new XMLFileMissingElementException(errorMessage);
        } else {
            return node;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy