001 /* 002 * Copyright (C) 2014 XStream Committers. 003 * All rights reserved. 004 * 005 * Created on 09. January 2014 by Joerg Schaible 006 */ 007 package com.thoughtworks.xstream.security; 008 009 import java.util.regex.Pattern; 010 011 012 /** 013 * Permission for any type with a name matching one of the provided regular expressions. 014 * 015 * @author Jörg Schaible 016 * @since 1.4.7 017 */ 018 public class RegExpTypePermission implements TypePermission { 019 020 private final Pattern[] patterns; 021 022 public RegExpTypePermission(final String[] patterns) { 023 this(getPatterns(patterns)); 024 } 025 026 public RegExpTypePermission(final Pattern[] patterns) { 027 this.patterns = patterns == null ? new Pattern[0] : patterns; 028 } 029 030 public boolean allows(final Class type) { 031 if (type != null) { 032 final String name = type.getName(); 033 for (int i = 0; i < patterns.length; ++i) 034 if (patterns[i].matcher(name).matches()) 035 return true; 036 } 037 return false; 038 } 039 040 private static Pattern[] getPatterns(final String[] patterns) { 041 if (patterns == null) 042 return null; 043 final Pattern[] array = new Pattern[patterns.length]; 044 for (int i = 0; i < array.length; ++i) 045 array[i] = Pattern.compile(patterns[i]); 046 return array; 047 } 048 }