PathMatcher.java 2.48 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.aemfd.watchfolder.job;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public abstract class PathMatcher {
    private static final String PERIOD_PATTERN = ".*?\\.";
    private static final String ESCAPE_PERIOD_PATTERN = "\\.";
    private static final String WILDCARD_PATTERN = ".*?\\*";
    private static final String ESCAPE_WILDCARD_PATTERN = ".*";
    private static final String QUESTION_MARK_PATTERN = ".*?\\?";
    private static final String ESCAPE_QUESTION_MARK_PATTERN = ".";
    private static int SPECIAL_CHARACTER_PATTERN_INDEX = 0;
    private static int ESCAPE_CHARACTER_PATTERN_INDEX = 1;
    private static String[][] specialCharacterTable = new String[][]{{".*?\\.", "\\."}, {".*?\\*", ".*"}, {".*?\\?", "."}};
    private static Logger log = LoggerFactory.getLogger(PathMatcher.class);

    public static boolean match(String regex, String str) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        return matcher.matches();
    }

    public static String escapeSpecialCharacterInRegularExpression(String regex) {
        String result = regex;
        for (int i = 0; i < specialCharacterTable.length; ++i) {
            result = PathMatcher.escapeSpecialCharacterInRegularExpression(result, specialCharacterTable[i][SPECIAL_CHARACTER_PATTERN_INDEX], specialCharacterTable[i][ESCAPE_CHARACTER_PATTERN_INDEX]);
        }
        log.debug("Escaping regular expression: %1 result: %2", (Object)regex, (Object)result);
        return result;
    }

    private static String escapeSpecialCharacterInRegularExpression(String strPattern, String specialCharacter, String escapeCharacterPattern) {
        Pattern pattern = Pattern.compile(specialCharacter);
        Matcher matcher = pattern.matcher(strPattern);
        StringBuffer escapePattern = new StringBuffer();
        int endMatch = -1;
        while (matcher.find()) {
            endMatch = matcher.end();
            escapePattern.append(strPattern.substring(matcher.start(), endMatch - 1));
            escapePattern.append(escapeCharacterPattern);
        }
        if (endMatch > 0) {
            escapePattern.append(strPattern.substring(endMatch));
        } else {
            escapePattern.append(strPattern);
        }
        return escapePattern.toString();
    }
}