Add collected pages after URL fetcher is done.
[arachne.git] / src / net / pterodactylus / arachne / core / Core.java
index 9e3f1a5..8afe014 100644 (file)
@@ -13,6 +13,7 @@ import java.util.concurrent.Executors;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import net.pterodactylus.arachne.parser.ParserFactory;
 import de.ina.util.service.AbstractService;
 import de.ina.util.thread.DumpingThreadFactory;
 import de.ina.util.validation.Validation;
@@ -41,6 +42,9 @@ public class Core extends AbstractService {
        // INTERNAL MEMBERS
        //
 
+       /** The parser factory. */
+       private ParserFactory parserFactory = new ParserFactory();
+
        /** Thread pool for the URL fetches. */
        private Executor urlFetcherExecutor = Executors.newFixedThreadPool(1, new DumpingThreadFactory("URLFetcher-"));
 
@@ -73,6 +77,7 @@ public class Core extends AbstractService {
         */
        public void addPage(URL url) {
                Validation.begin().isNotNull("url", url).check().isEqual("url.getHost()", url.getHost(), (Object) nodeHost).isEqual("url.getPort()", url.getPort(), nodePort).check();
+               addPage(Page.fromURL(url));
        }
 
        /**
@@ -105,7 +110,7 @@ public class Core extends AbstractService {
        //
 
        /**
-        * {@inheritdoc}
+        * {@inheritDoc}
         *
         * @see de.ina.util.service.AbstractService#serviceRun()
         */
@@ -134,11 +139,19 @@ public class Core extends AbstractService {
                                logger.log(Level.INFO, "Skipping “" + nextPage + "”.");
                                continue;
                        }
-                       URLFetcher urlFetcher;
+                       final URLFetcher urlFetcher;
                        try {
                                logger.log(Level.INFO, "Fetching “" + nextURL + "”...");
-                               urlFetcher = new URLFetcher(nextURL);
-                               urlFetcherExecutor.execute(urlFetcher);
+                               urlFetcher = new URLFetcher(parserFactory, nextURL);
+                               urlFetcherExecutor.execute(new Runnable() {
+
+                                       public void run() {
+                                               urlFetcher.run();
+                                               for (Page page : urlFetcher.getCollectedPages()) {
+                                                       addPage(page);
+                                               }
+                                       }
+                               });
                        } catch (NoSuchAlgorithmException nsae1) {
                                logger.log(Level.SEVERE, "Could not get “SHA-256” message digest!", nsae1);
                        }