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

Annotation of /dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2422 - (hide annotations) (download)
Tue Mar 3 08:14:09 2015 UTC (9 years, 3 months ago) by torben
File size: 3489 byte(s)
arbejd med 2 dæknings sæt og lav den mindste mindre
1 torben 2145 package dk.daoas.fulddaekning;
2    
3     import java.util.Map;
4 torben 2150 import java.util.Queue;
5 torben 2263 import java.util.concurrent.ConcurrentHashMap;
6     import java.util.concurrent.CyclicBarrier;
7     import java.util.concurrent.ThreadPoolExecutor;
8 torben 2145 import java.util.logging.Level;
9     import java.util.logging.Logger;
10    
11     import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException;
12    
13     public class Lookup {
14 torben 2158
15 torben 2145
16 torben 2195
17 torben 2241 final static Logger logger = Logger.getLogger( Lookup.class.toString() );
18 torben 2145
19 torben 2328 int postnr;
20 torben 2145 Database db;
21 torben 2150
22 torben 2207 Adresse daekkedeAdresser[];
23 torben 2422 Adresse udvidetDaekkedeAdresser[];
24 torben 2150 Queue<Adresse> queue;
25 torben 2145
26     Map<Integer, LookupWorker> workers = new ConcurrentHashMap<Integer, LookupWorker>();
27    
28 torben 2259 ThreadPoolExecutor threadPool;
29 torben 2263
30     CyclicBarrier barrier;
31 torben 2227
32 torben 2154
33    
34 torben 2328 public Lookup(int postnr, Database db, ThreadPoolExecutor threadPool) {
35 torben 2150 this.postnr = postnr;
36 torben 2145 this.db = db;
37 torben 2259 this.threadPool = threadPool;
38 torben 2145 }
39    
40 torben 2241
41 torben 2145
42     public void doLookup() throws BoundingBoxException {
43 torben 2150 logger.info("Starting for postnr=" + postnr);
44 torben 2145
45 torben 2154 Statistik stat = new Statistik();
46 torben 2330
47     Constants consts = Constants.getInstance();
48 torben 2154
49 torben 2145 long start1 = System.currentTimeMillis();
50     long start2 = 0;
51    
52 torben 2263 barrier = new CyclicBarrier(LookupMain.max_workers + 1);
53    
54 torben 2145 try {
55 torben 2232
56     logger.info("Henter _ikke_ daekkede adresser i " + postnr);
57 torben 2328 queue = db.hentIkkedaekkedeAdresserCache(postnr);
58 torben 2232 if (queue.size() == 0) {
59     logger.info("Fandt ikke nogen _ikke_ daekkede adresser i " + postnr);
60 torben 2233 return;
61 torben 2232 }
62    
63 torben 2150 BoundingBox bbox = db.getBoundingbox(postnr);
64     bbox.validateBbox();
65    
66     logger.info("Bbox=" + bbox);
67 torben 2330 bbox.adjustToMargin( consts.getKmMargin() );
68 torben 2150 logger.info("Bbox Adjusted=" + bbox);
69    
70     logger.info("Henter daekkede adresser i " + postnr);
71 torben 2263 daekkedeAdresser = db.hentDaekkedeAdresserCache(bbox);
72 torben 2150
73 torben 2422 BoundingBox udvidetBbox = db.getBoundingbox(postnr);
74     udvidetBbox.adjustToMargin( consts.getMaxDistance() );
75 torben 2263
76 torben 2422 logger.info("Henter udvidet daekkede adresser i " + postnr);
77     udvidetDaekkedeAdresser = db.hentDaekkedeAdresserCache(udvidetBbox);
78    
79    
80    
81 torben 2154 stat.postnr = postnr;
82 torben 2207 stat.antalDaekkede = daekkedeAdresser.length;
83 torben 2154 stat.antalIkkeDaekkede = queue.size();
84 torben 2227 stat.totalDataset = stat.antalDaekkede * stat.antalIkkeDaekkede;
85    
86 torben 2150
87     logger.info("Starter beregning for " + postnr);
88 torben 2145 start2 = System.currentTimeMillis();
89    
90 torben 2241 for (int i =0; i < LookupMain.max_workers; i++) {
91 torben 2263 LookupWorker worker = new LookupWorker(i, this, barrier);
92 torben 2260 threadPool.submit(worker);
93 torben 2145 }
94    
95 torben 2263 barrier.await();
96 torben 2145
97 torben 2219 db.saveBatch();//Save any unsaved rows
98 torben 2145
99 torben 2219
100 torben 2145 } catch(Exception e) {
101     logger.log(Level.WARNING, "Exception during lookup", e);
102    
103     if (e instanceof BoundingBoxException) {
104     logger.severe( e.getMessage() );
105     System.exit(1);
106     }
107    
108     }
109     long now = System.currentTimeMillis();
110    
111 torben 2227 stat.forbrugtTid = (now-start1);
112 torben 2241 LookupMain.saveStatistics(stat);
113 torben 2154
114     logger.info( stat.toString() );
115 torben 2153 logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr);
116 torben 2145 }
117    
118    
119     // Getters and setters
120    
121     ///////////////////////////
122     public Database getDb() {
123     return db;
124     }
125 torben 2150
126    
127    
128 torben 2207 public Adresse[] getDaekkedeAdresser() {
129 torben 2150 return daekkedeAdresser;
130 torben 2145 }
131 torben 2422 public Adresse[] getUdvidetDaekkedeAdresser() {
132     return udvidetDaekkedeAdresser;
133     }
134    
135    
136 torben 2145
137 torben 2150 public Queue<Adresse> getQueue() {
138     return queue;
139     }
140    
141    
142 torben 2145 }

  ViewVC Help
Powered by ViewVC 1.1.20