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: RemoteDirResource.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, 27 sep 2002
028: import java.io.FileNotFoundException;
029: import java.io.IOException;
030: import java.io.InputStream;
031: import java.net.MalformedURLException;
032: import java.net.URL;
033: import java.net.URLConnection;
034:
035: import com.lutris.logging.LogChannel;
036:
037: /**
038: * <P>A <CODE>Resource</CODE> that is a file on a remote machine in
039: * a specified directory. The directory 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.MultiClassLoader
045: * @see com.lutris.classloader.ClassPathEntry
046: * @see com.lutris.classloader.Resource
047: * @see java.io.File
048: */
049: public class RemoteDirResource extends Resource {
050:
051: // data members
052:
053: private URL url = null;
054:
055: // constructors
056:
057: // FIXME: Test and change to protected and add javadoc. (kp)
058: private RemoteDirResource(String name, ClassPathEntry location,
059: // v. strahinja, 27 sep 2002
060: LogChannel loadLogChannel)
061: // Logger loadLogger)
062: throws FileNotFoundException {
063: // v. strahinja, 27 sep 2002
064: super (name, location, loadLogChannel);
065: // super(name, location, loadLogger);
066:
067: // Get location's URL
068: URL locURL = location.getURL();
069: if (locURL == null) {
070: throw new FileNotFoundException("The URL for location, "
071: + location + ", is null");
072: }
073:
074: // Create a new URL from location's URL and resource name
075: try {
076: url = new URL(locURL.toString() + name);
077: } catch (MalformedURLException mue) {
078: throw new FileNotFoundException(
079: "The URL can not be created from the name " + name
080: + ", and location " + locURL + ": "
081: + mue.getMessage());
082: }
083:
084: // Get the URLConnection so size and time can be determined
085: URLConnection connection;
086: try {
087: connection = url.openConnection();
088: } catch (IOException ioe) {
089: throw new FileNotFoundException("URL, " + url
090: + ", does not exist or can not be reached");
091: }
092: size = connection.getContentLength();
093: lastModifiedTime = connection.getLastModified();
094: //FIXME: Connection must be closed
095: }
096:
097: // public methods
098:
099: public InputStream getInputStream() throws IOException {
100: return url.openStream();
101: }
102:
103: /**
104: * Get current last-modification time of resource. This is the
105: * time on the disk file the resource is associated with.
106: *
107: * @return the last-modified time of the permanent copy of the resource
108: * in milliseconds.
109: */
110: public long getCurrentLastModifiedTime() {
111: return -1; //FIXME: IMPLEMENT
112: }
113: }
|