KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > groboutils > util > io > v1 > FileInputStreamGenerator


1 /*
2  * @(#)FileInputStreamGenerator.java
3  *
4  * Copyright (C) 2001,,2003 2002 Matt Albrecht
5  * groboclown@users.sourceforge.net
6  * http://groboutils.sourceforge.net
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the "Software"),
10  * to deal in the Software without restriction, including without limitation
11  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12  * and/or sell copies of the Software, and to permit persons to whom the
13  * Software is furnished to do so, subject to the following conditions:
14  *
15  * The above copyright notice and this permission notice shall be included in
16  * all copies or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24  * DEALINGS IN THE SOFTWARE.
25  */

26
27 package net.sourceforge.groboutils.util.io.v1;
28
29 import java.io.InputStream JavaDoc;
30 import java.io.IOException JavaDoc;
31 import java.io.File JavaDoc;
32 import java.io.FileInputStream JavaDoc;
33
34
35 /**
36  * A type of class which can generate a new InputStream based on just a
37  * partial name. Useful if a resource is loaded from a specific location
38  * (classpath resource, file system, URL, etc), and it references other
39  * resources which must be loaded relative to it.
40  *
41  * @author Matt Albrecht <a HREF="mailto:groboclown@users.sourceforge.net">groboclown@users.sourceforge.net</a>
42  * @since 0.9.1d Alpha (sometime in 2001)
43  * @version $Date: 2003/02/10 22:52:45 $
44  */

45 public class FileInputStreamGenerator implements IInputStreamGenerator
46 {
47     private String JavaDoc root;
48     private String JavaDoc orig;
49     
50     /**
51      * Accepts the name of the 1st file loaded. All files generated from
52      * this generator will be relative to its location. If the name is
53      * a directory, then all relative names will be in this directory.
54      */

55     public FileInputStreamGenerator( String JavaDoc originalName )
56             throws IOException JavaDoc
57     {
58         this.orig = originalName;
59         File JavaDoc f = new File JavaDoc( originalName );
60         if (!f.isDirectory())
61         {
62             originalName = f.getParent();
63             if (originalName == null)
64             {
65                 originalName = "";
66             }
67         }
68         if (originalName.endsWith( File.separator ))
69         {
70             originalName = originalName.substring( 0,
71                 originalName.length() - File.separator.length() );
72         }
73         this.root = originalName;
74         if (this.root.length() <= 0)
75         {
76             this.root = ".";
77         }
78     }
79     
80
81     public File JavaDoc getFile( String JavaDoc relativeName )
82     {
83         if (!this.orig.equals( relativeName ))
84         {
85             if (!relativeName.startsWith( "/" ) &&
86                 !relativeName.startsWith( File.separator ))
87             {
88                 // only adjust the relative name if it is relative.
89
relativeName = this.root + File.separator + relativeName;
90             }
91         }
92         return new File JavaDoc( relativeName );
93     }
94     
95     
96     public String JavaDoc getFullName( String JavaDoc relativeName )
97     {
98         File JavaDoc f = getFile( relativeName );
99         try
100         {
101             return f.getCanonicalPath();
102         }
103         catch (IOException JavaDoc ioe)
104         {
105             return f.getAbsolutePath();
106         }
107     }
108     
109     
110     public InputStream JavaDoc createInputStream( String JavaDoc relativeName )
111             throws IOException JavaDoc
112     {
113         return new FileInputStream JavaDoc( getFile( relativeName ) );
114     }
115 }
116
Popular Tags