254 lines
7.4 KiB
Java
254 lines
7.4 KiB
Java
/*
|
||
* Copyright (C) 2020 Christian Pierre MOMON <christian.momon@devinsy.fr>
|
||
*
|
||
* 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 <http://www.gnu.org/licenses/>.
|
||
*/
|
||
package org.april.agirstatool.cli;
|
||
|
||
import java.io.File;
|
||
import java.sql.Connection;
|
||
import java.time.LocalDateTime;
|
||
import java.util.Locale;
|
||
|
||
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 <code>JugaCLI</code> manages a Command Line Interface for Juga.
|
||
*
|
||
*/
|
||
public final class AgirStatoolCLI
|
||
{
|
||
private static Logger logger = LoggerFactory.getLogger(AgirStatoolCLI.class);
|
||
|
||
/**
|
||
* Instantiates a new JugaCLI.
|
||
*/
|
||
private AgirStatoolCLI()
|
||
{
|
||
}
|
||
|
||
/**
|
||
* 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.
|
||
AgirStatoolCLI.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.");
|
||
}
|
||
});
|
||
|
||
// Set the locale to France is required for week alignment.
|
||
Locale.setDefault(Locale.FRANCE);
|
||
|
||
logger.info("{} AgirStatool call: {}", LocalDateTime.now(), 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":
|
||
{
|
||
logger.info("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":
|
||
{
|
||
logger.info("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+":
|
||
{
|
||
logger.info("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.");
|
||
}
|
||
catch (AgirStatoolException exception)
|
||
{
|
||
System.err.println("AgirStatoolException = " + exception.getMessage());
|
||
logger.error(exception.getMessage(), exception);
|
||
help();
|
||
}
|
||
}
|
||
}
|