X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fde%2Ftodesbaum%2Fjsite%2Fmain%2FCLI.java;h=65c9253b153f9151311695173cabec16b597599f;hb=953de352675a4ad91fe307d816a4ea7780c94274;hp=7c1fb3d8371f798dff306d6d5415d19397e2dadf;hpb=250630a5fb1ff745f05788210a6efd976533fb55;p=jSite.git diff --git a/src/de/todesbaum/jsite/main/CLI.java b/src/de/todesbaum/jsite/main/CLI.java index 7c1fb3d..65c9253 100644 --- a/src/de/todesbaum/jsite/main/CLI.java +++ b/src/de/todesbaum/jsite/main/CLI.java @@ -1,6 +1,5 @@ /* - * jSite - - * Copyright (C) 2006 David Roden + * jSite - CLI.java - Copyright © 2006–2012 David Roden * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,25 +25,50 @@ import de.todesbaum.jsite.application.InsertListener; import de.todesbaum.jsite.application.Node; import de.todesbaum.jsite.application.Project; import de.todesbaum.jsite.application.ProjectInserter; +import de.todesbaum.util.io.StreamCopier.ProgressListener; /** + * Command-line interface for jSite. + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> */ public class CLI implements InsertListener { + /** Object used for synchronization. */ private Object lockObject = new Object(); + + /** Writer for the console. */ private PrintWriter outputWriter = new PrintWriter(System.out, true); + + /** The freenet interface. */ private Freenet7Interface freenetInterface; + + /** The project inserter. */ private ProjectInserter projectInserter = new ProjectInserter(); + + /** The list of nodes. */ private Node[] nodes; + + /** The projects. */ private Project[] projects; + + /** Whether the insert has finished. */ private boolean finished = false; + + /** Whether the insert finished successfully. */ private boolean success; + /** + * Creates a new command-line interface. + * + * @param args + * The command-line arguments + */ private CLI(String[] args) { if ((args.length == 0) || args[0].equals("-h") || args[0].equals("--help")) { outputWriter.println("\nParameters:\n"); + outputWriter.println(" --config-file="); outputWriter.println(" --node="); outputWriter.println(" --project="); outputWriter.println(" --local-directory="); @@ -56,12 +80,20 @@ public class CLI implements InsertListener { return; } - Configuration configuration = new Configuration(); - if (!configuration.createLockFile()) { - outputWriter.println("Lock file found!"); - return; + String configFile = System.getProperty("user.home") + "/.jSite/config7"; + for (String argument : args) { + String value = argument.substring(argument.indexOf('=') + 1).trim(); + if (argument.startsWith("--config-file=")) { + configFile = value; + } } + ConfigurationLocator configurationLocator = new ConfigurationLocator(); + if (configFile != null) { + configurationLocator.setCustomLocation(configFile); + } + Configuration configuration = new Configuration(configurationLocator, configurationLocator.findPreferredLocation()); + projectInserter.addInsertListener(this); projects = configuration.getProjects(); Node node = configuration.getSelectedNode(); @@ -73,7 +105,11 @@ public class CLI implements InsertListener { projectInserter.setFreenetInterface(freenetInterface); Project currentProject = null; - for (String argument: args) { + for (String argument : args) { + if (argument.startsWith("--config-file=")) { + /* we already parsed this one. */ + continue; + } String value = argument.substring(argument.indexOf('=') + 1).trim(); if (argument.startsWith("--node=")) { Node newNode = getNode(value); @@ -120,9 +156,11 @@ public class CLI implements InsertListener { } } + int errorCode = 1; if (currentProject != null) { if (insertProject(currentProject)) { outputWriter.println("Project \"" + currentProject.getName() + "\" successfully inserted."); + errorCode = 0; } else { outputWriter.println("Project \"" + currentProject.getName() + "\" was not successfully inserted."); } @@ -130,10 +168,19 @@ public class CLI implements InsertListener { configuration.setProjects(projects); configuration.save(); + + System.exit(errorCode); } + /** + * Returns the project with the given name. + * + * @param name + * The name of the project + * @return The project, or null if no project could be found + */ private Project getProject(String name) { - for (Project project: projects) { + for (Project project : projects) { if (project.getName().equals(name)) { return project; } @@ -141,8 +188,15 @@ public class CLI implements InsertListener { return null; } + /** + * Returns the node with the given name. + * + * @param name + * The name of the node + * @return The node, or null if no node could be found + */ private Node getNode(String name) { - for (Node node: nodes) { + for (Node node : nodes) { if (node.getName().equals(name)) { return node; } @@ -150,18 +204,32 @@ public class CLI implements InsertListener { return null; } + /** + * Inserts the given project. + * + * @param currentProject + * The project to insert + * @return true if the insert finished successfully, + * false otherwise + */ private boolean insertProject(Project currentProject) { if (!freenetInterface.hasNode()) { outputWriter.println("Node is not running!"); return false; } projectInserter.setProject(currentProject); - projectInserter.start(); + projectInserter.start(new ProgressListener() { + + public void onProgress(long copied, long length) { + System.out.print("Uploaded: " + copied + " / " + length + " bytes...\r"); + } + }); synchronized (lockObject) { while (!finished) { try { lockObject.wait(); } catch (InterruptedException e) { + /* ignore, we're in a loop. */ } } } @@ -179,6 +247,16 @@ public class CLI implements InsertListener { outputWriter.println("Starting Insert of project \"" + project.getName() + "\"."); } + /** + * {@inheritDoc} + */ + public void projectUploadFinished(Project project) { + outputWriter.println("Project \"" + project.getName() + "\" has been uploaded, starting insert..."); + } + + /** + * {@inheritDoc} + */ public void projectURIGenerated(Project project, String uri) { outputWriter.println("URI: " + uri); } @@ -206,6 +284,12 @@ public class CLI implements InsertListener { // MAIN // + /** + * Creates a new command-line interface with the given arguments. + * + * @param args + * The command-line arguments + */ public static void main(String[] args) { new CLI(args); }