001: package net.firstpartners.nounit.ui.common;
002:
003: /**
004: * Title: NoUnit - Identify Classes that are not being unit Tested
005: *
006: * Copyright (C) 2001 Paul Browne , FirstPartners.net
007: *
008: *
009: * This program is free software; you can redistribute it and/or
010: * modify it under the terms of the GNU General Public License
011: * as published by the Free Software Foundation; either version 2
012: * of the License, or (at your option) any later version.
013: *
014: * This program is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
017: * GNU General Public License for more details.
018: *
019: * You should have received a copy of the GNU General Public License
020: * along with this program; if not, write to the Free Software
021: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
022: *
023: * @author Paul Browne
024: * @version 0.7
025: */
026:
027: import java.lang.reflect.Field;
028: import java.util.Iterator;
029:
030: import net.firstpartners.nounit.utility.NoUnitException;
031:
032: /**
033: * Checks to see the values stored in a Package are only those that have public keys
034: * i.e. public static final string KEY_NAME ="key_to_check_for"
035: * Helps pick up miss-spellings
036: * e.g changing key names , or adding basic defaults (from Parameters file)
037: */
038: public class ExtraValueChecker {
039:
040: /**
041: * checkCommandLineValues
042: * @param inValues - sets of Values to Check
043: * @return successFlag - true if all values match those specified
044: * @exception NoUnitException if values do not match
045: * @exception java.lang.ClassNotFoundException
046: */
047: public boolean checkForExtraKeys(CommandPackage inValues)
048: throws NoUnitException, java.lang.ClassNotFoundException {
049:
050: //Change to appropriate package
051: String acceptableValues;
052: boolean successFlag = true; // will be returned unless exception is thrown
053: Iterator storeNames;
054: String this Name;
055:
056: //Get list of all the acceptable / available keys in web package
057: try {
058: acceptableValues = getConcatinatedFields(
059: CommandPackage.class, inValues);
060: } catch (IllegalAccessException iae) {
061: throw new NoUnitException(iae,
062: "Could not read the list of Values that the System will accept");
063: }
064:
065: //Get the list of incoming values
066: storeNames = inValues.getStoreNames();
067:
068: //Now loop through and check that they all exist
069: while (storeNames.hasNext()) {
070:
071: this Name = (String) storeNames.next();
072: if (acceptableValues.indexOf(this Name) < 0) {
073: if (!(this Name.equals("XXX"))) { //
074: throw new NoUnitException(
075: "The System did not recognize the key:"
076: + this Name);
077: }
078: }
079: }
080:
081: return successFlag;
082: }
083:
084: /**
085: * Get a Concatinated list of fields in a class
086: * @param classToProcess
087: * @param instanceOfClass to use to check available fields
088: * @return concatinatedFields - as list in value1:value2 suitable for indexof search
089: */
090: private String getConcatinatedFields(Class classToProcess,
091: Object instanceOfClass) throws IllegalAccessException {
092:
093: //Inner Variables
094: StringBuffer concatinatedFields = new StringBuffer();
095: Field[] listOfFields;
096: String this Name;
097: Object this Value;
098:
099: //Get list of Fields and build up string
100: listOfFields = classToProcess.getFields();
101:
102: for (int a = 0; a < listOfFields.length; a++) {
103:
104: //Get the field name
105: this Name = listOfFields[a].getName();
106: this Value = listOfFields[a].get(instanceOfClass);
107:
108: //now get the value of the field
109: if (this Value != null) {
110: concatinatedFields.append(this Value);
111: }
112: concatinatedFields.append(":\n");
113:
114: }
115:
116: return concatinatedFields.toString();
117:
118: }
119:
120: }
|