/* * 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.april.agirstatool.core.Project; import org.april.agirstatool.core.Projects; 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 AgirConfig { private static Logger logger = LoggerFactory.getLogger(AgirConfig.class); /** * Instantiates a new JugaCLI. */ private AgirConfig() { } /** * 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. AgirConfig.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", "update", "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 { switch (command) { case "clear": break; case "update": break; case "projects": { Connection connection = SQLUtils.getConnexion("jdbc:mysql://localhost/", "agir2020", "admin", "suko7Gun"); AgirStatool statool = new AgirStatool(connection, new File("/home/cpm/Projets/AgirStatool/TestZone/www/")); Projects projects = statool.listProjects(); String header = String.format("%3s %-30s %-30s %s", "ID", "Identifier", "Name", "ParentId"); System.out.println(header); for (Project project : projects) { String line = String.format("%3d %-30s %-30s %4d", project.getId(), project.getIdentifier(), project.getName(), project.getParentId()); System.out.println(line); } } break; } } } else { System.out.println("Bad usage detected."); help(); } } break; default: { throw new AgirStatoolException("Bad parameter count."); } } } catch (AgirStatoolException exception) { System.err.println("AgirStatoolException = " + exception.getMessage()); logger.error(exception.getMessage(), exception); help(); } } }