package dk.daoas.fulddaekning; import java.util.LinkedList; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.logging.Level; import java.util.logging.Logger; public class InputWorker implements Runnable { static Logger logger = Logger.getLogger( InputWorker.class.toString() ); Database db; public Queue queue = new ConcurrentLinkedQueue(); public boolean isDone = false; public int largestWorkSetCount = 0; public int largestWorkSetPostnr= 0; public InputWorker(Database db) { this.db = db; } @Override public void run() { logger.info("Finder postnumre"); try { Queue postnumre = new LinkedList(); postnumre.addAll( db.hentPostnumre() ); while( postnumre.isEmpty() == false) { if (queue.size() <= 25) { int postnr = postnumre.poll(); WorkSet workSet = new WorkSet(); workSet.postnr = postnr; BoundingBox bbox = db.getBoundingbox(postnr); bbox.validateBbox(); logger.info("Bbox=" + bbox); bbox.adjustToMargin(); logger.info("Bbox Adjusted=" + bbox); logger.info("Henter _ikke_ daekkede adresser i " + postnr); workSet.ikkeDaekkede = db.hentIkkedaekkedeAdresser(postnr); if ( workSet.ikkeDaekkede.isEmpty()) { //hvis der ikke er nogen adresser at arbejde på skal vi heller ikke gemme et workset logger.info("Nothing to do for " + postnr); continue; } logger.info("Henter daekkede adresser i " + postnr); workSet.daekkedeAdresser = db.hentDaekkedeAdresser(bbox); workSet.queueSize = workSet.ikkeDaekkede.size(); saveLargeWorkset( workSet ); queue.add(workSet); } else { //queue.wait(10); Thread.sleep(10); } } logger.info("Input Worker done - stopping !!!"); isDone = true; } catch (Exception e) { logger.log(Level.SEVERE, "Error during inputworker", e); System.exit(1); } } private void saveLargeWorkset( WorkSet ws) { int newSize = ws.daekkedeAdresser.size(); if (newSize > largestWorkSetCount) { largestWorkSetCount = newSize; largestWorkSetPostnr = ws.postnr; } } }