blob: 39f1637fdb421e0f24de85c08e6ceece167ed757 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
package com.jogamp.common.net;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
/**
* Generic resource location protocol connection,
* using another sub-protocol as the vehicle for a piggyback protocol.
* <p>
* The details of the sub-protocol can be queried using {@link #getSubProtocol()}.
* </p>
* <p>
* See example in {@link AssetURLConnection}.
* </p>
*/
public abstract class PiggybackURLConnection<I extends PiggybackURLContext> extends URLConnection {
protected URL subUrl;
protected URLConnection subConn;
protected I context;
/**
* @param url the specific URL for this instance
* @param context the piggyback context, defining state independent code and constants
*/
protected PiggybackURLConnection(URL url, I context) {
super(url);
this.context = context;
}
/**
* <p>
* Resolves the URL via {@link PiggybackURLContext#resolve(String)},
* see {@link AssetURLContext#resolve(String)} for an example.
* </p>
*
* {@inheritDoc}
*/
@Override
public synchronized void connect() throws IOException {
if(!connected) {
subConn = context.resolve(url.getPath());
subUrl = subConn.getURL();
connected = true;
}
}
@Override
public InputStream getInputStream() throws IOException {
if(!connected) {
throw new IOException("not connected");
}
return subConn.getInputStream();
}
/**
* Returns the <i>entry name</i> of the asset.
* <pre>
* Plain asset:test/lala.txt
* Resolved asset:jar:file:/data/app/jogamp.test.apk!/assets/test/lala.txt
* Result test/lala.txt
* </pre>
* @throws IOException is not connected
**/
public abstract String getEntryName() throws IOException;
/**
* Returns the resolved <i>sub protocol</i> of the asset or null, ie:
* <pre>
* Plain asset:test/lala.txt
* Resolved asset:jar:file:/data/app/jogamp.test.apk!/assets/test/lala.txt
* Result jar:file:/data/app/jogamp.test.apk!/assets/test/lala.txt
* </pre>
*
* @throws IOException is not connected
*/
public URL getSubProtocol() throws IOException {
if(!connected) {
throw new IOException("not connected");
}
return subUrl;
}
}
|