/[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 2229 - (show annotations) (download)
Mon Sep 22 11:55:47 2014 UTC (9 years, 7 months ago) by torben
File size: 2617 byte(s)
extract find best address to seperate function
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 class LookupResult {
10 double bedsteAfstand = 9999999.999;
11 Adresse bedsteAdr = null;
12 }
13
14 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 Constants consts = Constants.getInstance();
27
28 Adresse daekkede[] = lookup.getDaekkedeAdresser();
29 Queue<Adresse> queue = lookup.getQueue();
30 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
40 LookupResult result = findBedsteAdresse(qAdresse, daekkede);
41
42 if (result.bedsteAdr == null && consts.doExtendedLookup() == true) {//hvis vi ikke fandt en adresse og vi må kigge på udvidet område
43 logger.info("Extended lookup for " + qAdresse);
44
45 result = findBedsteAdresse(qAdresse, Lookup.alleDaekkedeAdresser);
46 }
47
48
49 if ( result.bedsteAdr != null) {
50
51 if (result.bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren
52 if (Lookup.verbose == true) {
53 logger.info("(" +workerId + ") Bedste: " + qAdresse + "==>" + result.bedsteAdr + " ::: " + result.bedsteAfstand );
54 }
55
56 try {
57 db.gemResultat(qAdresse, result.bedsteAdr, result.bedsteAfstand);
58 } 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 logger.info("(" +workerId + ") For stor afstand " + qAdresse + " -> " + result.bedsteAfstand);
66 }
67 } else {
68 logger.warning("(" +workerId + ") Ingen match til " + qAdresse);
69 }
70
71 }
72
73
74 lookup.shutdownWorker( workerId);
75 }
76
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
93 }

  ViewVC Help
Powered by ViewVC 1.1.20