Sort domain mappings properly.

git-svn-id: https://samskivert.googlecode.com/svn/trunk@1159 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
mdb
2003-07-04 20:34:34 +00:00
parent 86ddc6fe7e
commit 927bf2576f
@@ -1,5 +1,5 @@
// //
// $Id: JDBCTableSiteIdentifier.java,v 1.2 2001/11/02 00:57:47 mdb Exp $ // $Id: JDBCTableSiteIdentifier.java,v 1.3 2003/07/04 20:34:34 mdb Exp $
// //
// samskivert library - useful routines for java programs // samskivert library - useful routines for java programs
// Copyright (C) 2001 Michael Bayne // Copyright (C) 2001 Michael Bayne
@@ -32,9 +32,14 @@ import com.samskivert.io.PersistenceException;
import com.samskivert.jdbc.ConnectionProvider; import com.samskivert.jdbc.ConnectionProvider;
import com.samskivert.jdbc.DatabaseLiaison; import com.samskivert.jdbc.DatabaseLiaison;
import com.samskivert.jdbc.SimpleRepository;
import com.samskivert.jdbc.JDBCUtil; import com.samskivert.jdbc.JDBCUtil;
import com.samskivert.jdbc.SimpleRepository;
import com.samskivert.util.ArrayUtil;
import com.samskivert.util.HashIntMap; import com.samskivert.util.HashIntMap;
import com.samskivert.util.StringUtil;
import com.samskivert.Log;
/** /**
* Accomplishes the process of site identification based on a mapping from * Accomplishes the process of site identification based on a mapping from
@@ -130,15 +135,15 @@ public class JDBCTableSiteIdentifier implements SiteIdentifier
rs = stmt.executeQuery(query); rs = stmt.executeQuery(query);
ArrayList mappings = new ArrayList(); ArrayList mappings = new ArrayList();
while (rs.next()) { while (rs.next()) {
SiteMapping mapping = new SiteMapping(); mappings.add(new SiteMapping(rs.getInt(2),
mapping.domain = rs.getString(1); rs.getString(1)));
mapping.siteId = rs.getInt(2);
mappings.add(mapping);
} }
_mappings = mappings; _mappings = mappings;
// sort the mappings in order of specificity // sort the mappings in order of specificity
Collections.sort(_mappings); Collections.sort(_mappings);
// Log.info("Loaded site mappings " +
// StringUtil.toString(_mappings) + ".");
// nothing to return // nothing to return
return null; return null;
@@ -160,6 +165,15 @@ public class JDBCTableSiteIdentifier implements SiteIdentifier
/** The site identifier for the associated domain. */ /** The site identifier for the associated domain. */
public int siteId; public int siteId;
public SiteMapping (int siteId, String domain)
{
this.siteId = siteId;
this.domain = domain;
byte[] bytes = domain.getBytes();
ArrayUtil.reverse(bytes);
_rdomain = new String(bytes);
}
/** /**
* Site mappings sort from most specific (www.yahoo.com) to least * Site mappings sort from most specific (www.yahoo.com) to least
* specific (yahoo.com). * specific (yahoo.com).
@@ -168,23 +182,11 @@ public class JDBCTableSiteIdentifier implements SiteIdentifier
{ {
if (other instanceof SiteMapping) { if (other instanceof SiteMapping) {
SiteMapping orec = (SiteMapping)other; SiteMapping orec = (SiteMapping)other;
return orec._rdomain.compareTo(_rdomain);
// if the domains are equal, we're equal
if (domain.equals(orec.domain)) {
return 0;
} else if (domain.endsWith(orec.domain)) {
// if our domain is a subset of their domain, they are
// after us
return 1;
} else {
return -1;
}
} else { } else {
// no comparablo // no comparablo
return -1; return getClass().getName().compareTo(
other.getClass().getName());
} }
} }
@@ -193,6 +195,8 @@ public class JDBCTableSiteIdentifier implements SiteIdentifier
{ {
return "[" + domain + " => " + siteId + "]"; return "[" + domain + " => " + siteId + "]";
} }
protected String _rdomain;
} }
/** The repository through which we load up site identifier /** The repository through which we load up site identifier