/[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 2422 - (show annotations) (download)
Tue Mar 3 08:14:09 2015 UTC (9 years, 2 months ago) by torben
File size: 3265 byte(s)
arbejd med 2 dæknings sæt og lav den mindste mindre
1 package dk.daoas.fulddaekning;
2
3 import java.sql.SQLException;
4 import java.util.Queue;
5 import java.util.concurrent.BrokenBarrierException;
6 import java.util.concurrent.CyclicBarrier;
7 import java.util.logging.Level;
8 import java.util.logging.Logger;
9
10 public class LookupWorker implements Runnable {
11 static class LookupResult {
12 double bedsteAfstand = 9999999.999;
13 Adresse bedsteAdr = null;
14 }
15
16 Constants consts;
17
18 Logger logger = Logger.getLogger( LookupWorker.class.getName() );
19
20 int workerId;
21 Lookup lookup;
22 CyclicBarrier barrier;
23
24 public LookupWorker(int workerId, Lookup lookup, CyclicBarrier barrier) {
25 this.workerId = workerId;
26 this.lookup = lookup;
27 this.barrier = barrier;
28
29 consts = Constants.getInstance();
30 }
31
32 @Override
33 public void run() {
34 Constants consts = Constants.getInstance();
35
36 Adresse daekkede[] = lookup.getDaekkedeAdresser();
37 Adresse udvidetDaekkede[] = lookup.getUdvidetDaekkedeAdresser();
38 Queue<Adresse> queue = lookup.getQueue();
39 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
49 LookupResult result = findBedsteAdresse(qAdresse, daekkede);
50
51 if (result.bedsteAdr == null ) {//hvis vi ikke fandt en adresse og vi må kigge på udvidet område
52 logger.info("Extended lookup for " + qAdresse);
53
54 result = findBedsteAdresse(qAdresse, udvidetDaekkede);
55 }
56
57
58 if ( result.bedsteAdr != null) {
59
60 if (result.bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren
61 if (LookupMain.verbose == true) {
62 logger.fine("(" +workerId + ") Bedste: " + qAdresse + "==>" + result.bedsteAdr + " ::: " + result.bedsteAfstand );
63 }
64
65 try {
66 db.gemResultat(qAdresse, result.bedsteAdr, result.bedsteAfstand);
67 } 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 logger.fine("(" +workerId + ") For stor afstand " + qAdresse + " -> " + result.bedsteAfstand);
75 }
76 } else {
77 logger.fine("(" +workerId + ") Ingen match til " + qAdresse);
78 }
79
80 }
81 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 }
90
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
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 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
115 }

  ViewVC Help
Powered by ViewVC 1.1.20