View Javadoc
1   /*
2    * Copyright (C) 2019 sw4j.org
3    *
4    * This program is free software: you can redistribute it and/or modify
5    * it under the terms of the GNU General Public License as published by
6    * the Free Software Foundation, either version 3 of the License, or
7    * (at your option) any later version.
8    *
9    * This program is distributed in the hope that it will be useful,
10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   * GNU General Public License for more details.
13   *
14   * You should have received a copy of the GNU General Public License
15   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16   */
17  package org.sw4j.tool.barcode.random.config;
18  
19  import com.fasterxml.jackson.annotation.JsonCreator;
20  import com.fasterxml.jackson.annotation.JsonProperty;
21  
22  /**
23   * <p>
24   * This class configures a file.
25   * </p>
26   * <p>
27   * To create a new instance programmatically use the
28   * {@link org.sw4j.tool.barcode.random.config.FileConfig.Builder Builder} which can be obtained by the method
29   * {@link #builder()}.
30   * </p>
31   * <p>
32   * This class is immutable.
33   * </p>
34   * @author Uwe Plonus &lt;u.plonus@gmail.com&gt;
35   */
36  public class FileConfig {
37  
38      /**
39       * <p>
40       * The name of the file.
41       * </p>
42       */
43      private final String name;
44  
45      /**
46       * <p>
47       * Create a new {@code FileConfig} with the given file name.
48       * </p>
49       * <p>
50       * This constructor is annotated so that a YAML or JSON parsed with jackson fasterxml can create an instance
51       * directly.
52       * </p>
53       * @param name the name of the file configuration.
54       * @throws IllegalArgumentException if {@code name} is {@code null}.
55       */
56      @JsonCreator
57      public FileConfig(@JsonProperty("name") final String name) {
58          if (name == null || "".equals(name.trim())) {
59              throw new IllegalArgumentException(String.format("%s: Missing name", getClass().getSimpleName()));
60          }
61          this.name = name;
62      }
63  
64      /**
65       * <p>
66       * The name of the file configured.
67       * </p>
68       * @return the name of the file.
69       */
70      public String getName() {
71          return name;
72      }
73  
74      /**
75       * <p>
76       * Return a {@link org.sw4j.tool.barcode.random.config.FileConfig.Builder Builder} that can be used to build a
77       * config.
78       * </p>
79       * @return a {@link org.sw4j.tool.barcode.random.config.FileConfig.Builder Builder}.
80       */
81      public static Builder builder() {
82          return new Builder();
83      }
84  
85  
86      /**
87       * <p>
88       * This class is a Builder to build a {@link org.sw4j.tool.barcode.random.config.FileConfig FileConfig}
89       * programmatically. All methods to set the values are fluent to ease the building of a configuration.
90       * </p>
91       * <p>
92       * This class is not thread save.
93       * </p>
94       * @author Uwe Plonus &lt;u.plonus@gmail.com&gt;
95       */
96      public static class Builder {
97  
98          /**
99           * <p>
100          * The name of the file.
101          * </p>
102          */
103         private String name;
104 
105         /**
106          * <p>
107          * Create a new {@code Builder}.
108          * </p>
109          */
110         public Builder() {
111         }
112 
113         /**
114          * <p>
115          * Set the name of the file.
116          * </p>
117          * @param name the name of the file.
118          * @return the builder for a fluent interface.
119          */
120         public Builder setName(final String name) {
121             this.name = name;
122             return this;
123         }
124 
125         /**
126          * <p>
127          * Build a new {@link org.sw4j.tool.barcode.random.config.FileConfig FileConfig} with the parameters set.
128          * </p>
129          * @return the new created {@link org.sw4j.tool.barcode.random.config.FileConfig FileConfig}.
130          * @throws IllegalArgumentException if {@code name} is {@code null}.
131          */
132         public FileConfig build() {
133             return new FileConfig(name);
134         }
135 
136     }
137 
138 }