/* * Copyright (C) 2020 Christian Pierre MOMON * * This file is part of AgirStatool, simple key value database. * * AgirStatool is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * AgirStatool is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with AgirStatool. If not, see . */ package org.april.agirstatool.cli; import java.io.File; import java.sql.Connection; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.PropertyConfigurator; import org.april.agirstatool.core.AgirStatool; import org.april.agirstatool.core.AgirStatoolException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fr.devinsy.strings.StringList; import fr.devinsy.strings.StringsUtils; import utils.BuildInformation; /** * The Class JugaCLI manages a Command Line Interface for Juga. * */ public final class AgiStatoolCLI { private static Logger logger = LoggerFactory.getLogger(AgiStatoolCLI.class); /** * Instantiates a new JugaCLI. */ private AgiStatoolCLI() { } /** * This method displays the CLI help. * */ public static void help() { StringList message = new StringList(); message.append("AgirStatool CLI version ").appendln(BuildInformation.instance().version()); message.appendln("Usage:"); message.appendln(" agirstatool [ -h | -help | --help ]"); message.appendln(" agirstatool -c configurationFilename clear"); message.appendln(" agirstatool -c configurationFilename update"); message.appendln(" agirstatool -c configurationFilename projects"); System.out.println(message.toString()); } /** * The main method. * * @param args * the arguments */ public static void main(final String[] args) { // Configure log. File loggerConfig = new File("log4j.properties"); if (loggerConfig.exists()) { PropertyConfigurator.configure(loggerConfig.getAbsolutePath()); logger.info("Dedicated log configuration done."); logger.info("Configuration file was found in [{}].", loggerConfig.getAbsoluteFile()); } else { BasicConfigurator.configure(); logger.info("Basic log configuration done."); logger.info("Configuration file was not found in [{}].", loggerConfig.getAbsoluteFile()); } // Run. AgiStatoolCLI.run(args); } /** * * This method launch CLI. * * @param args * necessary arguments */ public static void run(final String[] args) { try { // Set default catch. Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(final Thread thread, final Throwable exception) { String message; if (exception instanceof OutOfMemoryError) { message = "Java ran out of memory!\n\n"; } else { message = String.format("An error occured: %1s(%2s)", exception.getClass(), exception.getMessage()); } logger.error("uncaughtException ", exception); logger.error(message); logger.info("Oups, an unexpected error occured. Please try again."); } }); // logger.info("Single connection opened with [{}].", this.url); System.out.println("ok"); // This part implements an automate. int parameterCount = args.length; switch (parameterCount) { case 0: { help(); } break; case 1: { String token = args[0]; if (StringsUtils.containsAny(token, "-h", "-help", "--help")) { help(); } else { throw new AgirStatoolException("Bad usage."); } } break; case 3: { String token = args[0]; String configurationFilename = args[1]; String command = args[2]; if ((StringUtils.equals(token, "-c")) && (StringsUtils.containsAny(command, "clear", "refresh", "update", "projects", "projects+"))) { File configurationFile = new File(configurationFilename); if (!configurationFile.exists()) { throw new AgirStatoolException("Configuration file does not exist."); } else if (!configurationFile.isFile()) { throw new AgirStatoolException("Configuration file is not a file."); } else { // Apply -c parameter. logger.info("Applying configuration file found in [{}].", configurationFile.getAbsoluteFile()); PropertyConfigurator.configure(configurationFile.getAbsolutePath()); logger.info("Configuration log configuration done."); switch (command) { case "clear": break; case "refresh": case "update": { AgirStatoolConfigFile config = new AgirStatoolConfigFile(configurationFile); Connection connection = SQLUtils.getConnexion(config.getDabataseUrl(), config.getDabataseName(), config.getDabataseLogin(), config.getDabatasePassword()); AgirStatool statool = new AgirStatool(connection, new File(config.getTargetDirectory())); statool.doRefreshPages(); } break; case "projects": { AgirStatoolConfigFile config = new AgirStatoolConfigFile(configurationFile); Connection connection = SQLUtils.getConnexion(config.getDabataseUrl(), config.getDabataseName(), config.getDabataseLogin(), config.getDabatasePassword()); AgirStatool statool = new AgirStatool(connection, new File(config.getTargetDirectory())); StringList lines = statool.doBuildTextProjectList(); System.out.println(lines); } break; case "projects+": { AgirStatoolConfigFile config = new AgirStatoolConfigFile(configurationFile); Connection connection = SQLUtils.getConnexion(config.getDabataseUrl(), config.getDabataseName(), config.getDabataseLogin(), config.getDabatasePassword()); AgirStatool statool = new AgirStatool(connection, new File(config.getTargetDirectory())); StringList lines = statool.doBuildTextProjectExtendedList(); System.out.println(lines); } break; } } } else { System.out.println("Bad usage detected."); help(); } } break; default: { throw new AgirStatoolException("Bad parameter count."); } } logger.info("Finished."); } catch (AgirStatoolException exception) { System.err.println("AgirStatoolException = " + exception.getMessage()); logger.error(exception.getMessage(), exception); help(); } } }