Added ability to provide multiple directories as commandline argument
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / commandline / parameterparser / parameter / DirectoryParameters.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.commandline.parameterparser.parameter;
6
7 import eu.svjatoslav.commons.commandline.parameterparser.ArgumentCount;
8 import eu.svjatoslav.commons.commandline.parameterparser.Parameter;
9
10 import java.io.File;
11 import java.util.List;
12 import java.util.stream.Collectors;
13
14 public class DirectoryParameters extends Parameter<List<File>, DirectoryParameters> {
15
16     private ExistenceType existenceType = ExistenceType.DOES_NOT_MATTER;
17
18     public DirectoryParameters(final String description) {
19         super(description, ArgumentCount.MULTI);
20     }
21
22     @Override
23     public String describeFormat() {
24         return existenceType.description + " directories";
25     }
26
27     @Override
28     public List<File> getValue() {
29         return arguments.stream().map(File::new).collect(Collectors.toList());
30     }
31
32     public DirectoryParameters mustExist() {
33         existenceType = ExistenceType.MUST_EXIST;
34         return this;
35     }
36
37     public DirectoryParameters mustNotExist() {
38         existenceType = ExistenceType.MUST_NOT_EXIST;
39         return this;
40     }
41
42     @Override
43     public boolean validate(final String value) {
44         final File file = new File(value);
45
46         if (existenceType == ExistenceType.MUST_EXIST) {
47             return file.exists() && file.isDirectory();
48         }
49
50         if (existenceType == ExistenceType.MUST_NOT_EXIST) {
51             return !file.exists();
52         }
53
54         if (existenceType == ExistenceType.DOES_NOT_MATTER) {
55             if (file.exists())
56                 if (file.isFile())
57                     return false;
58
59             return true;
60         }
61
62         return false;
63     }
64
65 }