aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/makamys/neodymium/util/virtualjar
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/makamys/neodymium/util/virtualjar')
-rw-r--r--src/main/java/makamys/neodymium/util/virtualjar/IVirtualJar.java8
-rw-r--r--src/main/java/makamys/neodymium/util/virtualjar/VirtualJar.java70
-rw-r--r--src/main/java/makamys/neodymium/util/virtualjar/protocol/neodymiumvirtualjar/Handler.java5
3 files changed, 57 insertions, 26 deletions
diff --git a/src/main/java/makamys/neodymium/util/virtualjar/IVirtualJar.java b/src/main/java/makamys/neodymium/util/virtualjar/IVirtualJar.java
index 11cef7e..dbc4ca9 100644
--- a/src/main/java/makamys/neodymium/util/virtualjar/IVirtualJar.java
+++ b/src/main/java/makamys/neodymium/util/virtualjar/IVirtualJar.java
@@ -6,6 +6,14 @@ public interface IVirtualJar {
public String getName();
+ public default boolean hasFile(String path) {
+ try(InputStream is = getInputStream(path)) {
+ return is != null;
+ } catch(Exception e) {
+ return false;
+ }
+ }
+
public InputStream getInputStream(String path);
}
diff --git a/src/main/java/makamys/neodymium/util/virtualjar/VirtualJar.java b/src/main/java/makamys/neodymium/util/virtualjar/VirtualJar.java
index 8350d6f..d5049b4 100644
--- a/src/main/java/makamys/neodymium/util/virtualjar/VirtualJar.java
+++ b/src/main/java/makamys/neodymium/util/virtualjar/VirtualJar.java
@@ -3,6 +3,7 @@ package makamys.neodymium.util.virtualjar;
import static makamys.neodymium.Constants.MODID;
import static makamys.neodymium.Constants.PROTOCOL;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
@@ -65,35 +66,56 @@ public class VirtualJar {
public static class StreamHandlerImpl implements Handler.IURLStreamHandlerImpl {
@Override
- public URLConnection openConnection(URL url) {
- return new URLConnection(url) {
- public void connect() {
-
+ public URLConnection openConnection(URL url) throws IOException {
+ return new VirtualJarConnection(url);
+ }
+
+ public static class VirtualJarConnection extends URLConnection {
+
+ IVirtualJar jar;
+ private String filePath;
+
+ public VirtualJarConnection(URL url) throws IOException {
+ super(url);
+
+ String path = url.getPath();
+ String nameSuffix = ".jar!";
+ int nameEnd = path.indexOf(nameSuffix);
+ String name = path.substring(0, nameEnd);
+
+ jar = jars.get(name);
+
+ if(jar == null) {
+ throw new IOException();
}
-
- public Object getContent() throws IOException {
- return super.getContent();
+
+ filePath = path.substring(nameEnd + nameSuffix.length());
+
+ if(!jar.hasFile(filePath)) {
+ throw new IOException();
}
+ }
+
+ public void connect() throws IOException {
+
+ }
- public String getHeaderField(String name) {
- return super.getHeaderField(name);
- }
+ public Object getContent() throws IOException {
+ return super.getContent();
+ }
- public InputStream getInputStream() {
- String path = getURL().getPath();
- String nameSuffix = ".jar!";
- int nameEnd = path.indexOf(nameSuffix);
- String name = path.substring(0, nameEnd);
-
- IVirtualJar jar = jars.get(name);
-
- return jar.getInputStream(path.substring(nameEnd + nameSuffix.length()));
- }
+ public String getHeaderField(String name) {
+ return super.getHeaderField(name);
+ }
- public java.io.OutputStream getOutputStream() throws IOException {
- return super.getOutputStream();
- }
- };
+ public InputStream getInputStream() {
+ return jar.getInputStream(filePath);
+ }
+
+ public java.io.OutputStream getOutputStream() throws IOException {
+ return super.getOutputStream();
+ }
+
}
}
diff --git a/src/main/java/makamys/neodymium/util/virtualjar/protocol/neodymiumvirtualjar/Handler.java b/src/main/java/makamys/neodymium/util/virtualjar/protocol/neodymiumvirtualjar/Handler.java
index 9f0fe66..4e156ff 100644
--- a/src/main/java/makamys/neodymium/util/virtualjar/protocol/neodymiumvirtualjar/Handler.java
+++ b/src/main/java/makamys/neodymium/util/virtualjar/protocol/neodymiumvirtualjar/Handler.java
@@ -3,6 +3,7 @@ package makamys.neodymium.util.virtualjar.protocol.neodymiumvirtualjar;
import static makamys.neodymium.Constants.MODID;
import static makamys.neodymium.Constants.PROTOCOL;
+import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
@@ -14,11 +15,11 @@ public class Handler extends URLStreamHandler {
private static final IURLStreamHandlerImpl impl = (IURLStreamHandlerImpl)Launch.blackboard.get(MODID + "." + PROTOCOL + ".impl");
@Override
- protected URLConnection openConnection(URL url) {
+ protected URLConnection openConnection(URL url) throws IOException {
return impl.openConnection(url);
}
public interface IURLStreamHandlerImpl {
- URLConnection openConnection(URL url);
+ URLConnection openConnection(URL url) throws IOException;
}
}