/[projects]/dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupWorker.java
ViewVC logotype

Contents of /dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupWorker.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2228 - (show annotations) (download)
Mon Sep 22 10:17:38 2014 UTC (9 years, 7 months ago) by torben
File size: 2532 byte(s)
First attempt at BK to-level lookup
1 package dk.daoas.fulddaekning;
2
3 import java.sql.SQLException;
4 import java.util.Queue;
5 import java.util.logging.Level;
6 import java.util.logging.Logger;
7
8 public class LookupWorker implements Runnable {
9 Logger logger = Logger.getLogger( LookupWorker.class.getName() );
10
11 int workerId;
12 Lookup lookup;
13
14 public LookupWorker(int workerId, Lookup lookup) {
15 this.workerId = workerId;
16 this.lookup = lookup;
17 }
18
19 @Override
20 public void run() {
21 Constants consts = Constants.getInstance();
22
23 Adresse daekkede[] = lookup.getDaekkedeAdresser();
24 Queue<Adresse> queue = lookup.getQueue();
25 Database db = lookup.getDb();
26
27 Adresse qAdresse;
28
29
30
31 while ( (qAdresse = queue.poll()) != null) {
32 //logger.info("Worker " + workerId + ", analyzing " + qAdresse);
33
34 double bedsteAfstand = 9999999.999;
35 Adresse bedsteAdr = null;
36 for (int i=0; i<daekkede.length; i++) {
37 Adresse daekket = daekkede[i];
38 double afstand = Adresse.beregnAfstand(qAdresse, daekket);
39
40 if (afstand < bedsteAfstand) {
41 bedsteAfstand = afstand;
42 bedsteAdr = daekket;
43 }
44 }
45
46 if (bedsteAdr == null && consts.doExtendedLookup() == true) {//hvis vi ikke fandt en adresse og vi må kigge på udvidet område
47 logger.info("Extended lookup for " + qAdresse);
48 for (int i=0; i<Lookup.alleDaekkedeAdresser.length; i++) {
49 Adresse daekket = Lookup.alleDaekkedeAdresser[i];
50 double afstand = Adresse.beregnAfstand(qAdresse, daekket);
51
52 if (afstand < bedsteAfstand) {
53 bedsteAfstand = afstand;
54 bedsteAdr = daekket;
55 }
56 }
57 }
58
59
60 if ( bedsteAdr != null) {
61
62 if (bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren
63 if (Lookup.verbose == true) {
64 logger.info("(" +workerId + ") Bedste: " + qAdresse + "==>" + bedsteAdr + " ::: " + bedsteAfstand );
65 }
66
67 try {
68 db.gemResultat(qAdresse, bedsteAdr, bedsteAfstand);
69 } catch (SQLException e) {
70 logger.log(Level.WARNING, "Error saving result", e);
71 logger.warning("Shutting down");
72
73 System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme
74 }
75 } else {
76 logger.info("(" +workerId + ") For stor afstand " + qAdresse + " -> " + bedsteAfstand);
77 }
78 } else {
79 logger.warning("(" +workerId + ") Ingen match til " + qAdresse);
80 }
81
82 }
83
84
85 lookup.shutdownWorker( workerId);
86 }
87
88 }

  ViewVC Help
Powered by ViewVC 1.1.20