package com.example.datacollect.controller; import com.example.datacollect.command.AnalyzeCommand; import com.example.datacollect.command.Command; import com.example.datacollect.command.CrawlCommand; import com.example.datacollect.command.ExitCommand; import com.example.datacollect.command.HelpCommand; import com.example.datacollect.command.HistoryCommand; import com.example.datacollect.command.ListCommand; import com.example.datacollect.repository.ArticleRepository; import com.example.datacollect.strategy.StrategyFactory; import com.example.datacollect.view.ConsoleView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CrawlerController { private final Map commands = new HashMap<>(); private final ConsoleView view; private final ArticleRepository repository; private final List commandHistory = new ArrayList<>(); public CrawlerController(ConsoleView view, ArticleRepository repository, StrategyFactory strategyFactory) { this.view = view; this.repository = repository; register(new HelpCommand(view)); register(new ListCommand(view)); register(new CrawlCommand(view, strategyFactory)); register(new AnalyzeCommand(view, strategyFactory)); register(new ExitCommand(view)); register(new HistoryCommand(view, commandHistory)); } private void register(Command command) { commands.put(command.getName(), command); } public void handle(String input) { String text = input == null ? "" : input.trim(); if (text.isEmpty()) { return; } commandHistory.add(text); String[] args = text.split("\\s+"); String cmdName = args[0].toLowerCase(); Command command = commands.get(cmdName); if (command == null) { view.printError("Unknown command: " + cmdName); return; } command.execute(args, repository); } }