/[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 2245 - (show annotations) (download)
Wed Dec 10 10:42:09 2014 UTC (9 years, 5 months ago) by torben
File size: 2926 byte(s)
Findbugs checkup
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 static class LookupResult {
10 double bedsteAfstand = 9999999.999;
11 Adresse bedsteAdr = null;
12 }
13
14 Constants consts;
15
16 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
25 consts = Constants.getInstance();
26 }
27
28 @Override
29 public void run() {
30 Constants consts = Constants.getInstance();
31
32 Adresse daekkede[] = lookup.getDaekkedeAdresser();
33 Queue<Adresse> queue = lookup.getQueue();
34 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
44 LookupResult result = findBedsteAdresse(qAdresse, daekkede);
45
46 if (result.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
49 result = findBedsteAdresse(qAdresse, LookupMain.alleDaekkedeAdresser);
50 }
51
52
53 if ( result.bedsteAdr != null) {
54
55 if (result.bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren
56 if (LookupMain.verbose == true) {
57 logger.info("(" +workerId + ") Bedste: " + qAdresse + "==>" + result.bedsteAdr + " ::: " + result.bedsteAfstand );
58 }
59
60 try {
61 db.gemResultat(qAdresse, result.bedsteAdr, result.bedsteAfstand);
62 } 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 logger.info("(" +workerId + ") For stor afstand " + qAdresse + " -> " + result.bedsteAfstand);
70 }
71 } else {
72 logger.warning("(" +workerId + ") Ingen match til " + qAdresse);
73 }
74
75 }
76
77
78 lookup.shutdownWorker( workerId);
79 }
80
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
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 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
105 }

  ViewVC Help
Powered by ViewVC 1.1.20