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

  ViewVC Help
Powered by ViewVC 1.1.20