package com.hunterliy.library.router;
import android.net.Uri;
public class Path {
private final String value;
private Path next;
private Path(String value) {
this.value = value;
}
public static boolean match(final Path format, final Path link) {
if (format == null || link == null) {
return false;
}
if (format.length() != link.length()) {
return false;
}
Path x = format;
Path y = link;
while (x != null) {
if (!x.match(y)) {
return false;
}
x = x.next;
y = y.next;
}
return true;
}
public static Path create(Uri uri) {
Path path = new Path(uri.getScheme().concat("://"));
String urlPath = uri.getPath();
if (urlPath == null) {
urlPath = "";
}
if (urlPath.endsWith("/")) {
urlPath = urlPath.substring(0, urlPath.length() - 1);
}
parse(path, uri.getHost() + urlPath);
return path;
}
private static void parse(Path scheme, String s) {
String[] components = s.split("/");
Path curPath = scheme;
for (String component : components) {
Path temp = new Path(component);
curPath.next = temp;
curPath = temp;
}
}
public Path next() {
return next;
}
public int length() {
Path path = this;
int len = 1;
while (path.next != null) {
len++;
path = path.next;
}
return len;
}
private boolean match(Path path) {
return isArgument() || value.equals(path.value);
}
public boolean isArgument() {
return value.startsWith(":");
}
public String argument() {
return value.substring(1);
}
public String value() {
return value;
}
public boolean isHttp() {
String low = value.toLowerCase();
return low.startsWith("http://") || low.startsWith("https://");
}
}