/* ContentLoader.java

	Purpose:
		
	Description:
		
	History:
		Fri Jun  3 12:40:06     2005, Created by tomyeh

Copyright (C) 2005 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
	This program is distributed under LGPL Version 2.1 in the hope that
	it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.util.resource;

import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.URL;

import org.zkoss.io.Files;

/**
 * A {@link Loader} that loads the resource by use URL.getContent()
 * if the source is URL, or loads into a String if the source is a File
 * (and assuming UTF-8).
 *
 * @author tomyeh
 */
public class ContentLoader extends AbstractLoader<Object, String> {
	//-- Loader --//
	public String load(Object src) throws Exception {
		final InputStream is;
		if (src instanceof URL) {
			is = ((URL)src).openStream();
		} else if (src instanceof File) {
			is = new FileInputStream((File)src);
		} else if (src == null) {
			throw new NullPointerException();
		} else {
			throw new IllegalArgumentException("Unknown soruce: "+src+"\nOnly File and URL are supported");
		}
		try {
			return Files.readAll(new InputStreamReader(is, "UTF-8")).toString();
		} finally {
			Files.close(is);
		}
	}
}
