KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > innig > macker > rule > filter > SubtypeFilter


1 /*______________________________________________________________________________
2  *
3  * Macker http://innig.net/macker/
4  *
5  * Copyright 2002-2003 Paul Cantrell
6  *
7  * This program is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU General Public License version 2, as published by the
9  * Free Software Foundation. See the file LICENSE.html for more information.
10  *
11  * This program is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
13  * FOR A PARTICULAR PURPOSE. See the license for more details.
14  *
15  * You should have received a copy of the GNU General Public License along with
16  * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
17  * Place, Suite 330 / Boston, MA 02111-1307 / USA.
18  *______________________________________________________________________________
19  */

20  
21 package net.innig.macker.rule.filter;
22
23 import net.innig.macker.rule.*;
24 import net.innig.macker.structure.ClassInfo;
25 import java.util.*;
26
27 public class SubtypeFilter
28     implements Filter
29     {
30     public Pattern createPattern(
31             RuleSet ruleSet,
32             List/*<Pattern>*/ params,
33             Map/*<String,String>*/ options)
34         throws RulesException
35         {
36         if(params.size() != 1)
37             throw new FilterSyntaxException(
38                 this,
39                 "Filter \"" + options.get("filter") + "\" expects one parameter, but has " + params.size());
40         final Pattern supertypePat = (Pattern) params.get(0);
41         return new Pattern()
42             {
43             public boolean matches(EvaluationContext context, ClassInfo classInfo)
44                 throws RulesException
45                 {
46                 for(Iterator superI = classInfo.getSupertypes().iterator(); superI.hasNext(); )
47                     {
48                     ClassInfo supertype = (ClassInfo) superI.next();
49                     if(supertypePat.matches(context, supertype))
50                         return true;
51                     }
52                 return false;
53                 }
54             };
55         }
56     }
57
Popular Tags