Skip to content

Commit

Permalink
chore: Partial data-extract implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
rsenden committed Feb 28, 2024
1 parent da6fc5c commit 6462db3
Show file tree
Hide file tree
Showing 107 changed files with 5,118 additions and 124 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*******************************************************************************
* Copyright 2021, 2023 Open Text.
*
* The only warranties for products and services of Open Text
* and its affiliates and licensors ("Open Text") are as may
* be set forth in the express warranty statements accompanying
* such products and services. Nothing herein should be construed
* as constituting an additional warranty. Open Text shall not be
* liable for technical or editorial errors or omissions contained
* herein. The information contained herein is subject to change
* without notice.
*******************************************************************************/
package com.fortify.cli.common.action.cli.cmd;

import com.fortify.cli.common.action.helper.ActionHelper;
import com.fortify.cli.common.cli.cmd.AbstractRunnableCommand;

import picocli.CommandLine.Parameters;

public abstract class AbstractActionGetCommand extends AbstractRunnableCommand implements Runnable {
@Parameters(arity="1", descriptionKey="fcli.action.run.action") private String action;

@Override
public final void run() {
initMixins();
System.out.println(ActionHelper.loadContents(getType(), action));
}

protected abstract String getType();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*******************************************************************************
* Copyright 2021, 2023 Open Text.
*
* The only warranties for products and services of Open Text
* and its affiliates and licensors ("Open Text") are as may
* be set forth in the express warranty statements accompanying
* such products and services. Nothing herein should be construed
* as constituting an additional warranty. Open Text shall not be
* liable for technical or editorial errors or omissions contained
* herein. The information contained herein is subject to change
* without notice.
*******************************************************************************/
package com.fortify.cli.common.action.cli.cmd;

import com.fortify.cli.common.action.helper.ActionDescriptor;
import com.fortify.cli.common.action.helper.ActionHelper;
import com.fortify.cli.common.action.helper.ActionParameterHelper;
import com.fortify.cli.common.cli.cmd.AbstractRunnableCommand;

import picocli.CommandLine.Parameters;

public abstract class AbstractActionHelpCommand extends AbstractRunnableCommand implements Runnable {
@Parameters(arity="1", descriptionKey="fcli.action.run.action") private String action;

@Override
public final void run() {
initMixins();
var actionDescriptor = ActionHelper.load(getType(), action);
System.out.println(getActionHelp(actionDescriptor));
}

private final String getActionHelp(ActionDescriptor action) {
var usage = action.getUsage();
return String.format(
"\nAction: %s\n"+
"\n%s\n"+
"\n%s\n"+
"\nAction options:\n"+
"%s",
action.getName(), usage.getHeader(), usage.getDescription(), ActionParameterHelper.getSupportedOptionsTable(action));
}

protected abstract String getType();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*******************************************************************************
* Copyright 2021, 2023 Open Text.
*
* The only warranties for products and services of Open Text
* and its affiliates and licensors ("Open Text") are as may
* be set forth in the express warranty statements accompanying
* such products and services. Nothing herein should be construed
* as constituting an additional warranty. Open Text shall not be
* liable for technical or editorial errors or omissions contained
* herein. The information contained herein is subject to change
* without notice.
*******************************************************************************/
package com.fortify.cli.common.action.cli.cmd;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fortify.cli.common.action.helper.ActionHelper;
import com.fortify.cli.common.json.JsonHelper;
import com.fortify.cli.common.output.cli.cmd.AbstractOutputCommand;
import com.fortify.cli.common.output.cli.cmd.IJsonNodeSupplier;

public abstract class AbstractActionListCommand extends AbstractOutputCommand implements IJsonNodeSupplier {
@Override
public final JsonNode getJsonNode() {
return ActionHelper.list(getType())
.map(JsonHelper.getObjectMapper()::valueToTree)
.map(ObjectNode.class::cast)
.collect(JsonHelper.arrayNodeCollector());
}
@Override
public final boolean isSingular() {
return false;
}
protected abstract String getType();


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*******************************************************************************
* Copyright 2021, 2023 Open Text.
*
* The only warranties for products and services of Open Text
* and its affiliates and licensors ("Open Text") are as may
* be set forth in the express warranty statements accompanying
* such products and services. Nothing herein should be construed
* as constituting an additional warranty. Open Text shall not be
* liable for technical or editorial errors or omissions contained
* herein. The information contained herein is subject to change
* without notice.
*******************************************************************************/
package com.fortify.cli.common.action.cli.cmd;

import java.util.List;

import org.springframework.expression.spel.support.SimpleEvaluationContext;

import com.fortify.cli.common.action.helper.ActionHelper;
import com.fortify.cli.common.action.helper.ActionParameterHelper;
import com.fortify.cli.common.action.helper.ActionRunner;
import com.fortify.cli.common.cli.cmd.AbstractRunnableCommand;
import com.fortify.cli.common.cli.mixin.CommandHelperMixin;
import com.fortify.cli.common.cli.util.SimpleOptionsParser.OptionsParseResult;
import com.fortify.cli.common.progress.cli.mixin.ProgressWriterFactoryMixin;
import com.fortify.cli.common.progress.helper.IProgressWriterI18n;
import com.fortify.cli.common.util.DisableTest;
import com.fortify.cli.common.util.DisableTest.TestType;

import picocli.CommandLine.Mixin;
import picocli.CommandLine.Option;
import picocli.CommandLine.ParameterException;
import picocli.CommandLine.Parameters;
import picocli.CommandLine.Unmatched;

public abstract class AbstractActionRunCommand extends AbstractRunnableCommand implements Runnable {
@Parameters(arity="1", descriptionKey="fcli.action.run.action") private String action;
@DisableTest({TestType.MULTI_OPT_SPLIT, TestType.MULTI_OPT_PLURAL_NAME, TestType.OPT_LONG_NAME})
@Option(names="--<action-parameter>", paramLabel="<value>", descriptionKey="fcli.action.run.action-parameter")
private List<String> dummyForSynopsis;
@Mixin private ProgressWriterFactoryMixin progressWriterFactory;
@Mixin CommandHelperMixin commandHelper;
@Unmatched private String[] actionArgs;

@Override
public final void run() {
initMixins();
Runnable delayedConsoleWriter = null;
try ( var progressWriter = progressWriterFactory.create() ) {
progressWriter.writeProgress("Loading action %s", action);
var actionDescriptor = ActionHelper.load(getType(), action);
try ( var actionRunner = ActionRunner.builder()
.onValidationErrors(this::onValidationErrors)
.action(actionDescriptor)
.progressWriter(progressWriter).build() )
{
delayedConsoleWriter = run(actionRunner, progressWriter);
}
}
delayedConsoleWriter.run();
}

private Runnable run(ActionRunner actionRunner, IProgressWriterI18n progressWriter) {
actionRunner.getSpelEvaluator().configure(context->configure(actionRunner, context));
progressWriter.writeProgress("Executing action %s", action);
return actionRunner.run(actionArgs);
}

private ParameterException onValidationErrors(OptionsParseResult optionsParseResult) {
var errorsString = String.join("\n ", optionsParseResult.getValidationErrors());
var supportedOptionsString = ActionParameterHelper.getSupportedOptionsTable(optionsParseResult.getOptions());
var msg = String.format("Option errors:\n %s\nSupported options:\n%s\n", errorsString, supportedOptionsString);
return new ParameterException(commandHelper.getCommandSpec().commandLine(), msg);
}

protected abstract String getType();
protected abstract void configure(ActionRunner actionRunner, SimpleEvaluationContext context);
}
Loading

0 comments on commit 6462db3

Please sign in to comment.