rendered paste body
/*
* Operator.java
*
* Created on 22. November 2006, 19:49
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package javaapplication5;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author kj09
*/
public class Operator { //Extrahiert die gewünschten Informationen aus dem Sourcecode.
/** Creates a new instance of Operator */
public Operator(String source, Workpool pool, Storage stor, int id, String surl) throws IOException {
System.out.println("Analyzing...");
List <String> data = Collections.synchronizedList(new ArrayList<String>());
List <String> findata = Collections.synchronizedList(new ArrayList<String>());
String result = dobetween("<strong>Amtliche Bezeichnung</strong></td> <td width=\"73%\"> ", "</td>", source);
if(result == ""){ System.out.println("Not found."); } else { System.out.println("Schoolname extracted: "+result); data.add(result);}
String result2 = dobetween("<strong>Straße</strong></td> <td width=\"73%\"> ", "</td>", source);
if(result2 == ""){ System.out.println("Not found."); } else { System.out.println("Street extracted: "+result2); data.add(result2);}
String result3 = dobetween("<strong>Plz Ort</strong></td> <td width=\"73%\"> ", "</td>", source);
if(result3 == ""){ System.out.println("Not found."); } else { System.out.println("Location extracted: "+result3); data.add(result3);}
String result4 = dobetween("<strong>Telefon</strong></td> <td width=\"73%\"> ", "</td>", source);
if(result4 == ""){ System.out.println("Not found."); } else { System.out.println("Telephone extracted: "+result4); data.add(result4);}
String result5 = dobetween("<strong>Fax</strong></td> <td width=\"73%\"> ", "</td>", source);
if(result5 == ""){ System.out.println("Not found."); } else { System.out.println("Fax extracted: "+result5); data.add(result5);}
String result6 = dobetween("<strong>E-Mail-Adresse</strong></td> <td width=\"73%\"> <a href=mailto:", ">", source);
if(result6 == ""){ System.out.println("Not found."); } else { System.out.println("E-Mail extracted: "+result6); data.add(result6);}
////////////ID-VERGABE!////////////////////////
//Link zur Schul-Homepage.
String result8 = dobetween("<strong>Internet</strong></td> <td width=\"73%\"> <a href=", ">", source);
if(result8 == ""){ System.out.println("Homepage not found."); } else { System.out.println("Homepage extracted: "+result8);
URLentry result8p = new URLentry(makeAbsolute(result8, surl), stor.lastrowID() );
pool.add(result8p);}
///////////////////////////////////////////////
///////////////////////////////////////////////
//Falls dies eine Schul-Homepage ist, dann werden wir mal einen Blick in das Impressum werfen.
//Link vom Impressum extrahieren:
String result9 = doregx("<a href=\"([^\"]+)\"([^>]+)>Impressum</a>", source, 1);
if(result9 == ""){ System.out.println("Impressum not found."); } else { System.out.println("Impressum extracted: "+result9);
URLentry result9p = new URLentry(makeAbsolute(result9, surl), stor.lastrowID() );
pool.add(result9p);}
//////////////////////////////////////////////
//Link von der Kontaktseite extrahieren:
String result10 = doregx("<a href=\"([^\"]+)\"([^>]+)>Kontakt</a>", source, 1);
if(result10 == ""){ } else { System.out.println("Kontakt-Link extracted: "+result10);
URLentry result10p = new URLentry(makeAbsolute(result10, surl), id );
pool.add(result10p); }
////////////
////////////
//Falls dies die Impressum oder Kontakt-Site ist:
//Leiter / in .. aus der Seite extrahieren:
String result11 = doregx("Schulleitung:(.*?)</(.*?)", source, 1);
if(result11 == ""){ } else { System.out.println("Leiter extracted: "+result11);
findata.add(result11);
}
////////////
////////////
//Falls dies die Impressum oder Kontakt-Site ist:
//Leiter / in .. aus der Seite extrahieren:
String result12 = doregx("Schulleitung:(.*?)</(.*?)", source, 1);
if(result12 == ""){ } else { System.out.println("Leiter extracted: "+result12);
findata.add(result12);
}
////////////
////////////
//Falls dies die Impressum oder Kontakt-Site ist:
//Leiter / in .. aus der Seite extrahieren:
String result13 = doregx("Schulleitung:(.*?)</(.*?)", source, 1);
if(result13 == ""){ } else { System.out.println("Direktor/in extracted: "+result13);
findata.add(result13);
}
////////////
////////////
//Falls dies die Impressum oder Kontakt-Site ist:
//Leiter / in .. aus der Seite extrahieren:
String result14 = doregx("Ostd(.*?)<", source, 1);
if(result14 == ""){ } else { System.out.println("OStd extracted: "+result14);
findata.add(result14);
}
////////////
//Überführe die Informationen (NICHT die Links für den Pool) in die Storage:
String[] dataarr = data.toArray(new String[0]);
String[] findataarr = findata.toArray(new String[0]);
if(dataarr.length > 0){
stor.add(dataarr);
}
//Falls diese Daten zu einem schon existierenden Datensatz hinzugefügt werden sollen.
if(findataarr.length > 0){
stor.add(findataarr, id);
}
System.out.println("Analyses done.");
}
private String dobetween(String begin, String end, String source){
//First of all we will create a single-line-doc:
source = source.replace("\n", "");
source = source.replace("\r\n", "");
Pattern p = null;
Matcher m = null;
String result = "";
try {
p = Pattern.compile(begin+"(.*?)"+end);
m = p.matcher(source);
}catch(IllegalStateException ex){
result = "";
}
if(m.find()){ result = m.group(1);
return(transformHTML(result)); } else { return(""); }
}
private String doregx(String regex, String source, int group){
//First of all we will create a single-line-doc:
System.out.println("Doing regex");
source = source.replace("\n", "");
source = source.replace("\r\n", "");
Pattern p = null;
Matcher m = null;
String result = "";
try {
p = Pattern.compile(regex);
m = p.matcher(source);
}catch(IllegalStateException ex){
result = "";
}
if(m.find()){ result = m.group(group);
return(transformHTML(result)); } else { return(""); }
}
private String transformHTML(String input){
input=input.replace("ä", "ä");
input=input.replace("ö", "ö");
input=input.replace("ü", "ü");
input=input.replace("Ä", "Ä");
input=input.replace("Ö", "Ö");
input=input.replace("Ü", "Ü");
input=input.replace("ß", "ß");
return(input);
}
private String makeAbsolute(String relative, String root){
//First we check if it is nessecary to make it absolute at all:
if(!relative.contains("http://")){
//root is the absolute URL
//relative is the relative URL
System.out.println("Root at start: "+root);
System.out.println("Relative at start: "+relative);
root = root.substring(0, root.lastIndexOf("/"));
while(relative.contains("../")){
root = root.substring(0, root.lastIndexOf("/"));
relative = relative.substring(relative.indexOf("/")+1, relative.length());
System.out.println("root: "+root);
System.out.println("relative: "+relative);
}
return(root+"/"+relative);
} else { //It's not nessecary to transform the thing:
return(relative);
}
}
}