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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2285 - (show annotations) (download)
Fri Feb 13 15:58:36 2015 UTC (9 years, 3 months ago) by torben
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 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
25 Map<Integer,HundredePctBean> hundredePct;
26
27
28 public SearchResult search(String postnrStr, String adresse) {
29 int postnr=0;
30
31 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 if (postnrVeje == null) {
40 return new SearchResult(Status.ERROR_UNKNOWN_POSTAL);
41 }
42
43 SplitResult split = AddressUtils.splitAdresse(adresse);
44 String vasketVejnavn = AddressUtils.vaskVejnavn( split.vej );
45
46 if (split.husnr.length() == 0) {
47 return new SearchResult(Status.ERROR_MISSING_HOUSENUMBER);
48 }
49
50 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
64 if (addr.daekningsType == DaekningsType.DAEKNING_IKKEDAEKKET) {
65 return new SearchResult(Status.STATUS_NOT_COVERED);
66 }
67
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
72
73 return new SearchResult(addr);
74 }
75
76
77 public void buildSearchStructures() throws SQLException{
78 searchPostnrVejnavnGadeid = new HashMap<Integer, Map<String,Long>>();
79 searchGadeidentAdresser = new HashMap<Long, Map<String,Address>>();
80
81 System.out.println("Build -- stage 1");
82
83 alleAdresser = DatabaseLayer.getAllAdresses();
84
85 /* Mapper mellem db Row ID og adresse noden */
86 Map<Integer,Address> idAddressMap = new HashMap<Integer,Address>( alleAdresser.size() );
87
88 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 String vasketVejnavn = AddressUtils.vaskVejnavn(a.vejnavn);
99 Long gadeident = postnrVeje.get(vasketVejnavn);
100 if (gadeident == null) {
101 postnrVeje.put(vasketVejnavn, a.gadeid);
102 }
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 }
112
113
114 ////////////////////////////////////////////////////////////////////////////////////////
115 System.out.println("Build -- stage 2 udvidet dækning");
116
117 List<ExtendedBean> extDao = DatabaseLayer.getExtendedAdresslist();
118 for (ExtendedBean eb : extDao) {
119
120 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 if (orgAddress.distributor != null && orgAddress.distributor.equals("LUKKET")) {
129 continue;
130 }
131
132 if (targetAddress.distributor.equals("LUKKET")) {
133 continue;
134 }
135
136 orgAddress.extTarget = targetAddress;
137 orgAddress.extAfstand = eb.afstand;
138
139 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
148 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 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 }
169 //////////////////////////////////////////////////////////////////////////////////////
170 System.out.println("Build -- stage 3 - 100pct");
171
172 hundredePct = DatabaseLayer.get100PctList();
173 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
195 System.out.println("Build Completed");
196
197 }
198
199
200 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 }
214 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 break;
237 }
238 return null;
239 }
240
241 ///////////////////////////////////////////////////////////
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
252
253 }

  ViewVC Help
Powered by ViewVC 1.1.20