/[projects]/dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupWorker.java
ViewVC logotype

Diff of /dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupWorker.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2222 by torben, Sat Sep 20 11:02:26 2014 UTC revision 2263 by torben, Tue Feb 10 16:27:15 2015 UTC
# Line 2  package dk.daoas.fulddaekning; Line 2  package dk.daoas.fulddaekning;
2    
3  import java.sql.SQLException;  import java.sql.SQLException;
4  import java.util.Queue;  import java.util.Queue;
5    import java.util.concurrent.BrokenBarrierException;
6    import java.util.concurrent.CyclicBarrier;
7  import java.util.logging.Level;  import java.util.logging.Level;
8  import java.util.logging.Logger;  import java.util.logging.Logger;
9    
10  public class LookupWorker implements Runnable {  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() );          Logger logger = Logger.getLogger( LookupWorker.class.getName() );
19                    
20          int workerId;          int workerId;
21          Lookup lookup;          Lookup lookup;
22            CyclicBarrier barrier;
23                    
24          public LookupWorker(int workerId, Lookup lookup) {          public LookupWorker(int workerId, Lookup lookup, CyclicBarrier barrier) {
25                  this.workerId = workerId;                  this.workerId = workerId;
26                  this.lookup = lookup;                  this.lookup = lookup;
27                    this.barrier = barrier;
28                    
29                    consts = Constants.getInstance();
30          }          }
31    
32          @Override          @Override
# Line 31  public class LookupWorker implements Run Line 44  public class LookupWorker implements Run
44                  while ( (qAdresse = queue.poll()) != null) {                  while ( (qAdresse = queue.poll()) != null) {
45                          //logger.info("Worker " + workerId + ", analyzing " + qAdresse);                                                  //logger.info("Worker " + workerId + ", analyzing " + qAdresse);                        
46                                    
47                          double bedsteAfstand = 9999999.999;  
48                          Adresse bedsteAdr = null;                          LookupResult result = findBedsteAdresse(qAdresse, daekkede);
49                          for (int i=0; i<daekkede.length; i++) {                          
50                                  Adresse daekket = daekkede[i];                          if (result.bedsteAdr == null && consts.doExtendedLookup() == true) {//hvis vi ikke fandt en adresse og vi må kigge på udvidet område
51                                  double afstand = Adresse.beregnAfstand(qAdresse, daekket);                                  logger.info("Extended lookup for " + qAdresse);
52                                                                    
53                                  if (afstand < bedsteAfstand) {                                  result = findBedsteAdresse(qAdresse, LookupMain.alleDaekkedeAdresser);
                                         bedsteAfstand = afstand;  
                                         bedsteAdr = daekket;  
                                 }  
54                          }                          }
55                                                    
56                                                    
57                          if ( bedsteAdr != null) {                          if ( result.bedsteAdr != null) {
58                                                                    
59                                  if (bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren                                  if (result.bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren
60                                          if (Lookup.verbose == true) {                                          if (LookupMain.verbose == true) {
61                                                  logger.info("(" +workerId + ") Bedste: " + qAdresse + "==>" + bedsteAdr + " ::: " + bedsteAfstand );                                                  logger.fine("(" +workerId + ") Bedste: " + qAdresse + "==>" + result.bedsteAdr + " ::: " + result.bedsteAfstand );
62                                          }                                          }
63                                                                                    
64                                          try {                                          try {
65                                                  db.gemResultat(qAdresse, bedsteAdr, bedsteAfstand);                                                  db.gemResultat(qAdresse, result.bedsteAdr, result.bedsteAfstand);
66                                          } catch (SQLException e) {                                          } catch (SQLException e) {
67                                                  logger.log(Level.WARNING, "Error saving result", e);                                                  logger.log(Level.WARNING, "Error saving result", e);
68                                                  logger.warning("Shutting down");                                                  logger.warning("Shutting down");
# Line 60  public class LookupWorker implements Run Line 70  public class LookupWorker implements Run
70                                                  System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme                                                  System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme
71                                          }                                          }
72                                  } else {                                  } else {
73                                          logger.info("(" +workerId + ") For stor afstand " + qAdresse + " -> " + bedsteAfstand);                                          logger.fine("(" +workerId + ") For stor afstand " + qAdresse + " -> " + result.bedsteAfstand);
74                                  }                                  }
75                          } else {                          } else {
76                                  logger.warning("(" +workerId + ") Ingen match til " + qAdresse);                                  logger.fine("(" +workerId + ") Ingen match til " + qAdresse);
77                          }                          }
78    
79                  }                  }
80                    try {
81                            barrier.await();
82                    } catch (BrokenBarrierException e) {
83                            logger.log(Level.SEVERE, e.getMessage(), e);
84                            System.exit(-1);
85                    } catch(InterruptedException e) {
86                            //Do nothing
87                    }
88            }
89            
90            LookupResult findBedsteAdresse(Adresse qAdresse, Adresse daekkede[]) {
91                    LookupResult result = new LookupResult();
92                                    
93                                    for (int i=0; i<daekkede.length; i++) {
94                  lookup.shutdownWorker( workerId);                          Adresse daekket = daekkede[i];
95                            
96                            if (consts.doCheckHO() ) {
97                                    if (qAdresse.ho != daekket.ho) {
98                                            //logger.info("Forkert HO: " + qAdresse + " - >" + daekket); //Skal udkommenteres senere når HO check er valideret
99                                            continue;
100                                    }
101                            }
102                            
103                            double afstand = Adresse.beregnAfstand(qAdresse, daekket);
104                            
105                            if (afstand < result.bedsteAfstand) {
106                                    result.bedsteAfstand = afstand;
107                                    result.bedsteAdr = daekket;
108                            }
109                    }
110                    return result;
111                            
112          }          }
113    
114  }  }

Legend:
Removed from v.2222  
changed lines
  Added in v.2263

  ViewVC Help
Powered by ViewVC 1.1.20