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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20