/[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 2609 - (hide annotations) (download)
Wed Jul 15 08:37:40 2015 UTC (8 years, 10 months ago) by torben
File size: 8209 byte(s)
Unittest of AddressSearch
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 torben 2609 import dk.daoas.daoadresseservice.beans.Address;
7    
8 torben 2267 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 torben 2386
18     @Override
19     public String toString() {
20     return vej + " / " + husnr + " / " + litra;
21     }
22 torben 2267 }
23    
24 torben 2403 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 torben 2561 return 'ø';
38 torben 2403 case 'ô':
39     return 'o';
40    
41     case 'ä':
42 torben 2561 return 'æ';
43 torben 2403 case 'â':
44     return 'a';
45    
46     case 'ñ':
47     return 'n';
48    
49     default:
50     return c;
51     }
52     }
53    
54 torben 2267 public static String vaskVejnavn(String indVejnavn) {
55 torben 2401 StringBuilder sb = new StringBuilder();
56     char chars[] = indVejnavn.toCharArray();
57 torben 2267
58 torben 2403 for (char c: chars) {
59 torben 2401 if ( Character.isAlphabetic(c)) {
60 torben 2403 c = Character.toLowerCase(c);
61     c = fjernAccentTegn(c);
62    
63     sb.append( c );
64 torben 2406 } else if ( Character.isDigit(c)) {
65     sb.append(c);
66 torben 2401 }
67 torben 2406
68 torben 2401 }
69 torben 2386
70 torben 2401 return sb.toString();
71 torben 2267 }
72    
73 torben 2276 public static String injectIntoBk(String bkrute, String injected) {
74 torben 2442 if (bkrute == null)
75     return null;
76    
77 torben 2276 String parts[] = bkrute.split("/");
78 torben 2283
79     if (parts.length != 4) {
80     return bkrute;
81     }
82    
83 torben 2276 return parts[0] + "/" + parts[1] + "/" + parts[2] + "/" + injected + parts[3];
84     }
85    
86 torben 2267
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 torben 2408
105 torben 2267
106 torben 2408 // 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 torben 2267
112 torben 2408
113 torben 2267 // 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 torben 2399
120 torben 2398 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 torben 2399 result.vej = result.vej.trim();
124     }
125    
126     //special case - hvis strengen ender med ' nr' skal ' nr' fjernes
127 torben 2398 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 torben 2267
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 torben 2387 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 torben 2417 (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 torben 2387 )
187     ) {
188     result.litra = "" + current;
189     i++;
190     }
191 torben 2273 }
192 torben 2267 }
193    
194 torben 2387 // ignorer blanke og komma og punktum
195     while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
196     i++;
197     }
198    
199 torben 2267
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 torben 2273 result.resten = indAdresse.substring(i).trim();
285 torben 2267
286     return result;
287     }
288    
289 torben 2417 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 torben 2609 public static void updateDaekningstype(Address a) {
299     if (a.rute != null && a.rute.length()> 0) {
300     a.daekningsType = DaekningsType.DAEKNING_DIREKTE;
301     } else {
302     a.daekningsType = DaekningsType.DAEKNING_IKKEDAEKKET;
303     }
304     }
305    
306 torben 2267 }
307    
308    

  ViewVC Help
Powered by ViewVC 1.1.20