+++ /dev/null
-package tim.prune.load;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import tim.prune.data.AudioClip;
-import tim.prune.data.MediaObject;
-import tim.prune.data.Photo;
-
-/**
- * Class to provide helper functions for loading media
- */
-public abstract class MediaHelper
-{
- /** File filters */
- private static GenericFileFilter _jpegFilter = null, _audioFilter = null;
-
-
- /**
- * Construct a MediaObject for the given path
- * @param inZipFile path to archive file (if any)
- * @param inPath path to media file
- * @param inSourceFile file from which data was loaded
- * @return either Photo or AudioClip object as appropriate, or null
- */
- public static MediaObject createMediaObject(File inZipFile, String inPath, File inSourceFile)
- {
- if (inPath == null || inPath.length() < 5) return null;
- InputStream is = null;
- ZipFile zf = null;
- byte[] data = null;
- String url = null;
- try
- {
- // Check if path is a URL, in which case get an input stream from it
- if (inPath.substring(0, 5).toLowerCase().equals("http:"))
- {
- url = inPath;
- is = new URL(inPath).openStream();
- data = ByteScooper.scoop(is);
- }
- }
- catch (IOException ioe) {
- System.err.println("Got ioe from url: " + ioe.getMessage());
- } // is stays null
-
- // Now see if file is in the zip file
- if (is == null && inZipFile != null && inZipFile.exists() && inZipFile.canRead())
- {
- try
- {
- zf = new ZipFile(inZipFile);
- ZipEntry entry = zf.getEntry(inPath);
- if (entry != null && entry.getSize() > 0)
- {
- data = ByteScooper.scoop(zf.getInputStream(entry));
- // System.out.println("Size of data " + (data.length == entry.getSize()?"matches":"DOESN'T match"));
- }
- }
- catch (IOException ioe) {
- System.err.println("Got ioe from zip file: " + ioe.getMessage());
- }
- }
- // Clean up input streams
- if (is != null) try {
- is.close();
- } catch (IOException ioe) {}
- if (zf != null) try {
- zf.close();
- } catch (IOException ioe) {}
-
- if (data != null)
- {
- // Create Photo or AudioClip using this entry
- String filename = new File(inPath).getName();
- initFilters();
- if (_jpegFilter.acceptFilename(inPath)) {
- return new Photo(data, filename, url);
- }
- else if (_audioFilter.acceptFilename(inPath)) {
- return new AudioClip(data, filename, url);
- }
- return null;
- }
-
- // If we haven't got a result by now, try to load plain file
- File file = new File(inPath);
- if (inSourceFile != null && !file.isAbsolute()) {
- file = new File(inSourceFile.getParent(), inPath);
- }
- // awkward construction because new File(startPath, absolutePath) doesn't work
- return createMediaObject(file);
- }
-
- /**
- * Construct a MediaObject for the given file
- * @param inFile file to load
- * @return either Photo or AudioClip object as appropriate, or null
- */
- private static MediaObject createMediaObject(File inFile)
- {
- if (inFile == null) {return null;}
- if (!inFile.exists() || !inFile.canRead() || !inFile.isFile()) {return null;}
- initFilters();
- // Check if filename looks like a jpeg
- if (_jpegFilter.acceptFilename(inFile.getName())) {
- return JpegLoader.createPhoto(inFile);
- }
- // Check if filename looks like an audio clip
- if (_audioFilter.acceptFilename(inFile.getName())) {
- return new AudioClip(inFile);
- }
- // Neither photo nor audio
- return null;
- }
-
- /**
- * Initialise filters if necessary
- */
- private static void initFilters()
- {
- if (_jpegFilter == null) {
- _jpegFilter = new JpegFileFilter();
- _audioFilter = new AudioFileFilter();
- }
- }
-}