--- /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;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static eu.svjatoslav.commons.cli_helper.parameter_parser.parameter.FileOption.validateFile;
+
+public class FileOptions extends Option<List<File>, FileOptions> {
+
+ private ExistenceType existenceType = ExistenceType.DOES_NOT_MATTER;
+
+ public FileOptions(final String description) {
+ super(description, ParameterCount.MULTI);
+ }
+
+ @Override
+ public String describeFormat() {
+ return existenceType.description + " files";
+ }
+
+ @Override
+ public List<File> getValue() {
+ return parameters.stream().map(File::new).collect(Collectors.toList());
+ }
+
+ public FileOptions mustExist() {
+ existenceType = ExistenceType.MUST_EXIST;
+ return this;
+ }
+
+ public FileOptions mustNotExist() {
+ existenceType = ExistenceType.MUST_NOT_EXIST;
+ return this;
+ }
+
+ @Override
+ public boolean isValid(final String value) {
+ return validateFile(existenceType, value);
+ }
+
+}