1   package com.mccrory.scott.spumoni;
2   
3   ////////////////////////////////////////////////////////////////////////////////
4   // Copyright (C) 2002  Scott McCrory
5   //
6   // This program is free software; you can redistribute it and/or
7   // modify it under the terms of the GNU General Public License
8   // as published by the Free Software Foundation; either version 2
9   // of the License, or (at your option) any later version.
10  //
11  // This program is distributed in the hope that it will be useful,
12  // but WITHOUT ANY WARRANTY; without even the implied warranty of
13  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  // GNU General Public License for more details.
15  //
16  // You should have received a copy of the GNU General Public License
17  // along with this program; if not, write to the Free Software
18  // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  ////////////////////////////////////////////////////////////////////////////////
20  
21  import java.io.IOException;
22  import java.io.ObjectInputStream;
23  import java.io.ObjectOutputStream;
24  import java.util.StringTokenizer;
25  import java.util.Vector;
26  
27  /**
28   * <P><code>StatsProgram</code> is a data object for the statistics programs
29   * handled by Spumoni through the StatsCollector class.
30   * It also contains attributes such as the program name, regexp, a list
31   * of required modules, max run time and a Vector of StatsValue objects.</P>
32   *
33   * @author <a href="mailto:smccrory@users.sourceforge.net">Scott McCrory</a>.
34   * @version CVS $Id: StatsProgram.java,v 1.8 2002/08/04 22:04:53 smccrory Exp $
35   */
36  public class StatsProgram {
37  
38      /** The name of this class to log context without introspection **/
39      private static final String CLASS_NAME = "StatsProgram";
40  
41      /** The version of this class (filled in by CVS) **/
42      private static final String VERSION = "CVS $Revision: 1.8 $";
43  
44      /** The program's configuration filename (where we learned about it) **/
45      private String xmlFilename = "";
46  
47      /** The program's command **/
48      private String program = "";
49  
50      /** The program's regular expression string **/
51      private String regexp = "";
52  
53      /** The program's list of required modules **/
54      private Vector requiredModules = new Vector();
55  
56      /** The program's maximum run time in seconds **/
57      private int maxRunTime = 0;
58  
59      /** A set of stats values that are extracted from our output **/
60      private StatsValueList statsValueList = new StatsValueList();
61  
62      /**
63       * Basic StatsProgram constructor.
64       */
65      public StatsProgram() {
66          super();
67      }
68      
69      /**
70       * A convenience StatsProgram contructor to set all of the data elements
71       * at the time of creation.
72       * 
73       * @param newXmlFilename        The program's source XML filename
74       * @param newProgram            The program's command string
75       * @param newRegexp             Regexp string
76       * @param newRequiredModules    List of required modules
77       * @param newMaxRunTime         Maximum run time
78       * @param newStatsValueList     List of stats values
79       */
80      public StatsProgram(
81          String newXmlFilename,
82          String newProgram,
83          String newRegexp,
84          Vector newRequiredModules,
85          int newMaxRunTime,
86          StatsValueList newStatsValueList) {
87  
88          xmlFilename = newXmlFilename;
89          program = newProgram;
90          regexp = newRegexp;
91          requiredModules = newRequiredModules;
92          maxRunTime = newMaxRunTime;
93          statsValueList = newStatsValueList;
94  
95      }
96      
97      /**
98       * Adds the StatsValue object to our StatsValueList
99       * @param sv com.mccrory.scott.spumoni.StatsValue
100      */
101     public void addStatsValue(StatsValue sv) {
102         statsValueList.add(sv);
103     }
104     
105     /**
106      * We override the <code>clone</code> method here to prevent cloning of our class.
107      *
108      * @throws CloneNotSupportedException To indicate cloning is not allowed
109      * @return Nothing ever really returned since we throw a CloneNotSupportedException
110      **/
111     public final Object clone() throws CloneNotSupportedException {
112 
113         throw new CloneNotSupportedException();
114 
115     }
116     
117     /**
118      * Returns the program's maximum run time in seconds.
119      * @return int
120      */
121     public int getMaxRunTime() {
122         return maxRunTime;
123     }
124     
125     /**
126      * Returns the program's command string.
127      * @return java.lang.String
128      */
129     public java.lang.String getProgram() {
130         return program;
131     }
132     
133     /**
134      * Returns the program's regexp string.
135      * @return java.lang.String
136      */
137     public java.lang.String getRegexp() {
138         return regexp;
139     }
140     
141     /**
142      * Returns a Vector of the program's required modules.
143      * @return java.util.Vector
144      */
145     public java.util.Vector getRequiredModules() {
146         return requiredModules;
147     }
148     
149     /**
150      * Returns a StatsValueList of the program's StatsValue objects.
151      * @return StatsValueList
152      */
153     public StatsValueList getStatsValueList() {
154         return statsValueList;
155     }
156     
157     /**
158      * Returns a vector of all of the OIDs in this StatsProgram
159      * @return A vector of all of the OIDs in this StatsProgram
160      */
161     public Vector getOids() {
162         
163         return statsValueList.getOids();
164 
165     }
166     
167     /**
168      * Returns the program's source XML filename.
169      * (i.e. where we learned about it).
170      * @return java.lang.String
171      */
172     public java.lang.String getXmlFilename() {
173         return xmlFilename;
174     }
175     
176     /**
177      * Parses a module list and returns them as individual elements in a Vector.
178      * We assume that the comma (",") is the delimiter
179      *
180      * @param moduleList A list of modules separated by commas
181      * @return The list of modules parsed from the comma-delimited string
182      */
183     private static Vector parseModuleList(String moduleList) {
184 
185         if (moduleList == null || moduleList.length() < 1) {
186             return null;
187         }
188 
189         Vector tempModuleList = new Vector();
190 
191         StringTokenizer st = new StringTokenizer(moduleList, ",");
192         while (st.hasMoreTokens()) {
193             tempModuleList.add(st.nextElement());
194         }
195 
196         return tempModuleList;
197 
198     }
199     
200     /**
201      * We override the <code>readObject</code> method here to prevent
202      * deserialization of our class for security reasons.
203      *
204      * @param in java.io.ObjectInputStream
205      * @throws IOException thrown if a problem occurs
206      **/
207     private final void readObject(ObjectInputStream in) throws IOException {
208 
209         throw new IOException("Object cannot be deserialized");
210 
211     }
212     
213     /**
214      * Sets the program's maximum run time in seconds.
215      * @param newMaxRunTime int
216      */
217     public void setMaxRunTime(int newMaxRunTime) {
218         maxRunTime = newMaxRunTime;
219     }
220     
221     /**
222      * Sets the program's command string.
223      * @param newProgram java.lang.String
224      */
225     public void setProgram(java.lang.String newProgram) {
226         program = newProgram;
227     }
228     
229     /**
230      * Sets the program's regular expression string.
231      * @param newRegexp java.lang.String
232      */
233     public void setRegexp(java.lang.String newRegexp) {
234         regexp = newRegexp;
235     }
236     
237     /**
238      * Sets the program's Vector of required modules from a
239      * comma-delimited string.
240      * @param newRequiredModules java.util.Vector
241      */
242     public void setRequiredModules(String newRequiredModules) {
243         requiredModules = parseModuleList(newRequiredModules);
244     }
245     
246     /**
247      * Sets the program's Vector of required modules.
248      * @param newRequiredModules java.util.Vector
249      */
250     public void setRequiredModules(java.util.Vector newRequiredModules) {
251         requiredModules = newRequiredModules;
252     }
253     
254     /**
255      * Sets the program's Vector of StatsValue objects.
256      * @param newStatsValueList The new StatsValueList we're storing
257      */
258     public void setStatsValues(StatsValueList newStatsValueList) {
259         statsValueList = newStatsValueList;
260     }
261     
262     /**
263      * Sets the program's source XML filename.
264      * (i.e. where we learned about it).
265      * @param newXmlFilename The XML filename which defines this object
266      */
267     public void setXmlFilename(java.lang.String newXmlFilename) {
268         xmlFilename = newXmlFilename;
269     }
270     
271     /**
272      * Returns a formatted String of this object's values
273      * @return java.lang.String
274      */
275     public String toString() {
276         String s =
277             "xmlFilename='"
278                 + xmlFilename
279                 + "', "
280                 + "program='"
281                 + program
282                 + "', "
283                 + "regexp='"
284                 + regexp
285                 + "', "
286                 + "requiredModules='"
287                 + requiredModules
288                 + "', "
289                 + "maxRunTime='"
290                 + maxRunTime
291                 + "', "
292                 + "statsValueList='"
293                 + statsValueList
294                 + "'";
295         return s;
296     }
297     
298     /**
299      * Unsets the values in all of the attached StatsValue objects.
300      * Creation date: (1/22/2002 8:55:26 PM)
301      */
302     public void unsetStatsValues() {
303 
304         statsValueList.unsetValues();
305 
306     }
307     
308     /**
309      * We override the <code>writeObject</code> method here to prevent
310      * serialization of our class for security reasons.
311      *
312      * @param out java.io.ObjectOutputStream
313      * @throws IOException thrown if a problem occurs
314      **/
315     private final void writeObject(ObjectOutputStream out) throws IOException {
316 
317         throw new IOException("Object cannot be serialized");
318 
319     }
320     
321 }