package com.akjava.lib.common.utils; import com.google.common.base.Predicate; public class URLUtils { private URLUtils(){} public static URLInfo parseUrl(String url){ if(url.isEmpty()){ return new URLInfo(null,null,null,""); } int pend=url.indexOf("://"); String protocol=null; if(pend!=-1){ protocol=url.substring(0,pend); } if(protocol!=null){ url=url.substring(pend+3); } int pageStart=url.indexOf("/"); String page=null; String domainAndPort=null; if(pageStart!=-1){ page=url.substring(pageStart); //TODO support query&hash domainAndPort=url.substring(0,pageStart); }else{ domainAndPort=url; } String domain=null; String port=null; int portStart=domainAndPort.indexOf(":"); if(portStart!=-1){ port=domainAndPort.substring(portStart+1); domain=domainAndPort.substring(0,portStart); }else{ domain=domainAndPort; } return new URLInfo(protocol,domain,port,page); } public static class SamePagePredicaate implements Predicate<String>{ private String targetPath; public SamePagePredicaate(String targetPath) { super(); this.targetPath = targetPath; } @Override public boolean apply(String url) { return targetPath.equals(parseUrl(url).getPage()); } } public static class URLInfo{ private String port; private String protocol; public URLInfo(String protocol, String host, String port, String page) { super(); this.port = port; this.protocol = protocol; this.host = host; this.page = page; } private String host; private String page; public String getPort() { return port; } public void setPort(String port) { this.port = port; } public String getProtocol() { return protocol; } public void setProtocol(String protocol) { this.protocol = protocol; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public String getPage() { return page; } public void setPage(String page) { this.page = page; } @Override public String toString(){ String result=""; if(protocol!=null){ result+=protocol+"://"; } if(host!=null){ result+=host; } if(port!=null){ result+=":"+port; } if(page!=null){ result+=page; } return result; } } }