X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Farachne%2Fcore%2FPage.java;h=4d14b755b8ee0970a945be7491fc146caa153e6f;hb=b3f6d8f1de06593b1266d0432f77f684dd79bb4f;hp=2a87224c74c77a14660ab0319e98f51035036de7;hpb=b5c11f5cfcabd388269424023c5e9ffd1c315315;p=arachne.git
diff --git a/src/net/pterodactylus/arachne/core/Page.java b/src/net/pterodactylus/arachne/core/Page.java
index 2a87224..4d14b75 100644
--- a/src/net/pterodactylus/arachne/core/Page.java
+++ b/src/net/pterodactylus/arachne/core/Page.java
@@ -3,6 +3,11 @@
*/
package net.pterodactylus.arachne.core;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import de.ina.util.validation.Validation;
+
/**
* Container for a page. A page consists of an {@link Edition} and a path within
* the edition.
@@ -35,7 +40,7 @@ public class Page {
*
* @return The pageâs edition
*/
- public Edition getSite() {
+ public Edition getEdition() {
return edition;
}
@@ -48,12 +53,106 @@ public class Page {
return path;
}
+ /**
+ * Creates a URL from the given page.
+ *
+ * @param host
+ * The host of the URL
+ * @param port
+ * The port number of the URL
+ * @return The created URL, or null
if the URL could not be
+ * created
+ */
+ public URL toURL(String host, int port) {
+ try {
+ return new URL("http://" + host + ":" + port + "/SSK@" + getEdition().getSite().getKey() + "/" + getEdition().getSite().getBasename() + "-" + getEdition().getNumber() + "/" + getPath());
+ } catch (MalformedURLException mue1) {
+ /* nearly impossible. */
+ }
+ return null;
+ }
+
+ //
+ // STATIC METHODS
+ //
+
+ /**
+ * Creates a page from the given URL.
+ *
+ * @param url
+ * The URL to create a page from
+ * @return The created page, or null
if the page could not be
+ * created
+ */
+ public static Page fromURL(URL url) {
+ String path = url.getPath();
+ if (path.length() == 0) {
+ path = "/";
+ }
+ String[] pathComponents = path.split("/");
+ if (pathComponents.length < 2) {
+ throw new IllegalArgumentException("URL â" + url + "â is not a valid freenet page.");
+ }
+ String siteName = pathComponents[1];
+ String[] siteComponents = siteName.split("@");
+ if (siteComponents.length != 2) {
+ throw new IllegalArgumentException("siteName â" + siteName + "â is not a valid freenet page.");
+ }
+ if (!"USK".equals(siteComponents[0]) && !"SSK".equals(siteComponents[0]) && !"CHK".equals(siteComponents[0])) {
+ throw new IllegalArgumentException("siteName â" + siteName + "â is not a valid freenet page.");
+ }
+ if ("USK".equals(siteComponents[0])) {
+ Site site = new Site(siteComponents[1], pathComponents[2]);
+ Edition edition = new Edition(site, Integer.parseInt(pathComponents[3]));
+ Page page = new Page(edition, createPath(pathComponents, 4));
+ return page;
+ }
+ if ("SSK".equals(siteComponents[0])) {
+ int lastDash = pathComponents[2].lastIndexOf('-');
+ String basename = pathComponents[2].substring(0, lastDash);
+ int editionNumber = Integer.parseInt(pathComponents[2].substring(lastDash + 1));
+ Site site = new Site(siteComponents[1], basename);
+ Edition edition = new Edition(site, editionNumber);
+ Page page = new Page(edition, createPath(pathComponents, 3));
+ return page;
+ }
+ /* TODO: handle CHK */
+ return null;
+ }
+
+ //
+ // PRIVATE METHODS
+ //
+
+ /**
+ * Creates a path from the given String array, starting at the given index.
+ * The path is created by joining all Strings from the array, separating
+ * them with a slash (â/â).
+ *
+ * @param pathComponents
+ * The array of path components
+ * @param index
+ * The index of the first path components
+ * @return The joined path
+ */
+ private static String createPath(String[] pathComponents, int index) {
+ Validation.begin().isNotNull("pathComponents", pathComponents).check().isLessOrEqual("index", index, pathComponents.length).check();
+ StringBuilder path = new StringBuilder();
+ for (int pathComponentIndex = index; pathComponentIndex < pathComponents.length; pathComponentIndex++) {
+ if (path.length() > 0) {
+ path.append('/');
+ }
+ path.append(pathComponents[pathComponentIndex]);
+ }
+ return path.toString();
+ }
+
//
// OBJECT METHODS
//
/**
- * {@inheritdoc}
+ * {@inheritDoc}
*
* @see java.lang.Object#toString()
*/