|
StatsProgramList |
|
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.HashMap;
25 import java.util.Vector;
26
27 /**
28 * <P><code>StatsProgramList</code> is a collection of StatsProgram objects.
29 * It also contains method used to operate on that group of objects.</P>
30 *
31 * @author <a href="mailto:smccrory@users.sourceforge.net">Scott McCrory</a>.
32 * @version CVS $Id: StatsProgramList.java,v 1.10 2002/08/04 22:04:53 smccrory Exp $
33 */
34 public class StatsProgramList extends java.util.Vector {
35
36 /**
37 * StatsProgramList constructor comment.
38 */
39 public StatsProgramList() {
40 super();
41 }
42
43 /**
44 * StatsValueList constructor with preset minimum size.
45 * @param initialCapacity Initial capacity
46 */
47 public StatsProgramList(int initialCapacity) {
48 super(initialCapacity);
49 }
50
51 /**
52 * StatsValueList constructor with preset minimum size and capacity increment.
53 * @param initialCapacity Initial capacity
54 * @param capacityIncrement Capacity increment
55 */
56 public StatsProgramList(int initialCapacity, int capacityIncrement) {
57 super(initialCapacity, capacityIncrement);
58 }
59
60 /**
61 * Convenience constructor for creating a new StatsProgramList and populating
62 * it with a single StatsProgram.
63 * @param sProg The StatsProgram which will be immediately added
64 */
65 public StatsProgramList(StatsProgram sProg) {
66 this();
67 this.add(sProg);
68 }
69
70 /**
71 * Searches for OID conflicts and returns a list of StatsProgram objects
72 * and their offending StatsValue components. This should give the user
73 * everything they need to resolve the issue(s).
74 * @return StatsProgramList
75 */
76 public StatsProgramList getOidConflicts() {
77
78 // We use a HashMap to temporarily store OIDs and their
79 // encapsulating Objects to later fully inform the user of their
80 // evil OID conflict transgressions
81 HashMap oidHashMap = new HashMap();
82 StatsProgramList programOidConflicts = new StatsProgramList();
83
84 // Iterate through each one of our StatsProgram objects
85 for (int statsProgIndex = 0; statsProgIndex < this.size(); statsProgIndex++) {
86
87 StatsProgram newStatsProgram = (StatsProgram) this.get(statsProgIndex);
88 StatsValueList svl = newStatsProgram.getStatsValueList();
89
90 // Iterate through each StatsProgram's StatsValue objects
91 for (int statsValueIndex = 0;
92 statsValueIndex < svl.size();
93 statsValueIndex++) {
94
95 StatsValue sv = (StatsValue) svl.get(statsValueIndex);
96 String oid = sv.getSnmpOid();
97
98 // Check non-null oids for conflicts
99 if (oid != null && oid.length() > 0) {
100
101 // Check to see if oid is already on our HashMap
102 StatsProgram earlierStatsProgram = (StatsProgram) oidHashMap.get(oid);
103 if (earlierStatsProgram != null) {
104
105 // The oid is already there, so add both the original
106 // and the newly conflicting StatsProgram to our
107 // conflict list
108 programOidConflicts.add(earlierStatsProgram);
109 programOidConflicts.add(newStatsProgram);
110
111 }
112 else {
113
114 // Not already there, so put this on the oidHashMap
115 oidHashMap.put(oid, newStatsProgram);
116 }
117
118 }
119
120 }
121
122 }
123
124 return programOidConflicts;
125
126 }
127
128 /**
129 * Returns a StatsValue's value String corresponding to the specified OID.
130 * @return java.lang.String
131 * @param oid java.lang.String
132 * @exception java.util.NoSuchElementException if the OID isn't found.
133 */
134 public String getValueByOid(String oid)
135 throws java.util.NoSuchElementException {
136
137 for (int i = 0; i < this.size(); i++) {
138
139 StatsProgram sProg = (StatsProgram) get(i);
140 StatsValueList statsValueList = sProg.getStatsValueList();
141 try {
142 return (statsValueList.getValueByOid(oid));
143 }
144 catch (java.util.NoSuchElementException e) {
145 }
146
147 }
148
149 throw new java.util.NoSuchElementException("OID " + oid + " not found");
150
151 }
152
153 /**
154 * Returns a vector of all of the OIDs in the contained StatsPrograms
155 * @return A vector of all of the OIDs in the contained StatsPrograms
156 */
157 public Vector getOids() {
158
159 Vector oids = new Vector();
160
161 for (int i = 0; i < this.size(); i++) {
162
163 StatsProgram sProg = (StatsProgram) get(i);
164 Vector newOids = sProg.getOids();
165 oids.addAll(newOids);
166
167 }
168
169 return oids;
170
171 }
172
173 /**
174 * We override the <code>readObject</code> method here to prevent
175 * deserialization of our class for security reasons.
176 *
177 * @param in java.io.ObjectInputStream
178 * @throws IOException thrown if a problem occurs
179 **/
180 private final void readObject(ObjectInputStream in) throws IOException {
181
182 throw new IOException("Object cannot be deserialized");
183
184 }
185
186 /**
187 * Unsets all of the values.
188 * Typically done just before another round of stats collection.
189 */
190 public void unsetValues() {
191
192 for (int j = 0; j < this.size(); j++) {
193 StatsProgram sProg = (StatsProgram) get(j);
194 sProg.unsetStatsValues();
195 }
196
197 }
198
199 /**
200 * We override the <code>writeObject</code> method here to prevent
201 * serialization of our class for security reasons.
202 *
203 * @param out java.io.ObjectOutputStream
204 * @throws IOException thrown if a problem occurs
205 **/
206 private final void writeObject(ObjectOutputStream out) throws IOException {
207
208 throw new IOException("Object cannot be serialized");
209
210 }
211
212 }
|
StatsProgramList |
|