Subversion Repositories HomeAutomation

Rev

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

  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. }
  333.