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

Contents of /dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2283 - (show annotations) (download)
Fri Feb 13 15:45:24 2015 UTC (9 years, 3 months ago) by torben
Original Path: dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java
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 package dk.daoas.daoadresseservice;
2
3 import java.sql.SQLException;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.concurrent.ConcurrentHashMap;
8
9 import dk.daoas.daoadresseservice.AddressUtils.SplitResult;
10 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 import dk.daoas.daoadresseservice.db.DatabaseLayer;
16
17 public class AdressSearch {
18
19 Map<Integer, Map<String,Long>> searchPostnrVejnavnGadeid;
20 Map<Long, Map<String,Address>> searchGadeidentAdresser;
21
22 List<Address> alleAdresser;
23
24 /* Mapper mellem db Row ID og adresse noden */
25 Map<Integer,Address> idAddressMap;
26
27
28 Map<Integer,HundredePctBean> hundredePct;
29
30
31 public SearchResult search(String postnrStr, String adresse) {
32 int postnr=0;
33
34 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 if (postnrVeje == null) {
43 return new SearchResult(Status.ERROR_UNKNOWN_POSTAL);
44 }
45
46 SplitResult split = AddressUtils.splitAdresse(adresse);
47 String vasketVejnavn = AddressUtils.vaskVejnavn( split.vej );
48
49 if (split.husnr.length() == 0) {
50 return new SearchResult(Status.ERROR_MISSING_HOUSENUMBER);
51 }
52
53 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
67 if (addr.daekningsType == DaekningsType.DAEKNING_IKKEDAEKKET) {
68 return new SearchResult(Status.STATUS_NOT_COVERED);
69 }
70
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
75
76 return new SearchResult(addr);
77 }
78
79
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 System.out.println("Build -- stage 1");
86
87 alleAdresser = DatabaseLayer.getAllAdresses();
88
89 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 String vasketVejnavn = AddressUtils.vaskVejnavn(a.vejnavn);
100 Long gadeident = postnrVeje.get(vasketVejnavn);
101 if (gadeident == null) {
102 postnrVeje.put(vasketVejnavn, a.gadeid);
103 }
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 }
113
114
115 ////////////////////////////////////////////////////////////////////////////////////////
116 System.out.println("Build -- stage 2 udvidet dækning");
117
118 List<ExtendedBean> extDao = DatabaseLayer.getExtendedAdresslist();
119 for (ExtendedBean eb : extDao) {
120
121 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 if (orgAddress.distributor != null && orgAddress.distributor.equals("LUKKET")) {
130 continue;
131 }
132
133 if (targetAddress.distributor.equals("LUKKET")) {
134 continue;
135 }
136
137 orgAddress.extTarget = targetAddress;
138 orgAddress.extAfstand = eb.afstand;
139
140 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
149 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 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 }
170 //////////////////////////////////////////////////////////////////////////////////////
171 System.out.println("Build -- stage 3 - 100pct");
172
173 hundredePct = DatabaseLayer.get100PctList();
174 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
196 System.out.println("Build Completed");
197
198 }
199
200
201 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 }
215 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 break;
238 }
239 return null;
240 }
241
242 ///////////////////////////////////////////////////////////
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
253
254 }

  ViewVC Help
Powered by ViewVC 1.1.20