/* * 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 java.time.LocalDateTime; 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."); } }); System.out.println(LocalDateTime.now() + " AgirStatool call: " + new StringList(args).toStringSeparatedBy(" ")); // logger.info("Single connection opened with [{}].", this.url); // 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. File log4jfile = new File(configurationFile.getParentFile(), "log4j.properties"); if (log4jfile.exists()) { logger.info("Applying configuration file found in [{}].", log4jfile.getAbsoluteFile()); PropertyConfigurator.configure(log4jfile.getAbsolutePath()); logger.info("Configuration log configuration done."); } switch (command) { case "clear": break; case "refresh": case "update": { System.out.println("Update command…"); 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": { System.out.println("projects command…"); 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+": { System.out.println("projects+ command…"); 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."); System.out.println("Finished."); } catch (AgirStatoolException exception) { System.err.println("AgirStatoolException = " + exception.getMessage()); logger.error(exception.getMessage(), exception); help(); } } }