Browse Source

better command output

master
283375 1 month ago
parent
commit
3c7a019e5a
Failed to extract signature
  1. 6
      src/main/java/internal/hw/crawler/Main.java
  2. 8
      src/main/java/internal/hw/crawler/commands/CrawlCommand.java
  3. 27
      src/main/java/internal/hw/crawler/commands/HelpCommand.java
  4. 7
      src/main/java/internal/hw/crawler/commands/ListCommand.java
  5. 8
      src/main/java/internal/hw/crawler/views/CommandOutput.java
  6. 22
      src/main/java/internal/hw/crawler/views/ConsoleView.java

6
src/main/java/internal/hw/crawler/Main.java

@ -14,9 +14,9 @@ public class Main {
ArticleRepository repository = new ArticleRepository(); ArticleRepository repository = new ArticleRepository();
controller.registerCommand(new ExitCommand()); controller.registerCommand(new ExitCommand());
controller.registerCommand(new CrawlCommand(repository)); controller.registerCommand(new CrawlCommand(repository, view));
controller.registerCommand(new ListCommand(repository)); controller.registerCommand(new ListCommand(repository, view));
controller.registerCommand(new HelpCommand(controller.getCommands())); controller.registerCommand(new HelpCommand(controller.getCommands(), view));
view.printSuccess("Welcome to crawler. Type `help` for a list of available commands."); view.printSuccess("Welcome to crawler. Type `help` for a list of available commands.");
while (true) { while (true) {

8
src/main/java/internal/hw/crawler/commands/CrawlCommand.java

@ -4,6 +4,7 @@ import internal.hw.crawler.models.Article;
import internal.hw.crawler.repositories.ArticleRepository; import internal.hw.crawler.repositories.ArticleRepository;
import internal.hw.crawler.strategies.crawl.CrawlStrategy; import internal.hw.crawler.strategies.crawl.CrawlStrategy;
import internal.hw.crawler.strategies.crawl.CrawlStrategyFactory; import internal.hw.crawler.strategies.crawl.CrawlStrategyFactory;
import internal.hw.crawler.views.CommandOutput;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
@ -12,10 +13,12 @@ import java.util.List;
public class CrawlCommand implements Command { public class CrawlCommand implements Command {
private final ArticleRepository repository; private final ArticleRepository repository;
private final CommandOutput out;
private final CrawlStrategyFactory crawlStrategyFactory = new CrawlStrategyFactory(); private final CrawlStrategyFactory crawlStrategyFactory = new CrawlStrategyFactory();
public CrawlCommand(ArticleRepository repository) { public CrawlCommand(ArticleRepository repository, CommandOutput out) {
this.repository = repository; this.repository = repository;
this.out = out;
} }
@Override @Override
@ -35,7 +38,7 @@ public class CrawlCommand implements Command {
URL url = new URL(urlRaw); URL url = new URL(urlRaw);
CrawlStrategy strategy = crawlStrategyFactory.getStrategy(url); CrawlStrategy strategy = crawlStrategyFactory.getStrategy(url);
if (strategy == null) { if (strategy == null) {
System.err.println("Unsupported URL: " + urlRaw); out.error("Unsupported URL: " + urlRaw);
return; return;
} }
@ -44,6 +47,7 @@ public class CrawlCommand implements Command {
for (Article article : articles) { for (Article article : articles) {
repository.add(article); repository.add(article);
} }
out.success(String.format("Crawled %d articles from %s", articles.size(), urlRaw));
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

27
src/main/java/internal/hw/crawler/commands/HelpCommand.java

@ -1,13 +1,17 @@
package internal.hw.crawler.commands; package internal.hw.crawler.commands;
import internal.hw.crawler.views.CommandOutput;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class HelpCommand implements Command { public class HelpCommand implements Command {
private final Map<String, Command> commands; private final Map<String, Command> commands;
private final CommandOutput out;
public HelpCommand(Map<String, Command> commands) { public HelpCommand(Map<String, Command> commands, CommandOutput out) {
this.commands = commands; this.commands = commands;
this.out = out;
} }
@Override @Override
@ -32,34 +36,33 @@ public class HelpCommand implements Command {
} }
private void showAll() { private void showAll() {
System.out.println("Available commands:"); out.info("Available commands:");
for (Command cmd : commands.values()) { for (Command cmd : commands.values()) {
System.out.printf(" %s", cmd.getName()); out.print(" " + cmd.getName());
System.out.println();
} }
System.out.println("Type `help <command>` to show detailed help for a specific command."); out.info("Type `help <command>` to show detailed help for a specific command.");
} }
private void showDetail(String name) { private void showDetail(String name) {
Command cmd = commands.get(name); Command cmd = commands.get(name);
if (cmd == null) { if (cmd == null) {
System.out.println("Unknown command: " + name); out.error("Unknown command: " + name);
return; return;
} }
System.out.println("Command: " + cmd.getName()); out.info("Command: " + cmd.getName());
List<CommandArg> cmdArgs = cmd.getArgs(); List<CommandArg> cmdArgs = cmd.getArgs();
if (cmdArgs.isEmpty()) { if (cmdArgs.isEmpty()) {
System.out.println(" No arguments."); out.print(" No arguments.");
return; return;
} }
System.out.println("Arguments:"); out.info("Arguments:");
for (CommandArg arg : cmdArgs) { for (CommandArg arg : cmdArgs) {
System.out.printf(" %s %s %s%n", out.print(String.format(" %s %s %s",
arg.required() ? "[R]" : " ", arg.required() ? "[Required]" : " ",
arg.name(), arg.name(),
arg.description()); arg.description()));
} }
} }
} }

7
src/main/java/internal/hw/crawler/commands/ListCommand.java

@ -2,12 +2,15 @@ package internal.hw.crawler.commands;
import internal.hw.crawler.models.Article; import internal.hw.crawler.models.Article;
import internal.hw.crawler.repositories.ArticleRepository; import internal.hw.crawler.repositories.ArticleRepository;
import internal.hw.crawler.views.CommandOutput;
public class ListCommand implements Command { public class ListCommand implements Command {
private final ArticleRepository articleRepository; private final ArticleRepository articleRepository;
private final CommandOutput out;
public ListCommand(ArticleRepository articleRepository) { public ListCommand(ArticleRepository articleRepository, CommandOutput out) {
this.articleRepository = articleRepository; this.articleRepository = articleRepository;
this.out = out;
} }
@Override @Override
@ -18,7 +21,7 @@ public class ListCommand implements Command {
@Override @Override
public void execute(String[] args) { public void execute(String[] args) {
for (Article article : articleRepository.getAll()) { for (Article article : articleRepository.getAll()) {
System.out.println(article); out.print(article.toString());
} }
} }
} }

8
src/main/java/internal/hw/crawler/views/CommandOutput.java

@ -0,0 +1,8 @@
package internal.hw.crawler.views;
public interface CommandOutput {
void print(String msg);
void info(String msg);
void success(String msg);
void error(String msg);
}

22
src/main/java/internal/hw/crawler/views/ConsoleView.java

@ -2,7 +2,7 @@ package internal.hw.crawler.views;
import java.util.Scanner; import java.util.Scanner;
public class ConsoleView { public class ConsoleView implements CommandOutput {
private static final String ANSI_RESET = "\u001B[0m"; private static final String ANSI_RESET = "\u001B[0m";
private static final String ANSI_GREEN = "\u001B[32m"; private static final String ANSI_GREEN = "\u001B[32m";
private static final String ANSI_RED = "\u001B[31m"; private static final String ANSI_RED = "\u001B[31m";
@ -15,6 +15,11 @@ public class ConsoleView {
return scanner.nextLine(); return scanner.nextLine();
} }
@Override
public void print(String msg) {
System.out.println(msg);
}
public void printSuccess(String msg) { public void printSuccess(String msg) {
System.out.println(ANSI_GREEN + msg + ANSI_RESET); System.out.println(ANSI_GREEN + msg + ANSI_RESET);
} }
@ -26,4 +31,19 @@ public class ConsoleView {
public void printInfo(String msg) { public void printInfo(String msg) {
System.out.println(ANSI_BLUE + msg + ANSI_RESET); System.out.println(ANSI_BLUE + msg + ANSI_RESET);
} }
@Override
public void success(String msg) {
printSuccess(msg);
}
@Override
public void error(String msg) {
printError(msg);
}
@Override
public void info(String msg) {
printInfo(msg);
}
} }

Loading…
Cancel
Save