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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2821 - (show annotations) (download)
Tue Jan 19 10:02:51 2016 UTC (8 years, 3 months ago) by torben
File size: 8221 byte(s)
Upgrade to seven days
1 package dk.daoas.daoadresseservice;
2
3 import org.apache.commons.lang3.StringUtils;
4 import org.apache.commons.lang3.text.WordUtils;
5
6 import dk.daoas.daoadresseservice.beans.Address;
7
8 public class AddressUtils {
9
10 public static class SplitResult {
11 public String vej = "";
12 public String husnr = "";
13 public String litra = "";
14 public String etage = "";
15 public String lejlighed = "";
16 public String resten = "";
17
18 @Override
19 public String toString() {
20 return vej + " / " + husnr + " / " + litra;
21 }
22 }
23
24 public static char fjernAccentTegn(char c) {
25 switch (c) {
26 case 'é':
27 return 'e';
28 case 'è':
29 return 'e';
30
31 case 'û':
32 return 'u';
33 case 'ü':
34 return 'u';
35
36 case 'ö':
37 return 'ø';
38 case 'ô':
39 return 'o';
40
41 case 'ä':
42 return 'æ';
43 case 'â':
44 return 'a';
45
46 case 'ñ':
47 return 'n';
48
49 default:
50 return c;
51 }
52 }
53
54 public static String vaskVejnavn(String indVejnavn) {
55 StringBuilder sb = new StringBuilder();
56 char chars[] = indVejnavn.toCharArray();
57
58 for (char c: chars) {
59 if ( Character.isAlphabetic(c)) {
60 c = Character.toLowerCase(c);
61 c = fjernAccentTegn(c);
62
63 sb.append( c );
64 } else if ( Character.isDigit(c)) {
65 sb.append(c);
66 }
67
68 }
69
70 return sb.toString();
71 }
72
73 public static String injectIntoBk(String bkrute, String injected) {
74 if (bkrute == null)
75 return null;
76
77 String parts[] = bkrute.split("/");
78
79 if (parts.length != 4) {
80 return bkrute;
81 }
82
83 return parts[0] + "/" + parts[1] + "/" + parts[2] + "/" + injected + parts[3];
84 }
85
86
87 /*
88 * Er en 1-1 port af SplitAdresse() fra funcSplitAdresse.php
89 */
90 public static SplitResult splitAdresse(String indAdresse) {
91 indAdresse = indAdresse.trim();
92
93 SplitResult result = new SplitResult();
94
95
96 int i=0;
97 int len = indAdresse.length();
98 StringBuilder delStreng = new StringBuilder();
99
100 // ignorer blanke og komma og punktum
101 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
102 i++;
103 }
104
105
106 // alle tegn frem til og med første bogstav er også en del af vejnavn
107 while ((i < len) && Character.isAlphabetic(indAdresse.charAt(i))==false ) {
108 delStreng.append( indAdresse.charAt(i) );
109 i++;
110 }
111
112
113 // alle karakterer indtil det første tal er vejnavn
114 while ((i < len) && Character.isDigit(indAdresse.charAt(i))==false ) {
115 delStreng.append( indAdresse.charAt(i) );
116 i++;
117 }
118
119
120 result.vej = delStreng.toString().toLowerCase().trim();
121 if ( result.vej.endsWith(".") || result.vej.endsWith(",")) {
122 result.vej = result.vej.substring(0, result.vej.length() - 1);
123 result.vej = result.vej.trim();
124 }
125
126 //special case - hvis strengen ender med ' nr' skal ' nr' fjernes
127 if ( result.vej.endsWith(" nr")) {
128 result.vej = result.vej.substring(0, result.vej.length() - 3);
129 }
130
131 result.vej = WordUtils.capitalize( result.vej.trim() );
132
133
134
135 // første tal er husnummer
136 delStreng = new StringBuilder();
137 while ((i < len) && Character.isDigit(indAdresse.charAt(i))==true ) {
138 delStreng.append( indAdresse.charAt(i) );
139 i++;
140 }
141 result.husnr = delStreng.toString();
142
143 // ignorer blanke og komma og punktum
144 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
145 i++;
146 }
147
148 /*
149 // hvis næste delstreng er et enkelt bogstav så er det husbogstavet
150 delStreng = new StringBuilder();
151 while (i<len && Character.isDigit(indAdresse.charAt(i))==false && indAdresse.charAt(i) == '.' && indAdresse.charAt(i) != ',' && indAdresse.charAt(i) != ' ' ) {
152 delStreng.append( indAdresse.charAt(i) );
153 i++;
154 }
155
156 System.out.println(indAdresse + " >" + delStreng + "< " +i);
157
158 if (delStreng.length() == 1) {
159
160 result.litra = delStreng.toString().toUpperCase();
161 if ( !Character.isAlphabetic(result.litra.charAt(0))) {
162 result.litra = ""; //$HusBogstav må KUN være A-Z
163 }
164 delStreng = new StringBuilder();
165
166 // ignorer blanke og komma og punktum
167 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
168 i++;
169 }
170 }
171 */
172
173 if (i>=len) //THN tilføjelse
174 return result;
175
176 if (Character.isAlphabetic(indAdresse.charAt(i) )) {
177 char current = Character.toUpperCase( indAdresse.charAt(i) );
178
179 if (current != 'Æ'&& current != 'Ø' && current != 'Å') {
180 if ( (i+1 == len ||
181 (Character.isAlphabetic(indAdresse.charAt(i+1) ) == false
182 /*&& indAdresse.charAt(i+1) != '.'*/
183
184 && checkCo(indAdresse,i) == false // Fra sortér C/O
185 )
186 )
187 ) {
188 result.litra = "" + current;
189 i++;
190 }
191 }
192 }
193
194 // ignorer blanke og komma og punktum
195 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
196 i++;
197 }
198
199
200
201
202 // første tal er etage (eller evt. st er stuen)
203 if (delStreng.toString().toLowerCase().equals("st")) {
204 result.etage = delStreng.toString().toLowerCase();
205 }
206 else {
207 delStreng = new StringBuilder();
208 String nextTwo = StringUtils.substring(indAdresse, i, i+2).toLowerCase();
209 if ( nextTwo.equals("st") ) {
210 result.etage = nextTwo;
211 i += nextTwo.length();
212 }
213 else {
214 while ((i < len) && Character.isDigit(indAdresse.charAt(i))==true ) {
215 delStreng.append( indAdresse.charAt(i) );
216 i++;
217 }
218 result.etage = delStreng.toString();
219 }
220 }
221
222
223 // Hvis vi fandt en etage angivelse skal vi også kigge efter lejlighed/side
224 if (result.etage.length() > 0 ) {
225
226 // ignorer blanke og komma og punktum
227 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
228 i++;
229 }
230
231
232 String next = StringUtils.substring(indAdresse, i, i+3).toLowerCase();
233 // Ignorer hvis næste info er 'sal'
234 if (next.equals("sal")) {
235 i += 3;
236
237 // ignorer blanke og komma og punktum
238 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
239 i++;
240 }
241 }
242
243 next = StringUtils.substring(indAdresse, i, i+3).toLowerCase();
244 // Ignorer hvis næste info er 'dør'
245 if (next.equals("dør")) {
246 i += 3;
247
248 // ignorer blanke og komma og punktum
249 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
250 i++;
251 }
252 }
253
254 // Ignorer hvis næste info er 'lejlighed' eller 'lejl.' eller 'Lej'
255 next = StringUtils.substring(indAdresse, i, i+9).toLowerCase();
256 if (next.equals("lejlighed") ) {
257 i += 9;
258 }
259 next = StringUtils.substring(indAdresse, i, i+4).toLowerCase();
260 if (next.equals("lejl") ) {
261 i += 4;
262 }
263 next = StringUtils.substring(indAdresse, i, i+3).toLowerCase();
264 if (next.equals("lej") ) {
265 i += 3;
266 }
267
268 // ignorer blanke og komma og punktum
269 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
270 i++;
271 }
272
273 // alle karakterer indtil det første blanke er lejlighed/side
274 delStreng = new StringBuilder();
275 while (i<len && indAdresse.charAt(i) != ' ') {
276 delStreng.append( indAdresse.charAt(i) );
277 i++;
278 }
279 result.lejlighed = delStreng.toString().toLowerCase();
280 result.lejlighed = result.lejlighed.replace(".", "");
281 }
282
283 // saml resten op (kan gøres smartere med en substr)
284 result.resten = indAdresse.substring(i).trim();
285
286 return result;
287 }
288
289 public static boolean checkCo(String addr, int pos) {
290
291 if ( StringUtils.substring(addr, pos, pos+3).equalsIgnoreCase("C/O") )
292 return true;
293
294 return false;
295
296 }
297
298 public static void updateDaekningstype(Address a) {
299 if (a.ruteMandag != null && a.ruteMandag.length()> 0) {
300 a.daekningsType = DaekningsType.DAEKNING_DIREKTE;
301 } else {
302 a.daekningsType = DaekningsType.DAEKNING_IKKEDAEKKET;
303 }
304 }
305
306 }
307
308

  ViewVC Help
Powered by ViewVC 1.1.20