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

com.mtvi.plateng.hudson.regex.Configuration Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (c) 2008, MTV Networks
 */

package com.mtvi.plateng.hudson.regex;

import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import org.apache.commons.lang.StringUtils;

/**
 * Class to store configuration for the plugin.
 * 
 * @author justinedelson
 * 
 */
public class Configuration implements IConfiguration {

    /**
     * A logger object.
     */
    private static final Logger LOGGER = Logger.getLogger(Configuration.class.getName());

    /**
     * The expression used to parse a user's username. Expected to be a regular
     * expression.
     */
    private String userNameExpression;

    /**
     * The format string used to create an email address.
     * 
     * @see http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax
     */
    private String emailAddressPattern;

    /**
     * The compiled regular expression Pattern.
     */
    private Pattern userNamePattern;

    /**
     * Zero-argument constructor.
     */
    public Configuration() {
    }

    /**
     * Constructor with two arguments.
     * 
     * @param userNameExpression
     *            the user name expression (gets compiled to a regex)
     * @param emailAddressPattern
     *            the email address pattern
     */
    public Configuration(String userNameExpression, String emailAddressPattern) {
        this.userNameExpression = userNameExpression;
        this.emailAddressPattern = emailAddressPattern;
        getUserNamePattern();
    }

    /**
     * {@inheritDoc}
     */
    public String findMailAddressFor(String userName) {
        if (isValid()) {
            LOGGER.info(String.format("Attempting to match %s with regex %s", userName,
                    userNameExpression));
            Matcher matcher = getUserNamePattern().matcher(userName);
            if (matcher.matches()) {
                int groupCount = matcher.groupCount();
                // This array is declared as an Object[] to ensure it's passed
                // correctly via varargs.
                Object[] parts = new String[groupCount + 1];
                for (int i = 0; i < groupCount; i++) {
                    parts[i] = matcher.group(i + 1);
                }
                String emailAddress = String.format(emailAddressPattern, parts);
                LOGGER.info(String.format("Match for %s with regex %s, produced %s", userName,
                        userNameExpression, emailAddress));
                return emailAddress;
            } else {
                LOGGER.info(String.format("No match for %s with regex %s", userName,
                        userNameExpression));

                return null;
            }
        } else {
            LOGGER
                    .warning(String
                            .format(
                                    "RegExMailAddressResolver configuration for regex %s and email pattern %s is not valid.",
                                    userNameExpression, emailAddressPattern));
            return null;
        }
    }

    /**
     * Configuration is valid if the user name pattern can be compiled and the
     * email address pattern isn't blank.
     * 
     * {@inheritDoc}
     */
    public boolean isValid() {
        getUserNamePattern();
        return (userNamePattern != null) && (StringUtils.isNotBlank(emailAddressPattern));
    }

    /**
     * If necessary, compile the userNameExpression property into a RegEx
     * pattern.
     * 
     * @return the compiled Pattern.
     */
    protected Pattern getUserNamePattern() {
        if (userNamePattern == null && StringUtils.isNotBlank(userNameExpression)) {
            try {
                userNamePattern = Pattern.compile(userNameExpression);
            } catch (PatternSyntaxException e) {
                LOGGER.log(Level.WARNING, "Bad username expression: " + userNameExpression, e);
            }
        }
        return userNamePattern;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy