001: /*
002: * Enhydra Java Application Server Project
003: *
004: * The contents of this file are subject to the Enhydra Public License
005: * Version 1.1 (the "License"); you may not use this file except in
006: * compliance with the License. You may obtain a copy of the License on
007: * the Enhydra web site ( http://www.enhydra.org/ ).
008: *
009: * Software distributed under the License is distributed on an "AS IS"
010: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
011: * the License for the specific terms governing rights and limitations
012: * under the License.
013: *
014: * The Initial Developer of the Enhydra Application Server is Lutris
015: * Technologies, Inc. The Enhydra Application Server and portions created
016: * by Lutris Technologies, Inc. are Copyright Lutris Technologies, Inc.
017: * All Rights Reserved.
018: *
019: * Contributor(s):
020: *
021: * $Id: LocalZipResource.java,v 1.2 2006-06-15 14:07:00 sinisa Exp $
022: */
023:
024: package com.lutris.classloader;
025:
026: // lutris packages
027: // v. strahinja, 24 sep 2002
028: import java.io.FileNotFoundException;
029: import java.io.IOException;
030: import java.io.InputStream;
031: import java.util.zip.ZipEntry;
032: import java.util.zip.ZipFile;
033:
034: import com.lutris.logging.LogChannel;
035: import com.lutris.util.FatalExceptionError;
036:
037: /**
038: * <P>A <CODE>Resource</CODE> that is an entry in
039: * a specified zip file on the local machine. The zip file is represented by a
040: * <CODE>ClassPathEntry</CODE>, and the filename is specified by a String.
041: *
042: * @author Kristen Pol, Lutris Technologies
043: * @version $Revision : 1.1 $
044: * @see com.lutris.classloader.ClassPathEntry
045: * @see com.lutris.classloader.Resource
046: * @see java.util.zip.ZipFile
047: * @see java.util.zip.ZipEntry
048: */
049: public class LocalZipResource extends Resource {
050:
051: // private data members
052:
053: /** The ZipEntry that represents this resource. */
054: private ZipEntry zipEntry = null;
055:
056: // constructors
057:
058: /**
059: * Constructs local zip file resource with specified name and location.
060: *
061: * @param name The file name of the resource.
062: * @param location The location of the resource.
063: * @param loadLogChannel The log channel for logging.
064: * @exception FileNotFoundException if the desired file does not exist or
065: * does not have read permission.
066: * @see Resource
067: * @see ClassPathEntry
068: */
069: protected LocalZipResource(String name, ClassPathEntry location,
070: // v. strahinja, 24 sep 2002
071: LogChannel loadLogChannel)
072: // Logger loadLogger)
073: throws FileNotFoundException {
074: // v. strahinja, 24 sep 2002
075: super (name, location, loadLogChannel);
076: // super(name, location, loadLogger);
077: ZipFile zipFile = location.getZipFile();
078: if (zipFile == null) {
079: throw new FileNotFoundException(
080: "There is no zip file associated with resource: "
081: + location);
082: }
083: try {
084: zipEntry = zipFile.getEntry(name);
085: if (zipEntry == null) {
086: throw new FileNotFoundException("Entry, " + name
087: + ", does not exist in zip " + "file, "
088: + zipFile);
089: }
090: size = zipEntry.getSize();
091: //lastModifiedTime = zipEntry.getTime();
092: } catch (IOException e) {
093: throw new FileNotFoundException("Entry, " + name
094: + ", does not exist in zip file, " + zipFile
095: + ", or is " + "corrupt: " + e.getMessage());
096: }
097: }
098:
099: // public methods
100:
101: /**
102: * Gets input stream representing resource.
103: *
104: * @return the input stream that represents the resource.
105: * @exception IOException if the input stream can not be constructed.
106: * @see InputStream
107: */
108: public InputStream getInputStream() throws IOException {
109: ZipFile zipFile = location.getZipFile();
110: if (zipFile == null) {
111: throw new FatalExceptionError(
112: new IOException(
113: "Failed to get zip file for location, should not be able to get here without a zip file"));
114: }
115: return zipFile.getInputStream(zipEntry);
116: }
117:
118: /**
119: * Get current last-modification time of resource. This is the
120: * time on the disk file the resource is associated with.
121: *
122: * @return the last-modified time of the permanent copy of the resource
123: * in milliseconds.
124: */
125: public long getCurrentLastModifiedTime()
126: throws FileNotFoundException {
127: lastModifiedTime = zipEntry.getTime();
128: return lastModifiedTime;
129: //return zipEntry.getTime();
130: }
131: }
|