com.jogamp.common.net.PiggybackURLConnection Maven / Gradle / Ivy
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.
*
* The details of the sub-protocol can be queried using {@link #getSubProtocol()}.
*
*
* See example in {@link AssetURLConnection}.
*
*/
public abstract class PiggybackURLConnection 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(final URL url, final I context) {
super(url);
this.context = context;
}
/**
*
* Resolves the URL via {@link PiggybackURLContext#resolve(String)},
* see {@link AssetURLContext#resolve(String)} for an example.
*
*
* {@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 entry name of the asset.
*
* Plain asset:test/lala.txt
* Resolved asset:jar:file:/data/app/jogamp.test.apk!/assets/test/lala.txt
* Result test/lala.txt
*
* @throws IOException is not connected
**/
public abstract String getEntryName() throws IOException;
/**
* Returns the resolved sub protocol of the asset or null, ie:
*
* 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
*
*
* @throws IOException is not connected
*/
public URL getSubProtocol() throws IOException {
if(!connected) {
throw new IOException("not connected");
}
return subUrl;
}
}