KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > vladium > emma > instr > FilterCfg


1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2  *
3  * This program and the accompanying materials are made available under
4  * the terms of the Common Public License v1.0 which accompanies this distribution,
5  * and is available at http://www.eclipse.org/legal/cpl-v10.html
6  *
7  * $Id: FilterCfg.java,v 1.2 2004/05/20 02:28:07 vlad_r Exp $
8  */

9 package com.vladium.emma.instr;
10
11 import java.io.File JavaDoc;
12 import java.io.IOException JavaDoc;
13 import java.util.ArrayList JavaDoc;
14 import java.util.Iterator JavaDoc;
15 import java.util.List JavaDoc;
16
17 import org.apache.tools.ant.BuildException;
18 import org.apache.tools.ant.Task;
19
20 import com.vladium.util.IConstants;
21 import com.vladium.util.Strings;
22 import com.vladium.emma.ant.StringValue;
23 import com.vladium.emma.ant.SuppressableTask;
24 import com.vladium.emma.filter.IInclExclFilter;
25
26 // ----------------------------------------------------------------------------
27
/**
28  * @author Vlad Roubtsov, (C) 2003
29  */

30 public
31 class FilterCfg
32 {
33     // public: ................................................................
34

35     
36     public static final class filterElement extends StringValue
37     {
38         public filterElement (final Task task)
39         {
40             super (task);
41         }
42         
43         public void setValue (final String JavaDoc value)
44         {
45             final String JavaDoc [] specs = Strings.merge (new String JavaDoc [] {value}, COMMA_DELIMITERS, true);
46             
47             for (int i = 0; i < specs.length; ++ i)
48             {
49                 final String JavaDoc spec = specs [i];
50                 
51                 if (spec.startsWith (IInclExclFilter.INCLUSION_PREFIX_STRING) ||
52                     spec.startsWith (IInclExclFilter.EXCLUSION_PREFIX_STRING))
53                 {
54                     appendValue (spec, COMMA);
55                 }
56                 else
57                 {
58                     appendValue (IInclExclFilter.INCLUSION_PREFIX + spec, COMMA); // default to inclusion
59
}
60             }
61         }
62         
63         /**
64          * Set the 'file' attribute.
65          */

66         public void setFile (final File JavaDoc file)
67         {
68             appendValue ("@".concat (file.getAbsolutePath ()), COMMA); // actual file I/O delayed until getFilterSpecs()
69
}
70         
71         public void setIncludes (final String JavaDoc value)
72         {
73             final String JavaDoc [] specs = Strings.merge (new String JavaDoc [] {value}, COMMA_DELIMITERS, true);
74             
75             for (int i = 0; i < specs.length; ++ i)
76             {
77                 final String JavaDoc spec = specs [i];
78                 
79                 if (spec.startsWith (IInclExclFilter.INCLUSION_PREFIX_STRING))
80                 {
81                     appendValue (spec, COMMA);
82                 }
83                 else
84                 {
85                     if (spec.startsWith (IInclExclFilter.EXCLUSION_PREFIX_STRING))
86                         appendValue (IInclExclFilter.INCLUSION_PREFIX + spec.substring (1), COMMA); // override
87
else
88                         appendValue (IInclExclFilter.INCLUSION_PREFIX + spec, COMMA);
89                 }
90             }
91         }
92         
93         public void setExcludes (final String JavaDoc value)
94         {
95             final String JavaDoc [] specs = Strings.merge (new String JavaDoc [] {value}, COMMA_DELIMITERS, true);
96             
97             for (int i = 0; i < specs.length; ++ i)
98             {
99                 final String JavaDoc spec = specs [i];
100                 
101                 if (spec.startsWith (IInclExclFilter.EXCLUSION_PREFIX_STRING))
102                 {
103                     appendValue (spec, COMMA);
104                 }
105                 else
106                 {
107                     if (spec.startsWith (IInclExclFilter.INCLUSION_PREFIX_STRING))
108                         appendValue (IInclExclFilter.EXCLUSION_PREFIX + spec.substring (1), COMMA); // override
109
else
110                         appendValue (IInclExclFilter.EXCLUSION_PREFIX + spec, COMMA);
111                 }
112             }
113         }
114         
115     } // end of nested class
116

117
118     public FilterCfg (final Task task)
119     {
120         if (task == null) throw new IllegalArgumentException JavaDoc ("null input: task");
121         
122         m_task = task;
123         m_filterList = new ArrayList JavaDoc ();
124     }
125
126     
127     // filter attribute/element:
128

129     public void setFilter (final String JavaDoc filter)
130     {
131         createFilter ().appendValue (filter, COMMA);
132     }
133     
134     public filterElement createFilter ()
135     {
136         final filterElement result = new filterElement (m_task);
137         m_filterList.add (result);
138         
139         return result;
140     }
141     
142     // ACCESSORS:
143

144     public String JavaDoc [] getFilterSpecs ()
145     {
146         if (m_specs != null)
147             return m_specs;
148         else
149         {
150             if ((m_filterList == null) || m_filterList.isEmpty ())
151             {
152                 m_specs = IConstants.EMPTY_STRING_ARRAY;
153             }
154             else
155             {
156                 final String JavaDoc [] values = new String JavaDoc [m_filterList.size ()];
157                 
158                 int j = 0;
159                 for (Iterator JavaDoc i = m_filterList.iterator (); i.hasNext (); ++ j)
160                     values [j] = ((StringValue) i.next ()).getValue ();
161                                 
162                 try
163                 {
164                     m_specs = Strings.mergeAT (values, COMMA_DELIMITERS, true);
165                 }
166                 catch (IOException JavaDoc ioe)
167                 {
168                     throw (BuildException) SuppressableTask.newBuildException (m_task.getTaskName ()
169                         + ": I/O exception while processing input" , ioe, m_task.getLocation ()).fillInStackTrace ();
170                 }
171             }
172             
173             return m_specs;
174         }
175     }
176     
177     // protected: .............................................................
178

179
180     protected static final String JavaDoc COMMA = ",";
181     protected static final String JavaDoc COMMA_DELIMITERS = COMMA + Strings.WHITE_SPACE;
182     protected static final String JavaDoc PATH_DELIMITERS = COMMA.concat (File.pathSeparator);
183     
184     // package: ...............................................................
185

186     // private: ...............................................................
187

188     
189     private final Task m_task; // never null
190
private final List JavaDoc /* filterElement */ m_filterList; // never null
191

192     private transient String JavaDoc [] m_specs;
193
194 } // end of class
195
// ----------------------------------------------------------------------------
Popular Tags