001/*
002 * Copyright (C) 2014 XStream Committers.
003 * All rights reserved.
004 *
005 * Created on 09. January 2014 by Joerg Schaible
006 */
007package com.thoughtworks.xstream.security;
008
009import 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 */
018public 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}