agirstatool/src/org/april/agirstatool/cli/AgiStatoolCLI.java

251 lines
7.3 KiB
Java
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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 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 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();
}
}
}