001: //$Id: ReferenceProcessor.java 240 2006-05-03 22:45:16Z jg_hamburg $
002: /********************************************************************************
003: * DDTUnit, a Datadriven Approach to Unit- and Moduletesting
004: * Copyright (c) 2004, Joerg and Kai Gellien
005: * All rights reserved.
006: *
007: * The Software is provided under the terms of the Common Public License 1.0
008: * as provided with the distribution of DDTUnit in the file cpl-v10.html.
009: * Redistribution and use in source and binary forms, with or without
010: * modification, are permitted provided that the following conditions
011: * are met:
012: *
013: * + Redistributions of source code must retain the above copyright
014: * notice, this list of conditions and the following disclaimer.
015: *
016: * + Redistributions in binary form must reproduce the above
017: * copyright notice, this list of conditions and the following
018: * disclaimer in the documentation and/or other materials provided
019: * with the distribution.
020: *
021: * + Neither the name of the authors or DDTUnit, nor the
022: * names of its contributors may be used to endorse or promote
023: * products derived from this software without specific prior
024: * written permission.
025: *
026: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
027: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
028: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
029: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
030: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
031: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
032: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
033: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
034: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
035: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
036: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
037: ********************************************************************************/package junitx.ddtunit.data.processing;
038:
039: import java.util.List;
040: import java.util.Vector;
041:
042: import junitx.ddtunit.data.IDataSet;
043:
044: class ReferenceProcessor implements IReferenceListener {
045: private List refList;
046:
047: private IDataSet clusterDataSet;
048:
049: private String groupId;
050:
051: private String testId;
052:
053: /**
054: * @param clusterDataSet
055: *
056: */
057: public ReferenceProcessor(IDataSet clusterDataSet, String groupId,
058: String testId) {
059: this .refList = new Vector();
060: this .clusterDataSet = clusterDataSet;
061: setGroupId(groupId);
062: setTestId(testId);
063: }
064:
065: public ReferenceProcessor(IDataSet clusterDataSet) {
066: this (clusterDataSet, ParserConstants.UNKNOWN,
067: ParserConstants.UNKNOWN);
068: }
069:
070: public void add(IReferenceInfo info) {
071: this .refList.add(info);
072: }
073:
074: public void resolve() {
075: checkRankingOrder();
076: sortRefList();
077: for (int pos = 0; pos < this .refList.size(); pos++) {
078: IReferenceInfo info = (IReferenceInfo) this .refList
079: .get(pos);
080: info.resolve(this .clusterDataSet, this .getGroupId(), this
081: .getTestId());
082: }
083: clear();
084: }
085:
086: private void checkRankingOrder() {
087: for (int countA = 0; countA < this .refList.size(); countA++) {
088: IReferenceInfo infoA = (IReferenceInfo) this .refList
089: .get(countA);
090: for (int countB = countA + 1; countB < this .refList.size(); countB++) {
091: IReferenceInfo infoB = (IReferenceInfo) this .refList
092: .get(countB);
093: infoA.raiseRankOf(infoB);
094: infoB.raiseRankOf(infoA);
095: }
096: }
097: }
098:
099: private void sortRefList() {
100: boolean hasChanged = true;
101: while (hasChanged) {
102: hasChanged = false;
103: for (int countA = 0; countA < this .refList.size(); countA++) {
104: IReferenceInfo infoA = (IReferenceInfo) this .refList
105: .get(countA);
106: int aPos = countA;
107: for (int countB = countA + 1; countB < this .refList
108: .size(); countB++) {
109: IReferenceInfo infoB = (IReferenceInfo) this .refList
110: .get(countB);
111: if (infoA.getRank() < infoB.getRank()) {
112: hasChanged = true;
113: this .refList.set(countB, infoA);
114: this .refList.set(aPos, infoB);
115: aPos = countB;
116: }
117: }
118: if (hasChanged) {
119: countA = -1;
120: hasChanged = false;
121: }
122: }
123: }
124: }
125:
126: private void clear() {
127: this .refList.clear();
128: }
129:
130: public String getGroupId() {
131: return this .groupId;
132: }
133:
134: public void setGroupId(String groupId) {
135: if (groupId == null) {
136: this .groupId = ParserConstants.UNKNOWN;
137: } else {
138: this .groupId = groupId;
139: }
140: }
141:
142: public String getTestId() {
143: return this .testId;
144: }
145:
146: public void setTestId(String testId) {
147: if (testId == null) {
148: this.testId = ParserConstants.UNKNOWN;
149: } else {
150: this.testId = testId;
151: }
152: }
153: }
|