001/* 002 * (C) Copyright 2006-2008 Nuxeo SAS (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Alexandre Russel 016 * 017 * $Id$ 018 */ 019 020package org.nuxeo.ecm.platform.annotations.service; 021 022import java.util.List; 023 024/** 025 * @author Alexandre Russel 026 */ 027public class URLPatternFilter { 028 029 private final boolean allowDeny; 030 031 private final List<String> denies; 032 033 private final List<String> allows; 034 035 public URLPatternFilter(boolean allowDeny, List<String> denies, List<String> allows) { 036 this.allowDeny = allowDeny; 037 this.denies = denies; 038 this.allows = allows; 039 } 040 041 public boolean allow(String url) { 042 if (checkFirstPass(url) && !checkSecondPass(url)) { 043 return allowDeny; 044 } 045 return !allowDeny; 046 } 047 048 private boolean checkSecondPass(String url) { 049 return checkMatch(allowDeny ? denies : allows, url); 050 } 051 052 private static boolean checkMatch(List<String> list, String url) { 053 for (String regex : list) { 054 if (url.matches(regex)) { 055 return true; 056 } 057 } 058 return false; 059 } 060 061 private boolean checkFirstPass(String url) { 062 return checkMatch(allowDeny ? allows : denies, url); 063 } 064 065}