package org.wikibrain.cookbook.core; import org.apache.commons.collections.CollectionUtils; import org.wikibrain.conf.Configuration; import org.wikibrain.conf.ConfigurationException; import org.wikibrain.conf.Configurator; import org.wikibrain.core.cmd.Env; import org.wikibrain.core.cmd.EnvBuilder; import org.wikibrain.core.dao.*; import org.wikibrain.core.lang.Language; import org.wikibrain.core.lang.LocalId; import org.wikibrain.core.model.LocalLink; import org.wikibrain.core.model.UniversalLink; import org.wikibrain.core.model.UniversalPage; import java.util.*; import static org.junit.Assert.*; /** * @author Shilad Sen */ public class CompareLocalLinkDaos { public static void main(String args[]) throws ConfigurationException, DaoException { Env env = new EnvBuilder().build(); Configurator configurator = env.getConfigurator(); LocalLinkDao sqlDao = configurator.get(LocalLinkDao.class, "sql"); LocalLinkDao matrixDao = configurator.get(LocalLinkDao.class, "matrix"); Map<LocalId, Set<LocalId>> outGraph = new HashMap<LocalId, Set<LocalId>>(); Map<LocalId, Set<LocalId>> inGraph = new HashMap<LocalId, Set<LocalId>>(); long start = System.currentTimeMillis(); int i = 0; for (LocalLink ll : sqlDao.get(new DaoFilter())) { if (ll.getSourceId() < 0 || ll.getDestId() < 0) { continue; } LocalId src = new LocalId(ll.getLanguage(), ll.getSourceId()); LocalId dest = new LocalId(ll.getLanguage(), ll.getDestId()); if (!outGraph.containsKey(src)) { outGraph.put(src, new HashSet<LocalId>()); } outGraph.get(src).add(dest); if (!inGraph.containsKey(dest)) { inGraph.put(dest, new HashSet<LocalId>()); } inGraph.get(dest).add(src); i++; } double elapsed = (System.currentTimeMillis() - start) / 1000.0; System.out.println("counted " + i + " links in sql dao in " + elapsed + " secs"); start = System.currentTimeMillis(); int different = 0; int adds = 0; int dels = 0; for (LocalId src : outGraph.keySet()) { Set<LocalId> expected = outGraph.get(src); Set<LocalId> actual = new HashSet<LocalId>(); for (LocalLink ll : matrixDao.getLinks(src.getLanguage(), src.getId(), true)) { if (ll.getSourceId() < 0 || ll.getDestId() < 0) { continue; } actual.add(new LocalId(ll.getLanguage(), ll.getDestId())); } if (!actual.equals(expected)) { System.out.println("comparing " + actual + " and " + expected); different++; } adds += retainedSize(actual, expected); dels += retainedSize(expected, actual); } elapsed = (System.currentTimeMillis() - start) / 1000.0; System.out.println("verified " + i + " links in matrix dao in " + elapsed + " secs"); System.out.println("different " + different); System.out.println("adds " + adds); System.out.println("dels " + dels); } private static int retainedSize(Set orig, Set toRemove) { Set copy = new HashSet(orig); copy.removeAll(toRemove); return copy.size(); } }