/[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 2207 by torben, Thu Sep 11 16:42:08 2014 UTC revision 2245 by torben, Wed Dec 10 10:42:09 2014 UTC
# Line 1  Line 1 
1  package dk.daoas.fulddaekning;  package dk.daoas.fulddaekning;
2    
3  import java.sql.SQLException;  import java.sql.SQLException;
 import java.util.ArrayList;  
4  import java.util.Queue;  import java.util.Queue;
5  import java.util.logging.Level;  import java.util.logging.Level;
6  import java.util.logging.Logger;  import java.util.logging.Logger;
7    
8  public class LookupWorker implements Runnable {  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() );          Logger logger = Logger.getLogger( LookupWorker.class.getName() );
17                    
18          int workerId;          int workerId;
# Line 15  public class LookupWorker implements Run Line 21  public class LookupWorker implements Run
21          public LookupWorker(int workerId, Lookup lookup) {          public LookupWorker(int workerId, Lookup lookup) {
22                  this.workerId = workerId;                  this.workerId = workerId;
23                  this.lookup = lookup;                  this.lookup = lookup;
24                    
25                    consts = Constants.getInstance();
26          }          }
27    
28          @Override          @Override
# Line 32  public class LookupWorker implements Run Line 40  public class LookupWorker implements Run
40                  while ( (qAdresse = queue.poll()) != null) {                  while ( (qAdresse = queue.poll()) != null) {
41                          //logger.info("Worker " + workerId + ", analyzing " + qAdresse);                                                  //logger.info("Worker " + workerId + ", analyzing " + qAdresse);                        
42                                    
43                          double bedsteAfstand = 9999999.999;  
44                          Adresse bedsteAdr = null;                          LookupResult result = findBedsteAdresse(qAdresse, daekkede);
45                          for (int i=0; i<daekkede.length; i++) {                          
46                                  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
47                                  double afstand = Adresse.beregnAfstand(qAdresse, daekket);                                  logger.info("Extended lookup for " + qAdresse);
48                                                                    
49                                  if (afstand < bedsteAfstand) {                                  result = findBedsteAdresse(qAdresse, LookupMain.alleDaekkedeAdresser);
                                         bedsteAfstand = afstand;  
                                         bedsteAdr = daekket;  
                                 }  
50                          }                          }
51                                                    
52                                                    
53                          if ( bedsteAdr != null) {                          if ( result.bedsteAdr != null) {
54                                                                    
55                                  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
56                                          if (Lookup.verbose == true) {                                          if (LookupMain.verbose == true) {
57                                                  logger.info("(" +workerId + ") Bedste: " + qAdresse + "==>" + bedsteAdr + " ::: " + bedsteAfstand );                                                  logger.info("(" +workerId + ") Bedste: " + qAdresse + "==>" + result.bedsteAdr + " ::: " + result.bedsteAfstand );
58                                          }                                          }
59                                                                                    
60                                          try {                                          try {
61                                                  db.gemResultat(qAdresse, bedsteAdr, bedsteAfstand);                                                  db.gemResultat(qAdresse, result.bedsteAdr, result.bedsteAfstand);
62                                          } catch (SQLException e) {                                          } catch (SQLException e) {
63                                                  logger.log(Level.WARNING, "Error saving result", e);                                                  logger.log(Level.WARNING, "Error saving result", e);
64                                                  logger.warning("Shutting down");                                                  logger.warning("Shutting down");
# Line 61  public class LookupWorker implements Run Line 66  public class LookupWorker implements Run
66                                                  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
67                                          }                                          }
68                                  } else {                                  } else {
69                                          logger.info("(" +workerId + ") For stor afstand " + qAdresse + " -> " + bedsteAfstand);                                          logger.info("(" +workerId + ") For stor afstand " + qAdresse + " -> " + result.bedsteAfstand);
70                                  }                                  }
71                          } else {                          } else {
72                                  logger.warning("(" +workerId + ") Ingen match til " + qAdresse);                                  logger.warning("(" +workerId + ") Ingen match til " + qAdresse);
# Line 72  public class LookupWorker implements Run Line 77  public class LookupWorker implements Run
77                                    
78                  lookup.shutdownWorker( workerId);                  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  }  }

Legend:
Removed from v.2207  
changed lines
  Added in v.2245

  ViewVC Help
Powered by ViewVC 1.1.20