5435bc38dc455949718a362388a3f18f78c31a8f
[cli-helper.git] / src / main / java / eu / svjatoslav / commons / cli_helper / parameter_parser / parameter / FileParameter.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.ArgumentCount;
8 import eu.svjatoslav.commons.cli_helper.parameter_parser.Parameter;
9
10 import java.io.File;
11
12 public class FileParameter extends Parameter<File, FileParameter> {
13
14     private ExistenceType existenceType = ExistenceType.DOES_NOT_MATTER;
15
16     public FileParameter(final String description) {
17         super(description, ArgumentCount.SINGLE);
18     }
19
20     protected static boolean validateFile(ExistenceType existenceType, String value) {
21         final File file = new File(value);
22
23         if (existenceType == ExistenceType.MUST_EXIST) {
24             return file.exists() && file.isFile();
25         }
26
27         if (existenceType == ExistenceType.MUST_NOT_EXIST) {
28             return !file.exists();
29         }
30
31         if (existenceType == ExistenceType.DOES_NOT_MATTER) {
32             if (file.exists())
33                 if (file.isDirectory())
34                     return false;
35
36             return true;
37         }
38
39         return false;
40     }
41
42     @Override
43     public java.lang.String describeFormat() {
44         return existenceType.description + " file";
45     }
46
47     @Override
48     public File getValue() {
49
50         if (arguments.size() != 1)
51             throw new RuntimeException("Parameter " + description
52                     + " shall have exactly 1 argument.");
53
54         return new File(arguments.get(0));
55     }
56
57     public FileParameter mustExist() {
58         existenceType = ExistenceType.MUST_EXIST;
59         return this;
60     }
61
62     public FileParameter mustNotExist() {
63         existenceType = ExistenceType.MUST_NOT_EXIST;
64         return this;
65     }
66
67     @Override
68     public boolean validate(final java.lang.String value) {
69         return validateFile(existenceType, value);
70     }
71
72 }