001    package org.shiftone.jrat.core.config;
002    
003    import org.shiftone.jrat.core.criteria.*;
004    import org.shiftone.jrat.util.log.Logger;
005    import org.shiftone.jrat.util.regex.GlobMatcher;
006    
007    import java.util.ArrayList;
008    import java.util.List;
009    
010    
011    /**
012     * This class represents the overall configuration of which handlers should be
013     * associated to which methods/classes.  The MethodCriteria methods on this
014     * class can be used to determine what classes and methods jrat cares about
015     * at a high level - perhaps to govern the behavior of injection.
016     *
017     * @author jeff@shiftone.org (Jeff Drost)
018     */
019    public class Configuration implements MethodCriteria {
020    
021        private static final Logger LOG = Logger.getLogger(Configuration.class);
022        private Settings settings = new Settings();
023        private AndMethodCriteria methodCriteria = new AndMethodCriteria();
024        private OrMethodCriteria profilesCriteria = new OrMethodCriteria();
025        private OrMethodCriteria excludeCriteria = new OrMethodCriteria();
026        private List profiles = new ArrayList();
027    
028    
029        public Configuration() {
030    
031            methodCriteria.addCriteria(profilesCriteria);
032            methodCriteria.addCriteria(new NotMethodCriteria(excludeCriteria));
033    //        addClassExclude("bsh.*");
034    //        addClassExclude("com.sun.*");
035    //        addClassExclude("EDU.oswego.*");
036    //        addClassExclude("gnu.*");
037    //        addClassExclude("org.apache.*");
038    //        addClassExclude("org.dom4j.*");
039    //        addClassExclude("org.hsqldb.*");
040    //        addClassExclude("org.jboss.*");
041    //        addClassExclude("org.jnp.*");
042    //        addClassExclude("$Proxy*");
043            addClassExclude("java.*");
044            addClassExclude("javax.*");
045        }
046    
047        protected void addClassExclude(String className) {
048    
049            LOG.info("exclude " + className);
050    
051            excludeCriteria.addCriteria(
052                    new ClassMatcherMethodCriteria(
053                            new GlobMatcher(className)
054                    )
055            );
056        }
057    
058        protected Profile createProfile() {
059            Profile profile = new Profile();
060            profiles.add(profile);
061            profilesCriteria.addCriteria(profile);
062            return profile;
063        }
064    
065    
066        public boolean isMatch(String className, long modifier) {
067            return methodCriteria.isMatch(className, modifier);
068        }
069    
070        public boolean isMatch(String className, String methodName, String signature, long modifier) {
071            return methodCriteria.isMatch(className, methodName, signature, modifier);
072        }
073    
074    
075        protected List getProfiles() {
076            return profiles;
077        }
078    
079        public Settings getSettings() {
080            return settings;
081        }
082    
083    }