--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2014/04/30 12:53:01 2147 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java 2014/09/11 10:35:55 2202 @@ -2,8 +2,11 @@ import java.io.File; import java.io.FileReader; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -11,36 +14,87 @@ import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException; public class Lookup { + + static final String CONFIG_FILENAME = "fulddaekning.properties"; + static int max_workers; static boolean verbose; - static Properties conf; + static boolean rename_tables; + static String distributor; + + static SafeProperties conf; static Logger logger = Logger.getLogger( Lookup.class.toString() ); - + int postnr; Database db; - WorkSet workset; + + ArrayList daekkedeAdresser; + Queue queue; Map workers = new ConcurrentHashMap(); + static Statistik flestDaekkede = new Statistik(); + static Statistik flestIkkeDaekkede = new Statistik(); - public Lookup(WorkSet workset, Database db) { - this.db = db; - this.workset = workset; + + static class Statistik { + int postnr; + int antalDaekkede = 0; + int antalIkkeDaekkede = 0; + + @Override + public String toString() { + return "postnr=" + postnr + " antalIkkeDaekkede=" + antalIkkeDaekkede + " antalDaekkede=" + antalDaekkede; + } } + public Lookup(int postnr, Database db) { + this.postnr = postnr; + this.db = db; + } + + public static void saveStatistics(Statistik stat) { + if (stat.antalDaekkede > flestDaekkede.antalDaekkede) { + flestDaekkede = stat; + } + if (stat.antalIkkeDaekkede > flestIkkeDaekkede.antalIkkeDaekkede) { + flestIkkeDaekkede = stat; + } + } public void doLookup() throws BoundingBoxException { - logger.info("Starting for postnr=" + workset.postnr); + logger.info("Starting for postnr=" + postnr); + Statistik stat = new Statistik(); + long start1 = System.currentTimeMillis(); long start2 = 0; try { - - logger.info("Starter beregning for " + workset.postnr); + BoundingBox bbox = db.getBoundingbox(postnr); + bbox.validateBbox(); + + logger.info("Bbox=" + bbox); + bbox.adjustToMargin(); + logger.info("Bbox Adjusted=" + bbox); + + logger.info("Henter daekkede adresser i " + postnr); + daekkedeAdresser = db.hentDaekkedeAdresser(bbox); + + logger.info("Henter _ikke_ daekkede adresser i " + postnr); + queue = db.hentIkkedaekkedeAdresser(postnr); + + stat.postnr = postnr; + stat.antalDaekkede = daekkedeAdresser.size(); + stat.antalIkkeDaekkede = queue.size(); + + saveStatistics(stat); + + + logger.info("Starter beregning for " + postnr); start2 = System.currentTimeMillis(); for (int i =0; i postnumre = db.hentPostnumre(); - while ( doContinue == true ) { - WorkSet set = inputWorker.queue.poll(); - - if (set != null) { - Lookup lookup = new Lookup(set, db); - lookup.doLookup(); - } else { - System.out.println("Buffer underrun"); - Thread.sleep(10); - } - - if ( inputWorker.isDone == true && inputWorker.queue.isEmpty() == true) - doContinue = false; + // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen + for(Integer postnr : postnumre) { // + logger.info("Validerer BBox for " + postnr); + BoundingBox bbox = db.getBoundingbox(postnr); + bbox.validateBbox(); } - /*logger.info("Finder postnumre"); - List postnumre = db.hentPostnumre(); + + //pre-check er ok - reset tmp tabel og start søgningen + db.resetResultTable(); for(Integer postnr : postnumre) { Lookup lookup = new Lookup(postnr, db); lookup.doLookup(); - }*/ + } - long now = System.currentTimeMillis(); + if (rename_tables) { + db.renameResultTables(); + } else { + logger.info( "Rename tables is disabled !!!" ); + } + long now = System.currentTimeMillis(); + + logger.info("Flest Ikke-dækkede, " + flestIkkeDaekkede); + logger.info("Flest Dækkede, " + flestDaekkede); logger.info("Fuld load done : " + (now-start) ); + //Lookup lookup = new Lookup(7400, db); //lookup.doLookup(); } - - - + }