Skip to content

Commit

Permalink
ninja validation of midpoint home directory moved to sooner phase (af…
Browse files Browse the repository at this point in the history
…ter parameters validation)

(cherry picked from commit ef25a63)
  • Loading branch information
1azyman committed Oct 18, 2023
1 parent d915f63 commit e6f9425
Showing 1 changed file with 53 additions and 16 deletions.
69 changes: 53 additions & 16 deletions tools/ninja/src/main/java/com/evolveum/midpoint/ninja/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,38 @@
*/
package com.evolveum.midpoint.ninja;

import java.io.File;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import com.beust.jcommander.JCommander;
import com.beust.jcommander.ParameterException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.fusesource.jansi.AnsiConsole;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.common.configuration.api.MidpointConfiguration;
import com.evolveum.midpoint.init.StartupConfiguration;
import com.evolveum.midpoint.ninja.action.Action;
import com.evolveum.midpoint.ninja.action.ActionResult;
import com.evolveum.midpoint.ninja.action.BaseOptions;
import com.evolveum.midpoint.ninja.action.ConnectionOptions;
import com.evolveum.midpoint.ninja.impl.Command;
import com.evolveum.midpoint.ninja.impl.LogLevel;
import com.evolveum.midpoint.ninja.impl.NinjaApplicationContextLevel;
import com.evolveum.midpoint.ninja.impl.NinjaContext;
import com.evolveum.midpoint.ninja.util.ConsoleFormat;
import com.evolveum.midpoint.ninja.util.InputParameterException;
import com.evolveum.midpoint.ninja.util.NinjaUtils;

import com.evolveum.midpoint.util.exception.SystemException;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.fusesource.jansi.AnsiConsole;
import org.jetbrains.annotations.NotNull;

import java.io.InputStream;
import java.io.PrintStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class Main {

public static void main(String[] args) {
Expand Down Expand Up @@ -91,6 +94,12 @@ public void setErr(@NotNull PrintStream err) {
} catch (ParameterException ex) {
err.println(ConsoleFormat.formatLogMessage(LogLevel.ERROR, ex.getMessage()));

String parsedCommand = ex.getJCommander().getParsedCommand();
BaseOptions base = NinjaUtils.getOptions(jc.getObjects(), BaseOptions.class);
if (base != null && base.isVerbose()) {
printHelp(jc, parsedCommand);
}

return MainResult.EMPTY_ERROR;
}

Expand Down Expand Up @@ -146,6 +155,13 @@ public void setErr(@NotNull PrintStream err) {
context.getLog().info("");
}

NinjaApplicationContextLevel contextLevel = action.getApplicationContextLevel(allOptions);
if (contextLevel != null && contextLevel != NinjaApplicationContextLevel.NONE) {
ConnectionOptions connectionOptions =
Objects.requireNonNullElse(context.getOptions(ConnectionOptions.class), new ConnectionOptions());
checkAndWarnMidpointHome(connectionOptions.getMidpointHome());
}

Object result = action.execute();
if (result instanceof ActionResult) {
ActionResult<?> actionResult = (ActionResult<?>) result;
Expand All @@ -169,6 +185,27 @@ public void setErr(@NotNull PrintStream err) {
}
}

private void checkAndWarnMidpointHome(String midpointHome) {
if (StringUtils.isEmpty(midpointHome)) {
throw new InputParameterException("Midpoint home " + ConnectionOptions.P_MIDPOINT_HOME + " option expected, but not defined");
}

File file = new File(midpointHome);
if (!file.exists() || !file.isDirectory()) {
throw new InputParameterException("Midpoint home directory '" + midpointHome + "' doesn't exist or is not a directory");
}

String configFile = StartupConfiguration.DEFAULT_CONFIG_FILE_NAME;
if (System.getProperty(MidpointConfiguration.MIDPOINT_CONFIG_FILE_PROPERTY) != null) {
configFile = System.getProperty(MidpointConfiguration.MIDPOINT_CONFIG_FILE_PROPERTY);
}

File config = new File(file, configFile);
if (!config.exists() || config.isDirectory()) {
throw new InputParameterException("Midpoint home config xml file '" + config.getAbsolutePath() + "' doesn't exist");
}
}

private void cleanupResources(BaseOptions opts, NinjaContext context) {
try {
if (context != null) {
Expand All @@ -181,7 +218,7 @@ private void cleanupResources(BaseOptions opts, NinjaContext context) {

private Exception checkAndUnwrapException(Exception ex) {
Throwable throwable = ex;
while (throwable != null && !Objects.equals(throwable.getCause() , throwable)) {
while (throwable != null && !Objects.equals(throwable.getCause(), throwable)) {
throwable = throwable.getCause();
if (throwable instanceof SystemException) {
break;
Expand Down

0 comments on commit e6f9425

Please sign in to comment.