/[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 2200 - (show annotations) (download)
Thu Sep 11 08:14:40 2014 UTC (9 years, 8 months ago) by torben
File size: 2069 byte(s)
Generalize solution so it also works with BK - all distributor specific values are moved to Constants system
1 package dk.daoas.fulddaekning;
2
3 import java.sql.SQLException;
4 import java.util.ArrayList;
5 import java.util.Queue;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8
9 public class LookupWorker implements Runnable {
10 Logger logger = Logger.getLogger( LookupWorker.class.getName() );
11
12 int workerId;
13 Lookup lookup;
14
15 public LookupWorker(int workerId, Lookup lookup) {
16 this.workerId = workerId;
17 this.lookup = lookup;
18 }
19
20 @Override
21 public void run() {
22 Constants consts = Constants.getInstance();
23
24 ArrayList<Adresse> daekkede = lookup.getDaekkedeAdresser();
25 Queue<Adresse> queue = lookup.getQueue();
26 Database db = lookup.getDb();
27
28 Adresse qAdresse;
29
30
31
32 while ( (qAdresse = queue.poll()) != null) {
33 //logger.info("Worker " + workerId + ", analyzing " + qAdresse);
34
35 double bedsteAfstand = 9999999.999;
36 Adresse bedsteAdr = null;
37 for (int i=0; i<daekkede.size(); i++) {
38 Adresse daekket = daekkede.get(i);
39 double afstand = Adresse.beregnAfstand(qAdresse, daekket);
40
41 if (afstand < bedsteAfstand) {
42 bedsteAfstand = afstand;
43 bedsteAdr = daekket;
44 }
45 }
46
47
48 if ( bedsteAdr != null) {
49
50 if (bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren
51 if (Lookup.verbose == true) {
52 logger.info("(" +workerId + ") Bedste: " + qAdresse + "==>" + bedsteAdr + " ::: " + bedsteAfstand );
53 }
54
55 try {
56 db.gemResultat(qAdresse, bedsteAdr, bedsteAfstand);
57 } catch (SQLException e) {
58 logger.log(Level.WARNING, "Error saving result", e);
59 logger.warning("Shutting down");
60
61 System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme
62 }
63 } else {
64 logger.info("(" +workerId + ") For stor afstand " + qAdresse + " -> " + bedsteAfstand);
65 }
66 } else {
67 logger.warning("(" +workerId + ") Ingen match til " + qAdresse);
68 }
69
70 }
71
72
73 lookup.shutdownWorker( workerId);
74 }
75
76 }

  ViewVC Help
Powered by ViewVC 1.1.20