diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-30 17:20:53 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-30 17:20:53 +0100 |
| commit | ec5037c01868fecaec2eba89b975f3e53aded89a (patch) | |
| tree | e0d5a092419bace577a90eb29699f5be57f36078 /Mammoth/Couscous/java/net | |
| parent | 17d1a1f710edd8dfb92e75bcd273e04cee7c8146 (diff) | |
Export from java-mammoth 5f538798b147f0e76
Diffstat (limited to 'Mammoth/Couscous/java/net')
| -rw-r--r-- | Mammoth/Couscous/java/net/URI.cs | 42 | ||||
| -rw-r--r-- | Mammoth/Couscous/java/net/URISyntaxException.cs | 6 | ||||
| -rw-r--r-- | Mammoth/Couscous/java/net/URL.cs | 28 |
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); + } + } + } +} |
