159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.asset.plugins; 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.asset.AssetInfo; 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.asset.AssetKey; 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.asset.AssetLoadException; 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.asset.AssetManager; 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.io.IOException; 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.io.InputStream; 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.net.URL; 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.net.URLConnection; 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Handles loading of assets from a URL 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Kirill Vainer 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic class UrlAssetInfo extends AssetInfo { 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private URL url; 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private InputStream in; 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static UrlAssetInfo create(AssetManager assetManager, AssetKey key, URL url) throws IOException { 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta // Check if URL can be reached. This will throw 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta // IOException which calling code will handle. 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta URLConnection conn = url.openConnection(); 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta conn.setUseCaches(false); 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta InputStream in = conn.getInputStream(); 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta // For some reason url cannot be reached? 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (in == null){ 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return null; 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta }else{ 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new UrlAssetInfo(assetManager, key, url, in); 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private UrlAssetInfo(AssetManager assetManager, AssetKey key, URL url, InputStream in) throws IOException { 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super(assetManager, key); 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.url = url; 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.in = in; 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean hasInitialConnection(){ 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return in != null; 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public InputStream openStream() { 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (in != null){ 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta // Reuse the already existing stream (only once) 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta InputStream in2 = in; 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta in = null; 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return in2; 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta }else{ 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta // Create a new stream for subsequent invocations. 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta try { 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta URLConnection conn = url.openConnection(); 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta conn.setUseCaches(false); 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return conn.getInputStream(); 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } catch (IOException ex) { 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new AssetLoadException("Failed to read URL " + url, ex); 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 66