1 //$Id: DataSet.java 256 2006-10-23 21:56:10Z jg_hamburg $ 2 /******************************************************************************** 3 * DDTUnit, a Datadriven Approach to Unit- and Moduletesting 4 * Copyright (c) 2004, Joerg and Kai Gellien 5 * All rights reserved. 6 * 7 * The Software is provided under the terms of the Common Public License 1.0 8 * as provided with the distribution of DDTUnit in the file cpl-v10.html. 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * + Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 16 * + Redistributions in binary form must reproduce the above 17 * copyright notice, this list of conditions and the following 18 * disclaimer in the documentation and/or other materials provided 19 * with the distribution. 20 * 21 * + Neither the name of the authors or DDTUnit, nor the 22 * names of its contributors may be used to endorse or promote 23 * products derived from this software without specific prior 24 * written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 27 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 28 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 29 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR 30 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 31 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 32 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 33 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 34 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 35 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 36 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 ********************************************************************************/ 38 package junitx.ddtunit.data; 39 40 import java.util.Collection; 41 import java.util.HashMap; 42 import java.util.Iterator; 43 import java.util.Map; 44 45 /** 46 * Class containing all data objects used for executing a testclass. <br/ > The 47 * structure is a direct mapping of the xml resource structure of <br/ > 48 * <code>class - method - testcase</code> 49 * 50 * @author jg 51 */ 52 abstract public class DataSet implements IDataSet { 53 54 /** 55 * id to identify the dataset in a cache or repository 56 */ 57 private String dataSetId; 58 59 protected TypedObjectMap objectMap; 60 61 private Map subDataMap; 62 63 private IDataSet parentSet; 64 65 /** 66 * @param setId specifies id for identification of dataset 67 */ 68 public DataSet(String setId, IDataSet parent) { 69 this.dataSetId = setId; 70 this.objectMap = new TypedObjectMap(); 71 this.subDataMap = new HashMap(); 72 this.parentSet = parent; 73 } 74 75 /* 76 * (non-Javadoc) 77 * 78 * @see junitx.ddtunit.data.IDataSet#putObject(java.lang.String, 79 * junitx.ddtunit.data.TypedObject) 80 */ 81 public void putObject(String id, TypedObject entry) { 82 this.objectMap.put(id, entry); 83 } 84 85 /* 86 * (non-Javadoc) 87 * 88 * @see junitx.ddtunit.data.IDataSet#getObject(java.lang.String, 89 * java.lang.String) 90 */ 91 public TypedObject getObject(String id, String type) { 92 return this.objectMap.get(id, type); 93 } 94 95 /* 96 * (non-Javadoc) 97 * 98 * @see junitx.ddtunit.data.IDataSet#getObject(java.lang.String) 99 */ 100 public TypedObject getObject(String id) { 101 return this.objectMap.get(id); 102 } 103 104 public TypedObject findObject(String id) { 105 TypedObject local = getObject(id); 106 if (local == null && parentSet != null) { 107 local = parentSet.findObject(id); 108 } 109 return local; 110 } 111 112 public TypedObject findObject(String id, String type) { 113 if (type == null || TypedObject.UNKNOWN_TYPE.equals(type)) { 114 return findObject(id); 115 } 116 TypedObject local = getObject(id, type); 117 if (local == null && parentSet != null) { 118 local = parentSet.findObject(id, type); 119 } 120 return local; 121 } 122 123 /* 124 * (non-Javadoc) 125 * 126 * @see junitx.ddtunit.data.IDataSet#put(java.lang.String, 127 * junitx.ddtunit.data.IDataSet) 128 */ 129 public void put(String id, IDataSet dataSet) { 130 this.subDataMap.put(id, dataSet); 131 } 132 133 /* 134 * (non-Javadoc) 135 * 136 * @see junitx.ddtunit.data.IDataSet#get(java.lang.String) 137 */ 138 public IDataSet get(String id) { 139 IDataSet dataSet = null; 140 if (containsKey(id)) { 141 dataSet = (IDataSet) this.subDataMap.get(id); 142 } 143 return dataSet; 144 } 145 146 /* 147 * (non-Javadoc) 148 * 149 * @see junitx.ddtunit.data.IDataSet#containsKey(java.lang.String) 150 */ 151 public boolean containsKey(String key) { 152 return this.subDataMap.containsKey(key); 153 } 154 155 /* 156 * (non-Javadoc) 157 * 158 * @see junitx.ddtunit.data.IDataSet#getSubDataKeyIterator() 159 */ 160 public Iterator getSubDataIterator() { 161 return this.subDataMap.entrySet().iterator(); 162 } 163 164 /* 165 * (non-Javadoc) 166 * 167 * @see junitx.ddtunit.data.IDataSet#getSubDataValues() 168 */ 169 public Collection getSubDataValues() { 170 return this.subDataMap.values(); 171 } 172 173 /* 174 * (non-Javadoc) 175 * 176 * @see junitx.ddtunit.data.IDataSet#size() 177 */ 178 public int size() { 179 return this.subDataMap.size(); 180 } 181 182 /** 183 * Return human readable description of object. 184 * 185 * @return Desciption of object. 186 */ 187 public String toString() { 188 StringBuffer info = new StringBuffer("DataSet(").append(this.dataSetId) 189 .append("-type=").append(this.getClass().getName()); 190 191 return info.toString(); 192 } 193 194 /* 195 * (non-Javadoc) 196 * 197 * @see junitx.ddtunit.data.IDataSet#getId() 198 */ 199 public String getId() { 200 return dataSetId; 201 } 202 203 }