content: package javarepl.console.commands;
  
  import javarepl.Evaluator;
  import javarepl.completion.CommandCompleter;
  import javarepl.console.ConsoleLogger;
  
  import java.io.File;
  import java.io.FileOutputStream;
  import java.net.URL;
  
  import static com.googlecode.totallylazy.Streams.copyAndClose;
  import static com.googlecode.totallylazy.Strings.startsWith;
  import static java.lang.String.format;
  import static javarepl.Utils.*;
  
  public final class AddToClasspath extends Command {
      private static final String COMMAND = ":cp";
      private final Evaluator evaluator;
      private final ConsoleLogger logger;
  
      public AddToClasspath(Evaluator evaluator, ConsoleLogger logger) {
          super(COMMAND + " <path> - includes given file or directory in the classpath", startsWith(COMMAND), new CommandCompleter(COMMAND));
          this.evaluator = evaluator;
          this.logger = logger;
      }
  
      public void execute(String expression) {
          String path = parseStringCommand(expression).second().getOrNull();
          try {
              URL url = resolveURL(path);
  
              if (isWebUrl(url)) {
                  logger.success(format("Downloading %s...", path));
  
                  File outputFile = new File(evaluator.outputDirectory(), randomIdentifier("external"));
                  copyAndClose(url.openStream(), new FileOutputStream(outputFile));
  
                  evaluator.addClasspathUrl(outputFile.toURI().toURL());
              } else {
                  evaluator.addClasspathUrl(url);
              }
  
              logger.success(format("Added %s to classpath.", path));
          } catch (Exception e) {
              logger.error(format("Could not add %s to classpath. %s", path, e.getLocalizedMessage()));
          }
      }
  }
  