001: /* DDSteps - Data Driven JUnit Test Steps
002: * Copyright (C) 2006 Jayway AB
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License version 2.1 as published by the Free Software Foundation.
007: *
008: * This library is distributed in the hope that it will be useful,
009: * but WITHOUT ANY WARRANTY; without even the implied warranty of
010: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011: * Lesser General Public License for more details.
012: *
013: * You should have received a copy of the GNU Lesser General Public
014: * License along with this library; if not, visit
015: * http://www.opensource.org/licenses/lgpl-license.php
016: */
017: package org.ddsteps.dataset;
018:
019: import org.apache.commons.collections.Predicate;
020: import org.apache.commons.collections.Transformer;
021: import org.apache.commons.lang.Validate;
022: import org.ddsteps.dataset.decorator.DataSetDecorator;
023:
024: /**
025: * Decorator for a DataSetLoader that adds transformers to the DataSet, such as
026: * PropertyPlaceholderTransformer.
027: *
028: * @author adamskogman
029: */
030: public class DecoratingDataSetLoader implements DataSetLoader {
031:
032: /**
033: * Dependency: DataSetLoader
034: */
035: protected final DataSetLoader dataSetLoader;
036:
037: /**
038: * Property.
039: */
040: protected Predicate dataTableNamePredicate;
041:
042: /**
043: * Property.
044: */
045: protected Transformer dataValueTransformer;
046:
047: /**
048: * Loads
049: *
050: * @param dataSetLoader
051: * The backing data set loader.
052: */
053: public DecoratingDataSetLoader(DataSetLoader dataSetLoader) {
054: super ();
055:
056: Validate.notNull(dataSetLoader,
057: "Argument dataSetLoader must not be null.");
058: this .dataSetLoader = dataSetLoader;
059: }
060:
061: /**
062: * @return Returns the dataTableNamePredicate.
063: */
064: public Predicate getDataTableNamePredicate() {
065: return dataTableNamePredicate;
066: }
067:
068: /**
069: * @return Returns the dataValueTransformer.
070: */
071: public Transformer getDataValueTransformer() {
072: return dataValueTransformer;
073: }
074:
075: /**
076: * @see org.ddsteps.dataset.DataSetLoader#loadDataSet(java.lang.Class)
077: */
078: public DataSet loadDataSet(Class clazz) {
079:
080: // Get dataset from backing loader
081: DataSet dataSet = dataSetLoader.loadDataSet(clazz);
082:
083: // Wrap if we have something to add
084: if (anyDecoratorsSet()) {
085:
086: DataSetDecorator decoratedDataSet = new DataSetDecorator(
087: dataSet);
088:
089: // The decorator doesn't like null
090: if (dataValueTransformer != null) {
091: decoratedDataSet
092: .setDataValueTransformer(dataValueTransformer);
093: }
094: if (dataTableNamePredicate != null) {
095: decoratedDataSet
096: .setDataTableNamePredicate(dataTableNamePredicate);
097: }
098:
099: dataSet = decoratedDataSet;
100: }
101:
102: return dataSet;
103: }
104:
105: /**
106: * Check if there are any transformers or predicates to decorate with.
107: *
108: * @return true if not all are null.
109: */
110: protected boolean anyDecoratorsSet() {
111: return dataValueTransformer != null
112: || dataTableNamePredicate != null;
113: }
114:
115: /**
116: * Predicate that filters out unwanted tables by name. Set to null to
117: *
118: * @param dataTableNamePredicate
119: * The dataTableNamePredicate to set.
120: */
121: public void setDataTableNamePredicate(
122: Predicate dataTableNamePredicate) {
123: this .dataTableNamePredicate = dataTableNamePredicate;
124: }
125:
126: /**
127: * Transformer that converts a value (object) from the dataset before it is
128: * pushed onto the target bean or otherwise used.
129: *
130: * @param dataValueTransformer
131: * The dataValueTransformer to set.
132: */
133: public void setDataValueTransformer(Transformer dataValueTransformer) {
134: this.dataValueTransformer = dataValueTransformer;
135: }
136: }
|