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.
43 lines
1.5 KiB
43 lines
1.5 KiB
package com.example.moviecli.controller;
|
|
|
|
import com.example.moviecli.command.*;
|
|
import com.example.moviecli.repository.MovieRepository;
|
|
import com.example.moviecli.strategy.MovieStrategyFactory;
|
|
import com.example.moviecli.view.ConsoleView;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
public class MovieController {
|
|
private final Map<String, Command> commands = new HashMap<>();
|
|
private final ConsoleView view;
|
|
private final MovieRepository repository;
|
|
|
|
public MovieController(ConsoleView view, MovieRepository repository, MovieStrategyFactory factory) {
|
|
this.view = view;
|
|
this.repository = repository;
|
|
register(new CrawlCommand(view, factory));
|
|
register(new AutoCommand(view, factory));
|
|
register(new ListCommand(view));
|
|
register(new SearchCommand(view));
|
|
register(new StatCommand(view));
|
|
register(new ExportCommand(view));
|
|
register(new HelpCommand(view));
|
|
register(new ExitCommand(view));
|
|
}
|
|
|
|
private void register(Command cmd) {
|
|
commands.put(cmd.getName(), cmd);
|
|
}
|
|
|
|
public void handle(String input) {
|
|
if (input == null || input.trim().isEmpty()) return;
|
|
String[] parts = input.trim().split("\\s+");
|
|
String cmdName = parts[0].toLowerCase();
|
|
Command cmd = commands.get(cmdName);
|
|
if (cmd == null) {
|
|
view.printError("未知命令:" + cmdName + ",输入 help 查看帮助。");
|
|
return;
|
|
}
|
|
cmd.execute(parts, repository);
|
|
}
|
|
}
|