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

com.devonfw.cobigen.javaplugin.matcher.resolver.TriggerExpressionResolver Maven / Gradle / Ivy

package com.devonfw.cobigen.javaplugin.matcher.resolver;

import java.lang.reflect.Modifier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.devonfw.cobigen.api.exception.UnknownExpressionException;
import com.thoughtworks.qdox.model.JavaClass;

/**
 * The {@link TriggerExpressionResolver} to resolve the matcher's values.
 */
public class TriggerExpressionResolver {

    /**
     * The current triggered POJO.
     */
    private Object pojo;

    /**
     * Assigning logger to TriggerExpressionResolver
     */
    private static final Logger LOG = LoggerFactory.getLogger(TriggerExpressionResolver.class);

    /**
     * Pattern for 'instanceof' expression; syntax: "instanceof p.a.c.k.a.g.e.ClassName"
     */
    private static Pattern instanceOfPattern = Pattern.compile("\\s*instanceof\\s+([^\\s]+)");

    /**
     * Pattern for 'isAbstract' expression
     */
    private static Pattern isAbstractPattern = Pattern.compile("\\s*isAbstract\\s*");

    /**
     * Creates a new {@link TriggerExpressionResolver} for the given pojo with its {@link ClassLoader}
     *
     * @param reflectionClass
     *            current triggered POJO {@link Class}
     * @author mbrunnli (15.04.2013)
     */
    public TriggerExpressionResolver(Class reflectionClass) {
        pojo = reflectionClass;
    }

    /**
     * Creates a new {@link TriggerExpressionResolver} for the given parsed {@link JavaClass}
     * @param parsedClass
     *            parsed {@link JavaClass}
     * @author mbrunnli (24.02.2015)
     */
    public TriggerExpressionResolver(JavaClass parsedClass) {
        pojo = parsedClass;
    }

    /**
     * Evaluates the given expression
     *
     * @param expression
     *            to be evaluated
     * @return true if the expression is valid,
* false, otherwise or if any exception occurred during the evaluation */ public boolean evaluateExpression(String expression) { Matcher m = instanceOfPattern.matcher(expression); if (m.matches()) { if (pojo instanceof Class) { try { return ((Class) pojo).getClassLoader().loadClass(m.group(1)).isAssignableFrom((Class) pojo); } catch (ClassNotFoundException e) { LOG.info("Could not load class '{}' to resolve expression '{}'.", m.group(1), expression); } } else if (pojo instanceof JavaClass) { return ((JavaClass) pojo).isA(m.group(1)); } } else { m = isAbstractPattern.matcher(expression); if (m.matches()) { if (pojo instanceof Class) { return Modifier.isAbstract(((Class) pojo).getModifiers()); } else if (pojo instanceof JavaClass) { return ((JavaClass) pojo).isAbstract(); } } else { throw new UnknownExpressionException("Unknown trigger expression: '" + expression + "'"); } } return false; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy