All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nl.siegmann.epublib.util.VFSUtil Maven / Gradle / Ivy

The newest version!
package nl.siegmann.epublib.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import nl.siegmann.epublib.domain.MediaType;
import nl.siegmann.epublib.domain.Resource;
import nl.siegmann.epublib.service.MediatypeService;

import org.apache.commons.io.IOUtils;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.VFS;
import org.slf4j.Logger;import org.slf4j.LoggerFactory;

/**
 * Utitilies for making working with apache commons VFS easier.
 * 
 * @author paul
 *
 */
public class VFSUtil {
	
	private static final Logger log = LoggerFactory.getLogger(VFSUtil.class);

	public static Resource createResource(FileObject rootDir, FileObject file, String inputEncoding) throws IOException {
		MediaType mediaType = MediatypeService.determineMediaType(file.getName().getBaseName());
		if(mediaType == null) {
			return null;
		}
		String href = calculateHref(rootDir, file);
		Resource result = new Resource(null, IOUtils.toByteArray(file.getContent().getInputStream()), href, mediaType);
		result.setInputEncoding(inputEncoding);
		return result;
	}
	
	public static String calculateHref(FileObject rootDir, FileObject currentFile) throws IOException {
		String result = currentFile.getName().toString().substring(rootDir.getName().toString().length() + 1);
		result += ".html";
		return result;
	}

	/**
	 * First tries to load the inputLocation via VFS; if that doesn't work it tries to load it as a local File
	 * @param inputLocation
	 * @return the FileObject referred to by the inputLocation
	 * @throws FileSystemException
	 */
	public static FileObject resolveFileObject(String inputLocation) throws FileSystemException {
		FileObject result = null;
		try {
			result = VFS.getManager().resolveFile(inputLocation);
		} catch (Exception e) {
			try {
				result = VFS.getManager().resolveFile(new File("."), inputLocation);
			} catch (Exception e1) {
				log.error(e.getMessage(), e);
				log.error(e1.getMessage(), e);
			}
		}
		return result;
	}

	
	/**
	 * First tries to load the inputLocation via VFS; if that doesn't work it tries to load it as a local File
	 * 
	 * @param inputLocation
	 * @return the InputStream referred to by the inputLocation
	 * @throws FileSystemException
	 */
	public static InputStream resolveInputStream(String inputLocation) throws FileSystemException {
		InputStream result = null;
		try {
			result = VFS.getManager().resolveFile(inputLocation).getContent().getInputStream();
		} catch (Exception e) {
			try {
				result = new FileInputStream(inputLocation);
			} catch (FileNotFoundException e1) {
				log.error(e.getMessage(), e);
				log.error(e1.getMessage(), e);
			}
		}
		return result;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy