/**
* OSM2ShareNav
*
*
* @version $Revision$ ($Name$)
*
* Copyright (C) 2007 Harald Mueller
*/
package net.sharenav.osmToShareNav.model.url;
import java.util.Collection;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import net.sharenav.osmToShareNav.model.Entity;
/**
* @author hmueller
*
*/
public class Urls {
private TreeMap<String,Url> urls1;
//private TreeSet<Url> canons;
public Urls() {
urls1=new TreeMap<String,Url>(String.CASE_INSENSITIVE_ORDER);
}
public void calcUrlIndex(){
int index=0;
for (Url mapUrl : urls1.values()) {
// System.out.println(mapUrl+ " idx="+index);
mapUrl.setIndex(index++);;
}
}
public Collection<Url> getUrls(){
return urls1.values();
}
public void addUrl(Entity w) {
if (w.getUrl() == null )
return;
if (w.getUrl().trim().length() == 0){
return;
}
Url mn =new Url(w);
if (urls1.containsKey(mn.getUrl())){
// System.out.println("url already there:" + mn);
Url mnNext=new Url(w.getUrl()+"\0");
SortedMap<String,Url> subSet=urls1.subMap(mn.getUrl(), mnNext.getUrl());
Url mnExist=subSet.get(subSet.firstKey());
mnExist.addEntity(w);
} else {
urls1.put(mn.getUrl(),mn);
}
}
public void addPhone(Entity w) {
if (w.getPhone() == null )
return;
if (w.getPhone().trim().length() == 0){
return;
}
// set phone attribute as url
Url mn =new Url(w, w.getPhone());
if (urls1.containsKey(mn.getUrl())){
// System.out.println("url for phone already there:" + mn);
Url mnNext=new Url(w.getPhone()+"\0");
SortedMap<String,Url> subSet=urls1.subMap(mn.getUrl(), mnNext.getUrl());
Url mnExist=subSet.get(subSet.firstKey());
mnExist.addEntity(w);
} else {
urls1.put(mn.getUrl(),mn);
}
}
/**
* @return
*/
public int getUrlIdx(String url) {
if (url == null) {
return -1;
}
Url nm = urls1.get(url);
if (nm != null) {
return nm.getIndex();
}
System.out.println("ERROR: Did not find url in url idx: \"" + url + "\"");
return -1;
}
public int getEqualCount(String s1, String s2){
if (s1== null || s2 == null)
return 0;
int l1=s1.length();
int l2=s2.length();
int l=(l1 < l2)? l1 : l2;
for (int loop=0; loop < l;loop++){
if (s1.charAt(loop) != s2.charAt(loop))
return loop;
}
return l;
}
}