Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
15 arune 1
/*
2
 * File created by arune
3
 * at 2006-may-21
4
 */
5
package Macbeth.Modules.modCallerID;
6
 
7
import Macbeth.Utilities.UByte;
8
import java.io.*;
9
import java.net.URL;
10
import java.util.*;
11
 
12
import Macbeth.Utilities.MyDateTime;
13
import Macbeth.System.*;
14
import Macbeth.Utilities.*;
15
 
16
/**
17
 *
18
 *
19
 *
20
 * @author arune
21
 */
22
public class CallObject {
23
 
24
    //private UByte[]   data;
25
    private String  callerPhoneNr;
26
    private String  callerName;
27
    private String  callerAddress;
28
    private String  callDate;
29
    private String  callerOrtsnamn;
30
 
31
    private ArrayList servers;    //a list of servers
32
    private int currentServer = -1;     //the serverlist will cycle when connection fails, this var keeps track of current server
33
 
34
    /**
35
     * Creates a new instance of CallObject.
36
     * @param data The byte value of this object.
37
     */
38
    public CallObject(UByte[] data, ArrayList servers) {
39
        //this.data = data;
40
        callerName = "";
41
        callerAddress = "";
42
        callDate = MyDateTime.now();
43
        callerOrtsnamn = "";
44
 
45
        this.servers = servers;
46
 
47
        //ska göras kontroller på detta nummer, t.ex. ska inte A/B/C/D/*/# komma med, if_numeric också typ
48
        //för att fixa riktnummer separerat från resten (med en dash -)
49
        //använd http://www.eniro.se/riktnummer/
50
        //stoppa i ortsnamn i callerOrtsnamn, används då inget namn+address dykt upp för nummret
51
 
52
        //obs, börjar nummret med 07 ska de fyra första antas vara riktnummer 
53
        callerPhoneNr = "";
54
        for (int i = 1; i < data.length; i++) {
55
            callerPhoneNr = callerPhoneNr + parseByte(data[i]);
56
        }
57
 
58
        //System.out.println("callerPhoneNr.length: " + callerPhoneNr.length());
59
        //om telefonnummret är längre än 7 och de två första siffrorna inte är 00 (utrikes)
60
        if (callerPhoneNr.length() > 7 && !callerPhoneNr.substring(0,2).equals("00")) {
61
            fixPhoneOrt();
62
            getNameAddress();
63
 
64
        } else if (callerPhoneNr.length() == 2) {
65
            //System.out.println("callerPhoneNr: " + callerPhoneNr + " data[0].toString(): " + data[0].toString());
66
            if (parseByte(data[0]).equals("B") && callerPhoneNr.equals("00")) {
67
                //System.out.println("Hidden");
68
                callerPhoneNr = "[Hidden number]";
69
            } else if (callerPhoneNr.equals("01")) {
70
                //System.out.println("Secret");
71
                callerPhoneNr = "[Secret number]";
72
            }
73
        }
74
 
75
    }
76
 
77
    public CallObject() {
78
        this(new UByte[0], new ArrayList());
79
    }
80
 
81
    public CallObject(String number) {
82
        callerName = "";
83
        callerAddress = "";
84
        callDate = MyDateTime.now();
85
        callerOrtsnamn = "";
86
        callerPhoneNr = number;
87
 
88
        //om telefonnummret är längre än 7 och de två första siffrorna inte är 00 (utrikes)
89
        if (callerPhoneNr.length() > 7 && !callerPhoneNr.substring(0,2).equals("00")) {
90
            fixPhoneOrt();
91
            //getDataFromEniro
92
        }
93
    }
94
 
95
    private String getPart(String data, String startstr, String endstr) {
96
        String out = null;
97
        int start = data.indexOf(startstr);
98
        //System.out.println("start: " + start);
99
        if (start != -1) {
100
            int end = data.indexOf(endstr,start);
101
            //System.out.println("end: " + end);
102
            if (end != -1) {
103
                out = data.substring(start+startstr.length(),end);
104
                //System.out.println("out: " + out);
105
            }
106
        }
107
 
108
        return out;
109
    }
110
 
111
    private void getNameAddress() {
112
        //  denna funktion ska hämta data från www.arune.se/callerid/index.php?id=telenr
113
        //  meningen är att det är lättare att skriva om detta php-script om eniro/hitta.se skulle göra om
114
        //  php returnerar data xml-formaterat typ:
115
        //  <name>Katharina & Ulf Runeson</name>
116
        //  <address0>Färed Uggletorp 1</address0>
117
        //  <address1>545 90 Töreboda</address1>
118
 
119
        ArrayList rows = getWebPage(callerPhoneNr);
120
        String name = null;
121
        String address0 = null;
122
        String address1 = null;
123
 
124
        for (int i = 0; i < rows.size(); i++) {
125
            String row = (String)rows.get(i);
126
            if (name == null) {name = getPart(row,"<name>","</name>");}
127
            if (address0 == null) {address0 = getPart(row,"<address0>","</address0>");}
128
            if (address1 == null) {address1 = getPart(row,"<address1>","</address1>");}
129
            //System.out.println(row);
130
        }
131
        if (name != null) {
132
            //name = replaceSweChar(name);
133
            callerName = name;
134
            //System.out.println("namn: " + name);
135
        }
136
        if (address0 != null) {
137
            //address0 = replaceSweChar(address0);
138
            callerAddress = address0;
139
            //System.out.println("adress: " + address0);
140
        }
141
        if (address1 != null) {
142
            //address1 = replaceSweChar(address1);
143
            if (callerAddress.length() > 0) {
144
                callerAddress = callerAddress + "&#10;";
145
            }
146
            callerAddress = callerAddress + address1;
147
        }
148
    }
149
 
150
    private String replaceSweChar(String text) {
151
        //HURFAN GÖR MAN PÅ RIKTIGT?? ERSÄTT ALLA TECKEN UTOM 0-127 
152
        //MED &#char;
153
        //finns nog inbyggt i java, finns i php, se rss för posten
154
 
155
        text = text.replaceAll("å","&#229;");
156
        text = text.replaceAll("ä","&#228;");
157
        text = text.replaceAll("ö","&#246;");
158
        text = text.replaceAll("Å","&#197;");
159
        text = text.replaceAll("Ä","&#196;");
160
        text = text.replaceAll("Ö","&#214;");
161
        text = text.replaceAll("À","&#192;");
162
        text = text.replaceAll("Á","&#193;");
163
        text = text.replaceAll("Â","&#194;");
164
        text = text.replaceAll("Ã","&#195;");
165
        text = text.replaceAll("Æ","&#198;");
166
        text = text.replaceAll("Ç","&#199;");
167
        text = text.replaceAll("È","&#200;");
168
        text = text.replaceAll("É","&#201;");
169
        text = text.replaceAll("Ê","&#202;");
170
        text = text.replaceAll("Ë","&#203;");
171
        text = text.replaceAll("Ì","&#204;");
172
        text = text.replaceAll("Í","&#205;");
173
        text = text.replaceAll("Ò","&#210;");
174
        text = text.replaceAll("Ó","&#211;");
175
        text = text.replaceAll("Ø","&#216;");
176
        text = text.replaceAll("à","&#224;");
177
        text = text.replaceAll("á","&#225;");
178
        text = text.replaceAll("â","&#226;");
179
        text = text.replaceAll("ã","&#227;");
180
        text = text.replaceAll("æ","&#230;");
181
        text = text.replaceAll("ç","&#231;");
182
        text = text.replaceAll("è","&#232;");
183
        text = text.replaceAll("é","&#233;");
184
        text = text.replaceAll("ê","&#234;");
185
        text = text.replaceAll("ë","&#235;");
186
        text = text.replaceAll("ì","&#236;");
187
        text = text.replaceAll("í","&#237;");
188
        text = text.replaceAll("ò","&#242;");
189
        text = text.replaceAll("ó","&#243;");
190
        text = text.replaceAll("ø","&#248;");
191
        text = text.replaceAll("ù","&#249;");
192
        text = text.replaceAll("ú","&#250;");
193
        return text;
194
    }
195
 
196
    private ArrayList getWebPage(String id) {
197
        ArrayList rowStrings = new ArrayList();
198
 
199
        String serverURL = getServerURL();
200
 
201
        if (!serverURL.equals("")) {
202
            serverURL = serverURL + "/index.php?id=" + id;
203
            try {
204
                BufferedReader page = new BufferedReader(new InputStreamReader(new URL(serverURL).openStream()));
205
 
206
                String curLine = page.readLine();
207
                while ( curLine != null ) {
208
                    rowStrings.add(curLine);
209
                    // get the next line
210
                    curLine = page.readLine();
211
                }
212
            }
213
            catch ( Exception ex ){
214
                //_errors.println("Comunication problem with caller-address-server, exception: " + ex.getMessage());
215
                currentServer++;
216
            }
217
        }
218
 
219
        return rowStrings;
220
    }
221
 
222
    private String getServerURL() {
223
        if (currentServer == -1) {
224
            if (servers.size() == 0) {
225
                return ""; }
226
            else {
227
                currentServer = 0; }
228
        } else {
229
            //currentServer räknas upp i catch:en nedan
230
        }
231
        if (currentServer >= servers.size()) {
232
            currentServer = 0; }
233
        return (String)servers.get(currentServer);
234
    }
235
 
236
 
237
    private void fixPhoneOrt() {
238
        //om mobilnummer så sätt in en dash
239
        if (callerPhoneNr.substring(0,2).equals("07")) {
240
            callerPhoneNr = callerPhoneNr.substring(0,4) + "-" + callerPhoneNr.substring(4,callerPhoneNr.length());
241
        } else {
242
            ArrayList riktnrSource = getHTMLSource("http://www.eniro.se/riktnummer/0-9.shtml");
243
            if (riktnrSource.size() != 0) {
244
                //ortsnamn sparas mellan varven eftersom ortsnamn är på annan rad än riktnummer
245
                //String lastOrt = "";
246
                String lastNumber = "";
247
                //rota igenom alla rader i html-sourcen
248
                for (int i = 0; i < riktnrSource.size(); i++) {
249
                    String row = (String)riktnrSource.get(i);
250
 
251
                    String startstr = "<td><font size=\"2\">";
252
                    String endstr = "</font></td>";
253
 
254
                    //kolla om raden innehåller ortsnamn eller riktnummer
255
                    int start = row.indexOf(startstr);
256
                    int end = row.indexOf(endstr);
257
                    if (start > 0 && end > (start + startstr.length())) {
258
                        String sNumber = row.substring(start + startstr.length(), end);
259
                        String lastOrt = row.substring(start + startstr.length(), end);
260
                        int iNumber = 0;
261
                        try {
262
                            iNumber = Integer.parseInt(sNumber);
263
                        } catch (NumberFormatException ex) {
264
                        }
265
                        if (iNumber > 0) {
266
                            lastNumber = sNumber;
267
                        } else {
268
                            //då är det väl orsnamn:
269
                            int riktnummerlength = lastNumber.length();
270
                            if (lastNumber.equals(callerPhoneNr.substring(0,riktnummerlength))) {
271
                                //fixa dash
272
                                callerPhoneNr = callerPhoneNr.substring(0,riktnummerlength) + "-" + callerPhoneNr.substring(riktnummerlength,callerPhoneNr.length());
273
 
274
                                //byt ut åäöÅÄÖ i lastOrt mot &#229;&#228;&#252;    &#197;&#196;&#214;
275
                                lastOrt = replaceSweChar(lastOrt);
276
                                //spara ortsnamn
277
                                callerOrtsnamn = lastOrt;
278
 
279
                                break;
280
                            }
281
                        }
282
                    }
283
                }
284
            }
285
        }
286
    }
287
 
288
    private ArrayList getHTMLSource(String url) {
289
        ArrayList returndata = new ArrayList();
290
 
291
        try {
292
            BufferedReader page = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
293
 
294
            String curLine = page.readLine();
295
            while ( curLine != null ) {
296
                returndata.add(curLine);
297
                // get the next line
298
                curLine = page.readLine();
299
            }
300
        }
301
        catch ( Exception ex ){
302
            //_errors.println("Comunication problem with tv-chart-server, exception: " + ex.getMessage());
303
 
304
        }
305
 
306
        return returndata;
307
    }
308
 
309
    private String parseByte(UByte dobyte) {
310
        byte[] dummyByte = new byte[1];
311
        dummyByte[0] = dobyte.byteValue();
312
 
313
        return new String(dummyByte);
314
 
315
    }
316
 
317
    public String getPhoneNr() {
318
        return callerPhoneNr;
319
    }
320
    public String getName() {
321
        return callerName;
322
    }
323
    public String getAddress() {
324
        return callerAddress;
325
    }
326
    public String getOrtsnamn() {
327
        return callerOrtsnamn;
328
    }
329
    public String getDate() {
330
        return callDate;
331
    }
332
}