--- /dev/null
+/*
+ * Svjatoslav Commons - shared library of common functionality. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
+ */
+package eu.svjatoslav.commons.cli_helper.parameter_parser.parameter;
+
+import eu.svjatoslav.commons.cli_helper.parameter_parser.ParameterCount;
+import eu.svjatoslav.commons.cli_helper.parameter_parser.Option;
+
+import java.io.File;
+
+public class FileOption extends Option<File, FileOption> {
+
+ private ExistenceType existenceType = ExistenceType.DOES_NOT_MATTER;
+
+ public FileOption(final String description) {
+ super(description, ParameterCount.SINGLE);
+ }
+
+ protected static boolean validateFile(ExistenceType existenceType, String value) {
+ final File file = new File(value);
+
+ if (existenceType == ExistenceType.MUST_EXIST) {
+ return file.exists() && file.isFile();
+ }
+
+ if (existenceType == ExistenceType.MUST_NOT_EXIST) {
+ return !file.exists();
+ }
+
+ if (existenceType == ExistenceType.DOES_NOT_MATTER) {
+ if (file.exists())
+ if (file.isDirectory())
+ return false;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ @Override
+ public java.lang.String describeFormat() {
+ return existenceType.description + " file";
+ }
+
+ @Override
+ public File getValue() {
+
+ if (parameters.size() != 1)
+ throw new RuntimeException("Parameter " + description
+ + " shall have exactly 1 argument.");
+
+ return new File(parameters.get(0));
+ }
+
+ public FileOption mustExist() {
+ existenceType = ExistenceType.MUST_EXIST;
+ return this;
+ }
+
+ public FileOption mustNotExist() {
+ existenceType = ExistenceType.MUST_NOT_EXIST;
+ return this;
+ }
+
+ @Override
+ public boolean isValid(final java.lang.String value) {
+ return validateFile(existenceType, value);
+ }
+
+}