/*
* This file is part of FTB Launcher.
*
* Copyright © 2012-2016, FTB Launcher Contributors <https://github.com/Slowpoke101/FTBLaunch/>
* FTB Launcher is licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.ftb.data;
import com.beust.jcommander.IParameterValidator;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;
import lombok.Getter;
/**
* Setting given via command line
*
* Note: due a bug in jcommander do not use single long name, e.g. "--help". It will break output of usage()
*
* TODO:
* * add hints about required values as soon as jcommander supports meta values
* * ValidateRequiredValue.validate()'s argument name is always first item in the array. How to fix? will it confuse users?
* * "help = true" does not stop Validators from running => ValidateRequiredValue will throw exception even if --help is given
*
*/
public class CommandLineSettings
{
@Getter
private static CommandLineSettings settings;
static
{
settings = new CommandLineSettings();
}
@Parameter(names =
{"--verbose", "-V"}, description = "Level of verbosity: 0=debug, 1=info, 2=warning, 3=error", arity = 1)
@Getter
// default = VERBOSE
private int verbosity = 0;
@Parameter(names =
{"--log-mc", "-m"}, description = "Show messages from minecraft process")
@Getter
private boolean mcLogs = false;
@Parameter(names =
{"--no-console", "-c"}, description = "Do not open console window. (Overrides GUI option.)")
@Getter
private boolean noConsole = false;
@Parameter(names =
{"--autostart", "-a"}, description = "Automatically start given pack (WIP feature)", arity = 1)
@Getter
private String packDir;
@Parameter(names =
{"--cache-dir", "-C"}, description = "Cache directory", arity = 1, validateWith = ValidateRequiredValue.class)
@Getter
private String cacheDir;
@Parameter(names =
{"--dynamic-dir", "-D"}, description = "Dynamic directory", arity = 1, validateWith = ValidateRequiredValue.class)
@Getter
private String dynamicDir;
@Parameter(names =
{"--pack-dir", "-P"}, description = "FTB installation directory", arity = 1, validateWith = ValidateRequiredValue.class)
@Getter
private String installDir;
@Parameter(names =
{"--use-mac", "-M"}, description = "Use mac address as an encryption key")
@Getter
private boolean useMac = false;
@Parameter(names =
{"--help", "-h"}, help = true, description = "Shows help")
@Getter
private boolean help = false;
@Parameter(names =
{"--disable-tray", "-t"}, description = "Disable tray icon")
@Getter
private boolean disableTray = false;
@Parameter(names =
{"--skip-first", "-s"}, description = "Skip first time startup dialogue")
@Getter
private boolean skipFirst = false;
@Parameter(names =
{"--set-version"}, description = "Set version")
@Getter
private int manualVersion = 0;
@Parameter(names =
{"--set-build"}, description = "Set build number")
@Getter
private int manualBuildNumber = 0;
@Parameter(names =
{"--disable-bitness-checks"}, description = "Disable JVM bitness check nagging screens")
@Getter
private boolean disableJVMBitnessCheck = false;
@Parameter(names =
{"--disable-jvm-version-checks"}, description = "Disable JVM version check nagging screens")
@Getter
private boolean disableJVMVersionCheck = false;
@Parameter(names =
{"--disable-installation-location-checks"}, description = "Disable installation location checks")
@Getter
private boolean disableInstallLocChecks = false;
@Parameter(names =
{"--disable-mc-logging"}, description = "Disable MC logging")
@Getter
private boolean disableMCLogging = false;
@Parameter(names =
{"--disable-news"}, description = "Disable contents of news pane")
@Getter
private boolean disableNews = false;
public static class ValidateRequiredValue implements IParameterValidator
{
@Override
public void validate (String name, String value) throws ParameterException
{
if (value == null || value.isEmpty())
{
// this should never happen because jcommander bug
throw new ParameterException("Expected a value after parameter " + name);
}
if (value.startsWith("-") && !value.equals("--"))
{
throw new ParameterException("Expected a value after parameter " + name + ". Looks like argument " + value);
}
}
}
}