Refactor ParameterCount enum and update option descriptions
[cli-helper.git] / src / main / java / eu / svjatoslav / commons / cli_helper / parameter_parser / parameter / FileOptions.java
1 /*
2  * Svjatoslav Commons - shared library of common functionality. Author: Svjatoslav Agejenko.
3  * This project is released under Creative Commons Zero (CC0) license.
4  */
5 package eu.svjatoslav.commons.cli_helper.parameter_parser.parameter;
6
7 import eu.svjatoslav.commons.cli_helper.parameter_parser.Option;
8 import eu.svjatoslav.commons.cli_helper.parameter_parser.ParameterCount;
9
10 import java.io.File;
11 import java.util.List;
12 import java.util.stream.Collectors;
13
14 import static eu.svjatoslav.commons.cli_helper.parameter_parser.parameter.FileOption.validateFile;
15
16 public class FileOptions extends Option<List<File>, FileOptions> {
17
18     private ExistenceType existenceType = ExistenceType.DOES_NOT_MATTER;
19
20     public FileOptions(final String description) {
21         super(description, ParameterCount.ONE_OR_MORE);
22     }
23
24     @Override
25     public String describeFormat() {
26         switch (existenceType) {
27             case MUST_EXIST:
28                 return "One to many existing files.";
29             case MUST_NOT_EXIST:
30                 return "One to many non-existing files.";
31             default:
32                 return "One to many files.";
33         }
34     }
35
36     @Override
37     public List<File> getValue() {
38         return parameters.stream().map(File::new).collect(Collectors.toList());
39     }
40
41     public FileOptions mustExist() {
42         existenceType = ExistenceType.MUST_EXIST;
43         return this;
44     }
45
46     public FileOptions mustNotExist() {
47         existenceType = ExistenceType.MUST_NOT_EXIST;
48         return this;
49     }
50
51     @Override
52     public boolean isValid(final String value) {
53         return validateFile(existenceType, value);
54     }
55
56 }