All pastes #259406 Raw Edit

Anonymous

public text v1 · immutable
#259406 ·published 2006-11-27 13:13 UTC
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%\">&nbsp;", "</td>", source);
       if(result == ""){  System.out.println("Not found."); } else { System.out.println("Schoolname extracted: "+result); data.add(result);}
       
       
       
       
       
       String result2 = dobetween("<strong>Stra&szlig;e</strong></td>    <td width=\"73%\">&nbsp;", "</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%\">&nbsp;", "</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%\">&nbsp;", "</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%\">&nbsp;", "</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%\">&nbsp;<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%\">&nbsp;<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("&auml;", "ä");
       input=input.replace("&ouml;", "ö");
       input=input.replace("&uuml;", "ü");
       input=input.replace("&Auml;", "Ä");
       input=input.replace("&Ouml;", "Ö");
       input=input.replace("&Uuml;", "Ü");
       input=input.replace("&szlig;", "ß");
       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); 
          }
       }
       
}