aboutsummaryrefslogtreecommitdiff
path: root/Mammoth/Couscous/java/net
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-30 17:20:53 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-30 17:20:53 +0100
commitec5037c01868fecaec2eba89b975f3e53aded89a (patch)
treee0d5a092419bace577a90eb29699f5be57f36078 /Mammoth/Couscous/java/net
parent17d1a1f710edd8dfb92e75bcd273e04cee7c8146 (diff)
Export from java-mammoth 5f538798b147f0e76
Diffstat (limited to 'Mammoth/Couscous/java/net')
-rw-r--r--Mammoth/Couscous/java/net/URI.cs42
-rw-r--r--Mammoth/Couscous/java/net/URISyntaxException.cs6
-rw-r--r--Mammoth/Couscous/java/net/URL.cs28
3 files changed, 76 insertions, 0 deletions
diff --git a/Mammoth/Couscous/java/net/URI.cs b/Mammoth/Couscous/java/net/URI.cs
new file mode 100644
index 0000000..818d694
--- /dev/null
+++ b/Mammoth/Couscous/java/net/URI.cs
@@ -0,0 +1,42 @@
+using System;
+
+namespace Mammoth.Couscous.java.net {
+ internal class URI {
+ private readonly Uri _uri;
+
+ internal URI(string uri) {
+ try {
+ _uri = new Uri(uri, UriKind.RelativeOrAbsolute);
+ } catch (UriFormatException exception) {
+ throw new URISyntaxException(exception.Message);
+ }
+ }
+
+ internal URI(Uri uri) {
+ _uri = uri;
+ }
+
+ internal bool isAbsolute() {
+ return _uri.IsAbsoluteUri;
+ }
+
+ internal URL toURL() {
+ return new URL(_uri.ToString());
+ }
+
+ internal URI resolve(string relativeUri) {
+ if (new URI(relativeUri).isAbsolute()) {
+ return new URI(relativeUri);
+ } else if (_uri.IsAbsoluteUri) {
+ return new URI(new Uri(_uri, relativeUri));
+ } else {
+ var path = _uri.ToString();
+ var lastSlashIndex = path.LastIndexOf("/");
+ var basePath = lastSlashIndex == -1
+ ? "."
+ : path.Substring(0, lastSlashIndex + 1);
+ return new URI(basePath + relativeUri);
+ }
+ }
+ }
+}
diff --git a/Mammoth/Couscous/java/net/URISyntaxException.cs b/Mammoth/Couscous/java/net/URISyntaxException.cs
new file mode 100644
index 0000000..7380ff6
--- /dev/null
+++ b/Mammoth/Couscous/java/net/URISyntaxException.cs
@@ -0,0 +1,6 @@
+namespace Mammoth.Couscous.java.net {
+ internal class URISyntaxException : System.Exception {
+ internal URISyntaxException(string message) : base(message) {
+ }
+ }
+}
diff --git a/Mammoth/Couscous/java/net/URL.cs b/Mammoth/Couscous/java/net/URL.cs
new file mode 100644
index 0000000..88479e8
--- /dev/null
+++ b/Mammoth/Couscous/java/net/URL.cs
@@ -0,0 +1,28 @@
+using System.Net;
+using Mammoth.Couscous.java.io;
+
+namespace Mammoth.Couscous.java.net {
+ internal class URL {
+ private readonly string _url;
+
+ internal URL(string url) {
+ _url = url;
+ }
+
+ internal InputStream openStream() {
+ try {
+ var response = WebRequest.Create(_url).GetResponse();
+ try {
+ return ToJava.StreamToInputStream(response.GetResponseStream());
+ } catch {
+ response.Close();
+ throw;
+ }
+ } catch (System.UriFormatException) {
+ return ToJava.StreamToInputStream(System.IO.File.OpenRead(_url));
+ } catch (System.Net.WebException exception) {
+ throw new java.io.IOException(exception.Message);
+ }
+ }
+ }
+}