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    }