package com.crawler.controller; import java.util.List; import com.crawler.factory.StrategyFactory; import com.crawler.model.Article; import com.crawler.repository.ArticleRepository; import com.crawler.strategy.CrawlStrategy; import com.crawler.util.DataPersistence; import com.crawler.view.ConsoleView; public class CrawlerController { private final ArticleRepository repository; private final ConsoleView view; public CrawlerController(ArticleRepository repository, ConsoleView view) { this.repository = repository; this.view = view; loadSavedData(); } private void loadSavedData() { List
savedArticles = DataPersistence.loadArticles(); if (!savedArticles.isEmpty()) { repository.saveAll(savedArticles); view.displayInfo("Loaded " + savedArticles.size() + " saved articles"); } } public void crawl(String url, String strategyName) throws Exception { if (url == null || url.trim().isEmpty()) { throw new IllegalArgumentException("URL cannot be empty"); } if (!url.startsWith("http://") && !url.startsWith("https://")) { url = "https://" + url; } if (repository.existsByUrl(url)) { view.displayWarning("URL already crawled: " + url); return; } view.displayInfo("Crawling: " + url); view.displayInfo("Using strategy: " + strategyName); CrawlStrategy strategy = StrategyFactory.getStrategy(strategyName); List
articles = strategy.crawl(url); for (Article article : articles) { repository.save(article); view.displaySuccess("Crawled: " + article.getTitle()); } saveData(); } public void listArticles() { List
articles = repository.findAll(); view.displayArticleList(articles); } public void saveData() { List
articles = repository.findAll(); DataPersistence.saveArticles(articles); } public void loadData() { repository.deleteAll(); List
savedArticles = DataPersistence.loadArticles(); repository.saveAll(savedArticles); } }