org.ebayopensource.turmeric.runtime.config.validation.PathRegex.java Source code

Java tutorial

Introduction

Here is the source code for org.ebayopensource.turmeric.runtime.config.validation.PathRegex.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *******************************************************************************/
package org.ebayopensource.turmeric.runtime.config.validation;

import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.io.FilenameUtils;

public class PathRegex {
    private static final Logger LOG = Logger.getLogger(PathRegex.class.getName());
    private File basedir;
    private String basedirname;
    private int basedirnamelength;
    private Pattern pattern;

    public PathRegex(File basedir, String regex) {
        this.basedir = basedir;
        this.basedirname = this.basedir.getAbsolutePath() + File.separator;
        this.basedirnamelength = this.basedirname.length();
        this.pattern = Pattern.compile(regex);
    }

    public Matcher getMatcher(File path) {
        String relpath = getRelativePath(path);
        return pattern.matcher(relpath);
    }

    public File getBaseDir() {
        return basedir;
    }

    public Pattern getPattern() {
        return pattern;
    }

    public String getRelativePath(File path) {
        String fullfilename = path.getAbsolutePath();
        if (!fullfilename.startsWith(basedirname)) {
            throw new IllegalArgumentException("File " + path + " is not part of the basedir " + basedir);
        }
        String relpath = fullfilename.substring(basedirnamelength);
        return FilenameUtils.separatorsToUnix(relpath);
    }

    public boolean matches(File path) {
        String relpath = getRelativePath(path);
        boolean match = pattern.matcher(relpath).matches();
        if (LOG.isLoggable(Level.FINE)) {
            LOG.fine((match ? "HIT " : "miss") + " on " + pattern + " : " + relpath);
        }
        return match;
    }
}