Koden till Pc-applikationen.

 

 

Database package. 1

db.dBHandler 1

db.PhoneCall 3

Serial communication package. 3

serial.Main. 3

serial.Serial 4

Web communication package. 6

Web.GetSource. 6

web.WebLooper 6

 

Database package

db.dBHandler

package db;

 

import java.sql.*;

 

 

public class DBHandler {

    private String DataSource = "localhost";

    private String Database   = "phone";

    private String UserID     = "root";

    private String Password   = "Grupp10Och12";

    private Connection conn;

   

    public DBHandler() {

       

        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

        } catch (Exception ex) {

            ex.printStackTrace();

        }

       

        try {

            conn = DriverManager.getConnection("jdbc:mysql://localhost/" + Database +  "?user=" + UserID + "&password=" + Password + "");

        } catch (Exception ex) {

            ex.printStackTrace();

        }

    }

   

    public void SetupBogusDB() {

        ClearTables();

        AddNumber("046-189433","Jörgen Nilsson");

        AddNumber("046-121212","Taxi Lund");

        AddNumber("046-150000","Lillemans M C");

        AddCall("046-189433",201);

        AddCall("046-121212",600);

    }

   

    public PhoneCall GetLastCall() {

        String query = "SELECT calls.*, numbers.owner "

                + "FROM calls, numbers "

                + "WHERE calls.Nbr = numbers.Nbr "

                + "ORDER BY StartTime DESC";

        PhoneCall phoneCall = null;

        try {

            Statement stmt = conn.createStatement();

           

            ResultSet rs = stmt.executeQuery(query);

            if(rs.next()){

                try {

                    phoneCall = new PhoneCall(rs.getString("Nbr"),

                            rs.getString("Owner"),

                            rs.getString("StartTime"),

                            rs.getInt("Duration"));

                } catch(Exception e1){

                    e1.printStackTrace();

                }

            }

           

            stmt.close();

        } catch(Exception e2){

            e2.printStackTrace();

        }

        return phoneCall;

    }

   

    public PhoneCall GetCall(int record) {

        String query = "SELECT calls.*, numbers.owner "

                + "FROM calls, numbers "

                + "WHERE calls.Nbr = numbers.Nbr "

                + "LIMIT " + record + "," + (record+1) + "";

        PhoneCall phoneCall = null;

        try {

            Statement stmt = conn.createStatement();

           

            ResultSet rs = stmt.executeQuery(query);

            if(rs.next()){

                try {

                    phoneCall = new PhoneCall(rs.getString("Nbr"),

                            rs.getString("Owner"),

                            rs.getString("StartTime"),

                            rs.getInt("Duration"));

                } catch(Exception e1){

                    e1.printStackTrace();

                }

            }

           

            stmt.close();

        } catch(Exception e2){

            e2.printStackTrace();

        }

        return phoneCall;

    }

   

    public void AddNumber(String nbr, String owner) {

        String query = "SELECT * FROM numbers WHERE `Nbr` = '" + nbr + "';";

        boolean numberExists = false;

        Statement stmt;

        try {

            stmt = conn.createStatement();

            ResultSet rs = stmt.executeQuery(query);

            numberExists = rs.next();

            stmt.close();

        } catch(Exception e){}

        

       

        if(numberExists) {

            query = "UPDATE numbers SET "

                    + "`Owner` = '" + owner + "',"

                    + "`LastUpdated` = NOW() "

                    + "WHERE `Nbr` = '" + nbr + "'";

        } else {

            query = "INSERT INTO numbers(`Nbr`,`Owner`,`LastUpdated`) "

                    + "VALUES('" + nbr + "','" + owner + "',NOW());";

        }

        try {

            stmt = conn.createStatement();

            stmt.executeUpdate(query);

            stmt.close();

        } catch(Exception e){}

    }

   

    public void AddCall(String nbr, int durSec) {

        String query = "INSERT INTO calls(`Nbr`,`StartTime`,`Duration`) "

                + "VALUES ('" + nbr + "', (NOW() - INTERVAL " + durSec + " SECOND),'" + durSec + "');";

        try {

            Statement stmt = conn.createStatement();

            stmt.executeUpdate(query);

            stmt.close();

        } catch(Exception e){}

    }

   

    public void ClearTables() {

        String query = "DELETE FROM calls;" +

                " DELETE FROM numbers;";

        try {

            Statement stmt = conn.createStatement();

            stmt.executeUpdate(query);

            stmt.close();

        } catch(Exception e){}

    }

   

}

 

db.PhoneCall

 

/*

 * PhoneCall.java

 *

 * Created on den 10 maj 2005, 10:45

 */

 

package db;

 

/**

 *

 * @author digp10

 */

public class PhoneCall {

   

    public String number;

    public String owner;

    public String startTime;

    public int duration;

   

    public PhoneCall(String number, String owner, String startTime, int duration){

        this.number = number;

        this.owner = owner;

        this.startTime = startTime;

        this.duration = duration;

    }

   

    public String toString() {

        return "Number=" + number + ", Owner=" + owner + ", StartTime=" + startTime + ", duration=" + duration;

    }

   

}

 

 

 

Serial communication package

serial.Main

 

/*

 * Main.java

 *

 * Created on den 5 maj 2005, 09:19

 */

 

package serial;

 

import db.DBHandler;

import db.PhoneCall;

import web.WebLookup;

 

 

 

/**

 *

 * @author digp10

 */

public class Main {

   

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        DBHandler db = new DBHandler();

        Serial sio = new Serial();

        String s = null;

       

        while(true){

           

            s = sio.readInput();

           

            try {

                s = s.split("=")[1];

                String[] data = s.split(";");

               

                try {

                   

                    if(data[0].equals("#") ) {

                        String number = data[3];

                        if(!number.equals("")){

                            String name = WebLookup.lookupNumber(number);

                            int durSec = getDuration(data[1],data[2]);

                            db.AddNumber(number, name);

                            db.AddCall(number, durSec);

                            System.out.println("-- Added phone call to database:");

                            System.out.println("--- Name= " + name);

                            System.out.println("--- Number= " + number);

                        }

                    } else if(data[0].equals("&")) {

                        PhoneCall phone = db.GetLastCall();

                        sio.writeOutput(phone);

                    }

                } catch(Exception e) {

                    e.printStackTrace();

                }

            } catch(Exception e) {

                //System.out.println("Err: Faulty communication protocol. May be caused by disturbances on serial interface");

            }

        }

       

        //sio.close();

       

    }

   

    static int getDuration(String startTime, String endTime){

        int hh = (Integer.parseInt(endTime.substring(0,2)) + 24 - Integer.parseInt(startTime.substring(0,2)))%24;

        int mm = Integer.parseInt(endTime.substring(2,4)) - Integer.parseInt(startTime.substring(2,4));

        int ss = Integer.parseInt(endTime.substring(4,6)) - Integer.parseInt(startTime.substring(4,6));

        return hh*3600 + mm*60 + ss;

    }

   

}

 

serial.Serial

 

/*

 * SetUpSerial.java

 *

 * Created on den 5 maj 2005, 09:42

 */

 

package serial;

 

import db.*;

import javax.comm.*;

import java.io.*;

 

/**

 *

 * @author digp10

 */

public class Serial {

   

    private OutputStream output;

    private InputStream input;

    SerialPort serialPort = null;

    byte[] b = new byte[30];

    //private DBHandler db;

   

    /** Creates a new instance of SetUpSerial */

    public Serial() {

        try{

            CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1");

            serialPort = (SerialPort)portId.open("SetUpSerial",1);

            serialPort.setSerialPortParams(19200, SerialPort.DATABITS_8,

                                           SerialPort.STOPBITS_1,

                                           SerialPort.PARITY_NONE);     

            serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_XONXOFF_OUT);     

            serialPort.disableReceiveThreshold();

            serialPort.disableReceiveTimeout();

            serialPort.setDTR(false);

            serialPort.setRTS(false);

           

            System.out.println("-- Serial port opened");

 

            output = serialPort.getOutputStream();

            input = serialPort.getInputStream();

        }

        catch(Exception e){

            System.out.println(e.getMessage());

        }      

    }

   

    public void close() {

         try {

            input.close();

            output.close();

        }catch(Exception e){}

    }

   

    public String readInput() {

        StringBuilder sb = new StringBuilder();

        try{

            int kuk = input.read(b);

            for(int i = 0; i<kuk; i++){

                if(i >= 2){

                    sb.append((char)((b[i]>>2) & 0x3F));

                }

            }

           

          

        }catch(Exception e){}

        return sb.toString();

    }

    public void writeOutput(PhoneCall phone){

        String number = phone.number;

        String owner = phone.owner;

        String startTime = phone.startTime;

        Integer dummy = new Integer(phone.duration);

        String duration = Integer.toString(dummy);

       

        String sendData = number + ";" + owner + ";=";

       

        byte[] b = sendData.getBytes();

 

        try {

            output.write(b);

            System.out.println("-- Last call sent to radio unit");

        }catch(Exception e) { }

  

   

    }

   

}

 

 

 

Web communication package

 

Web.GetSource

 

/*

 * GetSource.java

 *

 * Created on den 10 maj 2005, 11:32

 */

 

package web;

 

/**

 *

 * @author digp10

 */

public class GetSource {

   

    public static void main(String args[]){

    try{

        System.out.println(WebLookup.lookupNumber("0462111498"));

    }catch(Exception e){e.printStackTrace();}

    }   

}

 

web.WebLooper

 

package web;

 

import java.io.InputStream;

import java.net.*;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

public class WebLookup {

    public static String lookupNumber(String nbr) {

        if(nbr.length() < 8) {

            nbr = "046"+nbr;

        }

        String name = "";  

        String source = WebLookup.getWebCode(true, nbr);

      

        String pattern = "<!-- \\s start \\s result \\s --> .* <b>(.*?)</b> \\s <b>(.*?)</b><br>";

       

        Pattern p = Pattern.compile(pattern, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE | Pattern.COMMENTS | Pattern.DOTALL);

 

        Matcher m = p.matcher(source);

       

        while(m.find()) {

          name = m.group(1) + " " + m.group(2);

        }

       

        if(name.equals("")){

            source = WebLookup.getWebCode(false, nbr);

            pattern = "query.what=get.info.search.word=" + nbr + ".company.name=.where=.advert.code= .*? .ax=.>(.*?)</a>";       

           

            p = Pattern.compile(pattern, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE | Pattern.COMMENTS | Pattern.DOTALL);

            m = p.matcher(source);

            if(m.find()) {

                name = m.group(1);

            }

        }

        if (name.equals("")) {

            name = "No data found";

        }

        return name;

    }

   

    private static String getWebCode(boolean privatePerson, String nbr){

        // The query address

        String webAddress = "";

        if(privatePerson) {

            webAddress = "http://privatpersoner.eniro.se/query?stq=0&searchword=" + nbr + "&searcharea=&what=wphone";

        }else{

            webAddress = "http://gulasidorna.eniro.se/query?search_word=" + nbr + "&where=&what=yp&newSearch=1";

        }

        StringBuilder sb = null;

        try{

            // used to build entire input

            sb  = new StringBuilder();

           

            // used on each read operation

            byte[] buf = new byte[8192];

           

            URL url = new URL(webAddress);

            URLConnection hurl = url.openConnection();

            // we will read data via the response stream

            InputStream resStream = hurl.getInputStream();

            String tempString = null;

            int count = 0;

            do

            {

                // fill the buffer with data

                count = resStream.read(buf, 0, buf.length);

                // make sure we read some data

                if (count > 0) {

                    // translate from bytes to ASCII text

                    tempString = new String(buf,0,count,"ISO-8859-1");

                    // continue building the string

                    sb.append(tempString);

                }

            }

            while (count > 0); // any more data to read?

          

        }catch(Exception e){e.printStackTrace();}

       

        return sb.toString().trim();      

    }

}