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.

64 lines
2.1 KiB

package command;
import model.Paper;
import repository.PaperRepository;
import view.ConsoleView;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class ListCommand implements Command {
private ConsoleView view;
public ListCommand(ConsoleView view) {
this.view = view;
}
@Override
public void execute(String[] args, PaperRepository repository) {
try {
Map<String, List<Paper>> papersByPlatform = repository.loadAllPapersGroupedByPlatform();
if (papersByPlatform.isEmpty()) {
view.showInfo("暂无论文,请先执行 crawl 命令爬取论文");
} else {
int totalCount = 0;
for (Entry<String, List<Paper>> entry : papersByPlatform.entrySet()) {
totalCount += entry.getValue().size();
}
view.showInfo("当前已获取 " + totalCount + " 篇论文,分布在 " + papersByPlatform.size() + " 个平台:");
System.out.println();
int globalIndex = 1;
for (Entry<String, List<Paper>> entry : papersByPlatform.entrySet()) {
String platformName = entry.getKey();
List<Paper> papers = entry.getValue();
System.out.println("【" + platformName + "】 (" + papers.size() + " 篇)");
System.out.println("-".repeat(50));
for (int i = 0; i < papers.size(); i++) {
Paper paper = papers.get(i);
view.showPaperInfo(globalIndex, paper);
globalIndex++;
}
System.out.println();
}
}
} catch (Exception e) {
view.showError("查询失败: " + e.getMessage());
}
}
@Override
public String getDescription() {
return "查询已获取的论文列表";
}
@Override
public String getName() {
return "list";
}
}