You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.7 KiB
49 lines
1.7 KiB
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.ListCommand;
|
|
import com.example.datacollect.repository.ArticleRepository;
|
|
import com.example.datacollect.strategy.StrategyFactory;
|
|
import com.example.datacollect.view.ConsoleView;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
public class CrawlerController {
|
|
private final Map<String, Command> commands = new HashMap<>();
|
|
private final ConsoleView view;
|
|
private final ArticleRepository repository;
|
|
|
|
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));
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|