BundleURLConnection.java

00001 /*
00002  * Copyright (c) 2003-2006, KNOPFLERFISH project
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following
00007  * conditions are met:
00008  *
00009  * - Redistributions of source code must retain the above copyright
00010  *   notice, this list of conditions and the following disclaimer.
00011  *
00012  * - Redistributions in binary form must reproduce the above
00013  *   copyright notice, this list of conditions and the following
00014  *   disclaimer in the documentation and/or other materials
00015  *   provided with the distribution.
00016  *
00017  * - Neither the name of the KNOPFLERFISH project nor the names of its
00018  *   contributors may be used to endorse or promote products derived
00019  *   from this software without specific prior written permission.
00020  *
00021  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00027  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00028  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00029  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
00030  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00031  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
00032  * OF THE POSSIBILITY OF SUCH DAMAGE.
00033  */
00034 
00035 package org.knopflerfish.framework;
00036 
00037 import java.io.*;
00038 import java.net.*;
00039 
00040 
00046 class BundleURLConnection extends URLConnection {
00047 
00048   private InputStream is = null;
00049 
00050   private Bundles bundles;
00051 
00052   BundleURLConnection(URL u, Bundles b) {
00053     super(u);
00054     bundles = b;
00055   }
00056 
00057   public void connect() throws IOException {
00058     if (!connected) {
00059       BundleImpl b = null;
00060       long ai = -1;
00061       long fi = -1;
00062       try {
00063         String s = url.getHost();
00064         int i = s.indexOf('_');
00065         if (i >= 0) {
00066           fi = Long.parseLong(s.substring(i+1));
00067           s = s.substring(0,i);
00068         }
00069         i = s.indexOf('.');
00070         if (i >= 0) {
00071           ai = Long.parseLong(s.substring(i+1));
00072           s = s.substring(0,i);
00073         }
00074         b = (BundleImpl)bundles.getBundle(Long.parseLong(s));
00075       } catch (NumberFormatException _ignore) { }
00076       if (b != null) {
00077         BundleArchive a = b.getBundleArchive(ai, fi);
00078         if (a != null) {
00079           is = a.getInputStream(url.getFile(), url.getPort());
00080         }
00081       }
00082       if (is != null) {
00083         connected = true;
00084       } else {
00085         throw new IOException("URL not found");
00086       }
00087     }
00088   }
00089 
00090   public InputStream getInputStream() {
00091     try {
00092       connect();
00093     } catch (IOException ignore) {
00094     }
00095     return is;
00096   }
00097 }

Generated on Mon Jan 11 21:19:13 2010 for OpenMobileIS by  doxygen 1.5.4