• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.jme3.asset.plugins;
2 
3 import com.jme3.asset.AssetInfo;
4 import com.jme3.asset.AssetKey;
5 import com.jme3.asset.AssetLoadException;
6 import com.jme3.asset.AssetManager;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.net.URL;
10 import java.net.URLConnection;
11 
12 /**
13  * Handles loading of assets from a URL
14  *
15  * @author Kirill Vainer
16  */
17 public class UrlAssetInfo extends AssetInfo {
18 
19     private URL url;
20     private InputStream in;
21 
create(AssetManager assetManager, AssetKey key, URL url)22     public static UrlAssetInfo create(AssetManager assetManager, AssetKey key, URL url) throws IOException {
23         // Check if URL can be reached. This will throw
24         // IOException which calling code will handle.
25         URLConnection conn = url.openConnection();
26         conn.setUseCaches(false);
27         InputStream in = conn.getInputStream();
28 
29         // For some reason url cannot be reached?
30         if (in == null){
31             return null;
32         }else{
33             return new UrlAssetInfo(assetManager, key, url, in);
34         }
35     }
36 
UrlAssetInfo(AssetManager assetManager, AssetKey key, URL url, InputStream in)37     private UrlAssetInfo(AssetManager assetManager, AssetKey key, URL url, InputStream in) throws IOException {
38         super(assetManager, key);
39         this.url = url;
40         this.in = in;
41     }
42 
hasInitialConnection()43     public boolean hasInitialConnection(){
44         return in != null;
45     }
46 
47     @Override
openStream()48     public InputStream openStream() {
49         if (in != null){
50             // Reuse the already existing stream (only once)
51             InputStream in2 = in;
52             in = null;
53             return in2;
54         }else{
55             // Create a new stream for subsequent invocations.
56             try {
57                 URLConnection conn = url.openConnection();
58                 conn.setUseCaches(false);
59                 return conn.getInputStream();
60             } catch (IOException ex) {
61                 throw new AssetLoadException("Failed to read URL " + url, ex);
62             }
63         }
64     }
65 }
66