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 }