/* * 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 data = Collections.synchronizedList(new ArrayList()); List findata = Collections.synchronizedList(new ArrayList()); String result = dobetween("Amtliche Bezeichnung  ", "", source); if(result == ""){ System.out.println("Not found."); } else { System.out.println("Schoolname extracted: "+result); data.add(result);} String result2 = dobetween("Straße  ", "", source); if(result2 == ""){ System.out.println("Not found."); } else { System.out.println("Street extracted: "+result2); data.add(result2);} String result3 = dobetween("Plz Ort  ", "", source); if(result3 == ""){ System.out.println("Not found."); } else { System.out.println("Location extracted: "+result3); data.add(result3);} String result4 = dobetween("Telefon  ", "", source); if(result4 == ""){ System.out.println("Not found."); } else { System.out.println("Telephone extracted: "+result4); data.add(result4);} String result5 = dobetween("Fax  ", "", source); if(result5 == ""){ System.out.println("Not found."); } else { System.out.println("Fax extracted: "+result5); data.add(result5);} String result6 = dobetween("E-Mail-Adresse  ", 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("Internet  ", 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("]+)>Impressum", 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("]+)>Kontakt", 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:(.*?) 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); } } }