Update naming in commandline parser
[cli-helper.git] / src / main / java / eu / svjatoslav / commons / cli_helper / parameter_parser / parameter / FileOption.java
diff --git a/src/main/java/eu/svjatoslav/commons/cli_helper/parameter_parser/parameter/FileOption.java b/src/main/java/eu/svjatoslav/commons/cli_helper/parameter_parser/parameter/FileOption.java
new file mode 100755 (executable)
index 0000000..db941c4
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * 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);
+    }
+
+}