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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20