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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20