Koden till Pc-applikationen.
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){}
}
}
/*
*
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;
}
}
/*
* 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;
}
}
/*
*
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) { }
}
}
/*
*
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();}
}
}
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();
}
}