935ea9f26f993cb2b40b17358a19eae84ed54065
[cli-helper.git] / src / main / java / eu / svjatoslav / commons / cli_helper / parameter_parser / parameter / FileOption.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.ParameterCount;
8 import eu.svjatoslav.commons.cli_helper.parameter_parser.Option;
9
10 import java.io.File;
11
12 public class FileOption extends Option<File, FileOption> {
13
14     private ExistenceType existenceType = ExistenceType.DOES_NOT_MATTER;
15
16     public FileOption(final String description) {
17         super(description, ParameterCount.ONE);
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         switch (existenceType) {
45             case MUST_EXIST:
46                 return "Existing file.";
47             case MUST_NOT_EXIST:
48                 return "Non-existing file.";
49             default:
50                 return "File.";
51         }
52     }
53
54     @Override
55     public File getValue() {
56
57         if (parameters.size() != 1)
58             throw new RuntimeException("Parameter " + description
59                     + " shall have exactly 1 argument.");
60
61         return new File(parameters.get(0));
62     }
63
64     public FileOption mustExist() {
65         existenceType = ExistenceType.MUST_EXIST;
66         return this;
67     }
68
69     public FileOption mustNotExist() {
70         existenceType = ExistenceType.MUST_NOT_EXIST;
71         return this;
72     }
73
74     @Override
75     public boolean isValid(final java.lang.String value) {
76         return validateFile(existenceType, value);
77     }
78
79 }