class ConditionalParser {

    public boolean checkCondition(String conditionalTag) throws ParseException {
        if (conditionalTag == null || conditionalTag.isEmpty() || !conditionalTag.contains("@"))
            return false;

        if (conditionalTag.contains(";")) {
            if (enabledLogs)
                logger.warn("We do not support multiple conditions yet: " + conditionalTag);
            return false;
        }

        String[] conditionalArr = conditionalTag.split("@");

        if (conditionalArr.length != 2)
            throw new IllegalStateException("could not split this condition: " + conditionalTag);

        String restrictiveValue = conditionalArr[0].trim();
        if (!restrictedTags.contains(restrictiveValue))
            return false;

        String conditionalValue = conditionalArr[1];
        conditionalValue = conditionalValue.replace('(', ' ');
        conditionalValue = conditionalValue.replace(')', ' ');
        conditionalValue = conditionalValue.trim();

        for (ConditionalValueParser valueParser : valueParsers) {
            ConditionalValueParser.ConditionState c = valueParser.checkCondition(conditionalValue);
            if (c.isValid())
                return c.isCheckPassed();
        }
        return false;
    }

    public  ConditionalParser(Set<String> restrictedTags);
    public  ConditionalParser(Set<String> restrictedTags, boolean enabledLogs);

}