/* * PRCalculator.java * * Created on den 9 oktober 2002, 14:49 */ import java.util.*; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.xml.sax.SAXException; /** * * @author h&m */ public class PRCalculator { Map pages = new TreeMap(); private boolean printIterations; private PageRank pageRanker = null; /** Creates a new instance of Test */ public PRCalculator() { } /** Creates a new instance of PRCalculator */ public PRCalculator(boolean printIterations, String XMLfile) { this.printIterations = printIterations; String xmlFile = "file:///xerces-4_0_5/data/personal.xml"; try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(XMLfile); if(! document.getDoctype().getSystemId().equals("http://www.dsv.su.se/~henrik-j/star66/Pages.dtd")) { System.err.println(XMLfile + " måste använda http://www.dsv.su.se/~henrik-j/star66/Pages.dtd"); System.exit(2); } PagesScanner ps = new PagesScanner(this, document); ps.visitDocument(); } catch (FactoryConfigurationError e) { System.err.println("unable to get a document builder factory"); } catch (ParserConfigurationException e) { System.err.println("parser was unable to be configured"); } catch (SAXException e) { System.err.println("parsing error"); } catch (IOException e) { System.err.println("i/o error"); } } public int getIterations() { return pageRanker.getIterations(); } public String toString() { String tmp = new String(); Iterator iter = pages.values().iterator(); while(iter.hasNext()) tmp += ((Page) iter.next()).toString() + " "; return tmp; } public void calculatePR() { pageRanker = new PageRank(printIterations); pageRanker.addPages(pages.values()).calculatePR(); } public void addPage(String name) { pages.put(name, new Page(name)); } public void addIncomingPage(String from, String to) { ((Page) pages.get(from)).incOutgoing(); ((Page) pages.get(to)).addIngoing((Page) pages.get(from)); //ingoing.add(pages.get(from)); } /** * @param args the command line arguments */ public static void main(String[] args) { if(args.length == 0) { System.out.println("Användning: PRCalculator [-noPrint | -np] "); System.exit(1); } else { boolean printIter = true; String file = null; for(int i = 0; i < args.length; i++) { if(args[i].equals("-noPrint") || args[i].equals("-np")) printIter = false; else if(args[i].equals("-?") || args[i].equals("-h")) { System.out.println("Användning: PRCalculator [-noPrint | -np] "); System.exit(0); } else file = args[i]; } if(file != null) { PRCalculator prc = new PRCalculator(printIter, file); prc.calculatePR(); System.out.println("\nAntal iterationer: " + prc.getIterations()); System.out.println("\nResultat:\n" + prc.toString()); } else { System.err.println("inget filnamn medskickat"); System.exit(3); } } System.exit(0); } }