KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > virtual > plugins > context > jar > JarContext


1 /*
2 * JBoss, Home of Professional Open Source
3 * Copyright 2006, JBoss Inc., and individual contributors as indicated
4 * by the @authors tag. See the copyright.txt in the distribution for a
5 * full listing of individual contributors.
6 *
7 * This is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as
9 * published by the Free Software Foundation; either version 2.1 of
10 * the License, or (at your option) any later version.
11 *
12 * This software is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this software; if not, write to the Free
19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21 */

22 package org.jboss.virtual.plugins.context.jar;
23
24 import java.io.IOException JavaDoc;
25 import java.net.URISyntaxException JavaDoc;
26 import java.net.URL JavaDoc;
27
28 import org.jboss.virtual.VirtualFile;
29 import org.jboss.virtual.plugins.context.AbstractVFSContext;
30 import org.jboss.virtual.spi.VirtualFileHandler;
31
32 /**
33  * JarContext.
34  *
35  * @author Scott.Stark@jboss.org
36  * @author <a HREF="adrian@jboss.com">Adrian Brock</a>
37  * @version $Revision: 1.1 $
38  */

39 public class JarContext extends AbstractVFSContext
40 {
41    /** The root file */
42    private final VirtualFileHandler root;
43    
44    /** A reference to the virtual file of the root to stop it getting closed */
45    private final VirtualFile rootFile;
46    
47    /**
48     * Create a new JarContext.
49     *
50     * @param rootURL the root url
51     * @throws IOException for an error accessing the file system
52     * @throws URISyntaxException for an error parsing the URI
53     */

54    public JarContext(URL JavaDoc rootURL) throws IOException JavaDoc, URISyntaxException JavaDoc
55    {
56       super(rootURL);
57       root = createVirtualFileHandler(null, rootURL);
58       rootFile = root.getVirtualFile();
59    }
60
61    public VirtualFileHandler getRoot() throws IOException JavaDoc
62    {
63       return root;
64    }
65
66    /**
67     * Create a new virtual file handler
68     *
69     * @param parent the parent
70     * @param url the url
71     * @return the handler
72     * @throws IOException for any error accessing the file system
73     * @throws IllegalArgumentException for a null entry or url
74     */

75    public VirtualFileHandler createVirtualFileHandler(VirtualFileHandler parent, URL JavaDoc url) throws IOException JavaDoc
76    {
77       if (url == null)
78          throw new IllegalArgumentException JavaDoc("Null url");
79
80       String JavaDoc name = url.toString();
81       int index = name.indexOf('!');
82       if (index != -1)
83          name = name.substring(0, index);
84       index = name.lastIndexOf('/');
85       if (index != -1 && index < name.length()-1)
86          name = name.substring(index+1);
87       
88       return new JarHandler(this, parent, url, name);
89    }
90    
91    @Override JavaDoc
92    protected void finalize() throws Throwable JavaDoc
93    {
94       if (rootFile != null)
95          rootFile.close();
96       super.finalize();
97    }
98 }
99
Popular Tags