/[projects]/dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java
ViewVC logotype

Annotation of /dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2283 - (hide annotations) (download)
Fri Feb 13 15:45:24 2015 UTC (9 years, 3 months ago) by torben
File size: 7645 byte(s)
Korrekt håndtering af BK udvidet dækning + lad MySQL lave case konvertering for at undgå en masse ekstra String objekter under opbygningen.
1 torben 2267 package dk.daoas.daoadresseservice;
2    
3 torben 2274 import java.sql.SQLException;
4 torben 2267 import java.util.HashMap;
5 torben 2274 import java.util.List;
6     import java.util.Map;
7     import java.util.concurrent.ConcurrentHashMap;
8 torben 2267
9 torben 2274 import dk.daoas.daoadresseservice.AddressUtils.SplitResult;
10 torben 2282 import dk.daoas.daoadresseservice.beans.Address;
11     import dk.daoas.daoadresseservice.beans.ExtendedBean;
12     import dk.daoas.daoadresseservice.beans.HundredePctBean;
13     import dk.daoas.daoadresseservice.beans.SearchResult;
14     import dk.daoas.daoadresseservice.beans.SearchResult.Status;
15 torben 2274 import dk.daoas.daoadresseservice.db.DatabaseLayer;
16    
17 torben 2267 public class AdressSearch {
18    
19 torben 2274 Map<Integer, Map<String,Long>> searchPostnrVejnavnGadeid;
20     Map<Long, Map<String,Address>> searchGadeidentAdresser;
21    
22     List<Address> alleAdresser;
23 torben 2267
24 torben 2274 /* Mapper mellem db Row ID og adresse noden */
25     Map<Integer,Address> idAddressMap;
26 torben 2267
27 torben 2274
28 torben 2280 Map<Integer,HundredePctBean> hundredePct;
29    
30    
31 torben 2274 public SearchResult search(String postnrStr, String adresse) {
32     int postnr=0;
33 torben 2267
34 torben 2274 try {
35     postnr = Integer.parseInt(postnrStr);
36     } catch (Exception E) {
37     return new SearchResult(Status.ERROR_UNKNOWN_POSTAL);
38     }
39    
40     Map<String,Long> postnrVeje = searchPostnrVejnavnGadeid.get(postnr);
41    
42 torben 2267 if (postnrVeje == null) {
43 torben 2274 return new SearchResult(Status.ERROR_UNKNOWN_POSTAL);
44 torben 2267 }
45    
46 torben 2274 SplitResult split = AddressUtils.splitAdresse(adresse);
47     String vasketVejnavn = AddressUtils.vaskVejnavn( split.vej );
48 torben 2267
49 torben 2274 if (split.husnr.length() == 0) {
50     return new SearchResult(Status.ERROR_MISSING_HOUSENUMBER);
51     }
52 torben 2267
53 torben 2274 Long gadeident = postnrVeje.get(vasketVejnavn);
54     if (gadeident == null) {
55     return new SearchResult(Status.ERROR_UNKNOWN_STREETNAME);
56     }
57    
58     Map<String, Address> gade = searchGadeidentAdresser.get(gadeident); //Denne søgning må ikke fejle
59    
60    
61     String husnrSearch = "" + split.husnr + split.litra;
62     Address addr = gade.get(husnrSearch);
63     if (addr == null) {
64     return new SearchResult(Status.ERROR_UNKNOWN_ADDRESSPOINT);
65     }
66 torben 2276
67     if (addr.daekningsType == DaekningsType.DAEKNING_IKKEDAEKKET) {
68     return new SearchResult(Status.STATUS_NOT_COVERED);
69     }
70 torben 2277
71     if (addr.distributor.equals("LUKKET")) {
72     return new SearchResult(Status.STATUS_NOT_COVERED); //Skal vi have en special status til Lukkede adresser ?
73     }
74 torben 2274
75    
76     return new SearchResult(addr);
77 torben 2267 }
78    
79 torben 2274
80     public void buildSearchStructures() throws SQLException{
81     searchPostnrVejnavnGadeid = new HashMap<Integer, Map<String,Long>>();
82     searchGadeidentAdresser = new HashMap<Long, Map<String,Address>>();
83     idAddressMap = new HashMap<Integer,Address>();
84    
85 torben 2276 System.out.println("Build -- stage 1");
86    
87 torben 2274 alleAdresser = DatabaseLayer.getAllAdresses();
88 torben 2276
89 torben 2274 for (Address a : alleAdresser) {
90     idAddressMap.put(a.id, a);
91    
92     Map<String,Long> postnrVeje = searchPostnrVejnavnGadeid.get(a.postnr);
93    
94     if (postnrVeje == null) {
95     postnrVeje = new ConcurrentHashMap<String,Long>();
96     searchPostnrVejnavnGadeid.put(a.postnr, postnrVeje);
97     }
98    
99 torben 2281 String vasketVejnavn = AddressUtils.vaskVejnavn(a.vejnavn);
100     Long gadeident = postnrVeje.get(vasketVejnavn);
101 torben 2274 if (gadeident == null) {
102 torben 2281 postnrVeje.put(vasketVejnavn, a.gadeid);
103 torben 2274 }
104    
105     Map<String, Address> gade = searchGadeidentAdresser.get(a.gadeid);
106     if (gade == null) {
107     gade = new HashMap<String, Address>();
108     searchGadeidentAdresser.put(a.gadeid, gade);
109     }
110     String husnrSearch = "" + a.husnr + a.husnrbogstav;
111     gade.put(husnrSearch, a);
112 torben 2276 }
113    
114    
115 torben 2279 ////////////////////////////////////////////////////////////////////////////////////////
116     System.out.println("Build -- stage 2 udvidet dækning");
117    
118     List<ExtendedBean> extDao = DatabaseLayer.getExtendedAdresslist();
119 torben 2276 for (ExtendedBean eb : extDao) {
120 torben 2274
121 torben 2276 Address orgAddress = idAddressMap.get(eb.orgId);
122     if (orgAddress == null)
123     continue;
124    
125     Address targetAddress = idAddressMap.get(eb.targetId);
126     if (targetAddress == null)
127     continue;
128    
129 torben 2277 if (orgAddress.distributor != null && orgAddress.distributor.equals("LUKKET")) {
130     continue;
131     }
132    
133     if (targetAddress.distributor.equals("LUKKET")) {
134     continue;
135     }
136    
137 torben 2276 orgAddress.extTarget = targetAddress;
138     orgAddress.extAfstand = eb.afstand;
139    
140 torben 2283 boolean covered = false;
141     if (targetAddress.distributor.equals("DAO")) {
142     orgAddress.rute = calculateExtendedDaoRoute(eb,orgAddress,targetAddress);
143     if (orgAddress.rute != null) {
144     orgAddress.koreliste = targetAddress.koreliste;
145     covered = true;
146     }
147     }
148 torben 2276
149 torben 2283 if (targetAddress.distributor.equals("BK")) {
150     orgAddress.koreliste = calculateExtendedBkKoreliste(eb,orgAddress,targetAddress);
151     if (orgAddress.koreliste != null) {
152     orgAddress.rute = targetAddress.rute;
153     covered = true;
154     }
155     }
156    
157     if (covered) { //Kopier resten af felterne
158 torben 2276 orgAddress.daekningsType = DaekningsType.DAEKNING_UDVIDET;
159     orgAddress.dbkBane = targetAddress.dbkBane;
160    
161     /* Sådan gør den gamle service */
162     orgAddress.kommunekode = targetAddress.kommunekode;
163     orgAddress.vejkode = targetAddress.vejkode;
164    
165     orgAddress.distributor = targetAddress.distributor;
166     }
167    
168    
169 torben 2274 }
170 torben 2279 //////////////////////////////////////////////////////////////////////////////////////
171     System.out.println("Build -- stage 3 - 100pct");
172 torben 2274
173 torben 2280 hundredePct = DatabaseLayer.get100PctList();
174 torben 2279 for (Address addr : alleAdresser) {
175     if (addr.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) {
176     continue;
177     }
178    
179     if (addr.distributor != null && addr.distributor.equals("LUKKET")) {
180     continue;
181     }
182    
183    
184     HundredePctBean bean = hundredePct.get(addr.postnr);
185     if (bean == null) {
186     continue;
187     }
188    
189     addr.daekningsType = DaekningsType.DAEKNING_100PCT;
190     addr.rute = bean.rute;
191     addr.koreliste = bean.koreliste;
192     addr.dbkBane = bean.dbkBane;
193     addr.distributor = bean.distributor;
194     }
195 torben 2276
196 torben 2281 System.out.println("Build Completed");
197    
198 torben 2274 }
199    
200 torben 2276
201 torben 2283 private String calculateExtendedDaoRoute(ExtendedBean eb, Address orgAddress, Address targetAddress) {
202    
203     // ///////////////////////////////////////////////////////////////////
204     switch( eb.transport) {
205     case "cykel":
206     if (eb.afstand < 0.151) {
207     return "." + targetAddress.rute;
208     } else if (eb.afstand < 0.501) {
209     return ".." + targetAddress.rute;
210     } else if (eb.afstand < 0.701) {
211     return "..." + targetAddress.rute;
212     } else if (eb.afstand < 0.501) {
213     return "...." + targetAddress.rute;
214 torben 2276 }
215 torben 2283 break;
216     case "scooter":
217     if (eb.afstand < 0.151) {
218     return "." + targetAddress.rute;
219     } else if (eb.afstand < 0.801) {
220     return ".." + targetAddress.rute;
221     } else if (eb.afstand < 1.201) {
222     return "..." + targetAddress.rute;
223     } else if (eb.afstand < 2.101) {
224     return "...." + targetAddress.rute;
225     }
226     break;
227     case "bil":
228     if (eb.afstand < 0.151) {
229     return "." + targetAddress.rute;
230     } else if (eb.afstand < 1.001) {
231     return ".." + targetAddress.rute;
232     } else if (eb.afstand < 1.601) {
233     return "..." + targetAddress.rute;
234     } else if (eb.afstand < 2.601) {
235     return "...." + targetAddress.rute;
236     }
237 torben 2276 break;
238 torben 2283 }
239 torben 2276 return null;
240     }
241    
242 torben 2283 ///////////////////////////////////////////////////////////
243     private String calculateExtendedBkKoreliste(ExtendedBean eb, Address orgAddress, Address targetAddress) {
244     String inject;
245     if (eb.afstand <= 0.500) {
246     inject = ".";
247     } else {
248     inject = "..";
249     }
250     return AddressUtils.injectIntoBk(targetAddress.koreliste, inject);
251     }
252 torben 2276
253 torben 2283
254 torben 2267 }

  ViewVC Help
Powered by ViewVC 1.1.20