/*******************************************************************************
 * Copyright (C) 2007 The University of Manchester   
 * 
 *  Modifications to the initial code base are copyright of their
 *  respective authors, or their employers as appropriate.
 * 
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public License
 *  as published by the Free Software Foundation; either version 2.1 of
 *  the License, or (at your option) any later version.
 *    
 *  This program is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *    
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ******************************************************************************/
package net.sf.taverna.wsdl.testutils;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import net.sf.taverna.wsdl.parser.WSDLParserTest;

public class WSDLTestHelper implements LocationConstants {
	
	public static String wsdlResourcePath(String resourceName) throws Exception {
		return WSDLParserTest.class.getResource(WSDL_RESOURCE_BASE+resourceName).toExternalForm();
	}

    public String getResourceContentsString(String resourceName) throws Exception {
		InputStream stream = WSDLTestHelper.class.getResourceAsStream("/"+resourceName);
		BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
		String content="";
		String line="";
		while( (line = reader.readLine()) != null) {
			content+=line;
		}

		reader.close();

		return content;

	}

    

}
