All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.laskowski.shell.script.DefaultScriptWriter Maven / Gradle / Ivy

Go to download

Library to launch .bat and .sh scripts of your choice with different configurations. Allows you to read tasks and services output from terminal

There is a newer version: 2.0.6.1
Show newest version
package io.github.laskowski.shell.script;

import io.github.laskowski.os.OperatingSystem;

import java.io.File;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

@SuppressWarnings("UnusedReturnValue")
public class DefaultScriptWriter extends TXTWriter implements ScriptWriter {
    private static final DefaultScriptInfoProvider SCRIPT_INFO_PROVIDER = DefaultScriptInfoProvider.getInstance();

    public DefaultScriptWriter(String fileName) {
        this(SCRIPT_INFO_PROVIDER.getScriptDirectory(), fileName.concat(SCRIPT_INFO_PROVIDER.getShellArguments().getExtension()));
    }

    public DefaultScriptWriter(File directory, String fileName) {
        super(directory, fileName);
    }

    public DefaultScriptWriter runCommands(Class clazz) {
        List commands = new CommandsMapper(clazz).getCommands();
        for (CommandEntity command : commands) {
            switch (command.getCommandType()) {
                case CD:
                    cd(command.getVariableValue());
                    break;
                case VARIABLE:
                    setVariable(command.getAnnotationValue(), command.getVariableValue());
                    break;
                case RUN:
                    command(command.getVariableValue());
                    break;
                default:
                    throw new RuntimeException("Not implemented");
            }
        }

        return this;
    }

    public DefaultScriptWriter setVariable(String variable, String value) {
        super.write("%s %s=%s", SCRIPT_INFO_PROVIDER.getShellArguments().getVariableCommand(), variable, value);
        super.newLine();
        return this;
    }

    public DefaultScriptWriter setVariable(String variable, Optional optionalValue) {
        optionalValue.ifPresent(s -> setVariable(variable, s));
        return this;
    }

    public DefaultScriptWriter cd(String path) {
        super.write("cd %s", path);
        super.newLine();
        return this;
    }

    public DefaultScriptWriter command(String string, Object... args) {
        super.write(String.format(Objects.requireNonNull(string), args));
        super.newLine();
        return this;
    }

    public DefaultScriptWriter osBasedCommand(OSBasedCommand osBasedCommand) {
        OperatingSystem operatingSystem = SCRIPT_INFO_PROVIDER.getOperatingSystemDiscoveryStrategy().getOS();
        switch (operatingSystem) {
            case WINDOWS: command(osBasedCommand.getWindowsCommand());
                break;
            case MAC: command(osBasedCommand.getMacCommand());
                break;
            case UNIX: command(osBasedCommand.getUnixCommand());
                break;
        }

        return this;
    }

    @Override
    public Script build() {
        return this::save;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy