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

  ViewVC Help
Powered by ViewVC 1.1.20