/[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 2282 - (show annotations) (download)
Fri Feb 13 15:15:13 2015 UTC (9 years, 3 months ago) by torben
File size: 7219 byte(s)
Flyt alle bean typer ned i sin egen package
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 orgAddress.rute = calculateExtendedRoute(eb,orgAddress,targetAddress);
141
142 if (orgAddress.rute != null) {
143 orgAddress.daekningsType = DaekningsType.DAEKNING_UDVIDET;
144 orgAddress.koreliste = targetAddress.koreliste;
145 orgAddress.dbkBane = targetAddress.dbkBane;
146
147 /* Sådan gør den gamle service */
148 orgAddress.kommunekode = targetAddress.kommunekode;
149 orgAddress.vejkode = targetAddress.vejkode;
150
151 orgAddress.distributor = targetAddress.distributor;
152 }
153
154
155 }
156 //////////////////////////////////////////////////////////////////////////////////////
157 System.out.println("Build -- stage 3 - 100pct");
158
159 hundredePct = DatabaseLayer.get100PctList();
160 for (Address addr : alleAdresser) {
161 if (addr.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) {
162 continue;
163 }
164
165 if (addr.distributor != null && addr.distributor.equals("LUKKET")) {
166 continue;
167 }
168
169
170 HundredePctBean bean = hundredePct.get(addr.postnr);
171 if (bean == null) {
172 continue;
173 }
174
175 addr.daekningsType = DaekningsType.DAEKNING_100PCT;
176 addr.rute = bean.rute;
177 addr.koreliste = bean.koreliste;
178 addr.dbkBane = bean.dbkBane;
179 addr.distributor = bean.distributor;
180 }
181
182 System.out.println("Build Completed");
183
184 }
185
186
187 private String calculateExtendedRoute(ExtendedBean eb, Address orgAddress, Address targetAddress) {
188 switch (targetAddress.distributor) {
189 case "DAO":
190 // ///////////////////////////////////////////////////////////////////
191 switch( eb.transport) {
192 case "cykel":
193 if (eb.afstand < 0.151) {
194 return "." + targetAddress.rute;
195 } else if (eb.afstand < 0.501) {
196 return ".." + targetAddress.rute;
197 } else if (eb.afstand < 0.701) {
198 return "..." + targetAddress.rute;
199 } else if (eb.afstand < 0.501) {
200 return "...." + targetAddress.rute;
201 }
202 break;
203 case "scooter":
204 if (eb.afstand < 0.151) {
205 return "." + targetAddress.rute;
206 } else if (eb.afstand < 0.801) {
207 return ".." + targetAddress.rute;
208 } else if (eb.afstand < 1.201) {
209 return "..." + targetAddress.rute;
210 } else if (eb.afstand < 2.101) {
211 return "...." + targetAddress.rute;
212 }
213 break;
214 case "bil":
215 if (eb.afstand < 0.151) {
216 return "." + targetAddress.rute;
217 } else if (eb.afstand < 1.001) {
218 return ".." + targetAddress.rute;
219 } else if (eb.afstand < 1.601) {
220 return "..." + targetAddress.rute;
221 } else if (eb.afstand < 2.601) {
222 return "...." + targetAddress.rute;
223 }
224 break;
225 }
226 break;
227
228 ///////////////////////////////////////////////////////////
229
230 case "BK":
231 String inject;
232 if (eb.afstand <= 0.500) {
233 inject = ".";
234 } else {
235 inject = "..";
236 }
237 return AddressUtils.injectIntoBk(targetAddress.rute, inject);
238 }
239 return null;
240 }
241
242
243 }

  ViewVC Help
Powered by ViewVC 1.1.20