Added FileParameters type.
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / commandline / parameterparser / parameter / FileParameters.java
1 /*
2  * Svjatoslav Commons - shared library of common functionality.
3  * Copyright ©2012-2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of version 3 of the GNU Lesser General Public License
7  * or later as published by the Free Software Foundation.
8  */
9
10 package eu.svjatoslav.commons.commandline.parameterparser.parameter;
11
12 import eu.svjatoslav.commons.commandline.parameterparser.ArgumentCount;
13 import eu.svjatoslav.commons.commandline.parameterparser.Parameter;
14
15 import java.io.File;
16 import java.util.List;
17 import java.util.stream.Collectors;
18
19 import static eu.svjatoslav.commons.commandline.parameterparser.parameter.FileParameter.validateFile;
20
21 public class FileParameters extends Parameter<List<File>, FileParameters> {
22
23     private ExistenceType existenceType = ExistenceType.DOES_NOT_MATTER;
24
25     public FileParameters(final String description) {
26         super(description, ArgumentCount.MULTI);
27     }
28
29     @Override
30     public String describeFormat() {
31         return existenceType.description + " files";
32     }
33
34     @Override
35     public List<File> getValue() {
36         return arguments.stream().map(File::new).collect(Collectors.toList());
37     }
38
39     public FileParameters mustExist() {
40         existenceType = ExistenceType.MUST_EXIST;
41         return this;
42     }
43
44     public FileParameters mustNotExist() {
45         existenceType = ExistenceType.MUST_NOT_EXIST;
46         return this;
47     }
48
49     @Override
50     public boolean validate(final String value) {
51         return validateFile(existenceType, value);
52     }
53
54 }