/*****************************************************************************
 * su4sml --- a SML repository for managing (Secure)UML/OCL models
 *             http://projects.brucker.ch/su4sml/
 *                                                                            
 * TestData.java --- 
 * This file is part of su4sml.
 *
 * Copyright (c) 2005-2007, ETH Zurich, Switzerland
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *
 *     * Redistributions in binary form must reproduce the above
 *       copyright notice, this list of conditions and the following
 *       disclaimer in the documentation and/or other materials provided
 *       with the distribution.
 *
 *     * Neither the name of the copyright holders nor the names of its
 *       contributors may be used to endorse or promote products derived
 *       from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ******************************************************************************/
/* $Id$ */

package ch.ethz.infsec.jtestdataaccessor;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

/**
 * Root of the "tree" which contains the tests.
 * 
 * @author ms
 * 
 */
public class TestData {

	private Map<String, List<FunctionUnderTest>> functions;

	private TestDataAccessor testdataaccessor;

	public TestData() {
		functions = new HashMap<String, List<FunctionUnderTest>>();
	}

	/**
	 * Add testdata for another function to the testsuite.
	 * 
	 * @param test
	 *            testdata for the function.
	 */
	public void addTest(FunctionUnderTest test) {
		List<FunctionUnderTest> testlist = functions.get(test.getName());
		test.setTestData(this);
		if (testlist != null) {
			testlist.add(test);
		} else {
			testlist = new Vector<FunctionUnderTest>();
			testlist.add(test);
			functions.put(test.getName(), testlist);
		}
	}

	/**
	 * Get the tests of a given function.
	 * 
	 * @param function
	 *            the function.
	 * @return the tests.
	 */
	protected List<FunctionUnderTest> getTests(String function) {
		return functions.get(function);
	}

	/**
	 * Pretty print the testdata.
	 */
	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer();
		for (String fname : functions.keySet()) {
			sb.append("Function under test: " + fname + "\n");
			for (FunctionUnderTest function : functions.get(fname)) {
				sb.append(function.toString("  "));
			}
		}
		return sb.toString();
	}

	/**
	 * Set the {@link TestDataAccessor} these testdata belong to.
	 * 
	 * @param testdataaccessor
	 *            the testdataaccessor.
	 */
	public void setTestDataAccessor(TestDataAccessor testdataaccessor) {
		this.testdataaccessor = testdataaccessor;
	}

	/**
	 * Get the {@link TestDataAccessor} these testdata belong to.
	 * 
	 * @return the testdataaccessor.
	 */
	public TestDataAccessor getTestDataAccessor() {
		return testdataaccessor;
	}

}
