View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.io.build;
19  
20  import java.io.File;
21  import java.io.InputStream;
22  import java.io.OutputStream;
23  import java.io.Reader;
24  import java.io.Writer;
25  import java.net.URI;
26  import java.nio.file.Path;
27  import java.nio.file.Paths;
28  
29  import org.apache.commons.io.build.AbstractOrigin.ByteArrayOrigin;
30  import org.apache.commons.io.build.AbstractOrigin.CharSequenceOrigin;
31  import org.apache.commons.io.build.AbstractOrigin.FileOrigin;
32  import org.apache.commons.io.build.AbstractOrigin.InputStreamOrigin;
33  import org.apache.commons.io.build.AbstractOrigin.OutputStreamOrigin;
34  import org.apache.commons.io.build.AbstractOrigin.PathOrigin;
35  import org.apache.commons.io.build.AbstractOrigin.ReaderOrigin;
36  import org.apache.commons.io.build.AbstractOrigin.URIOrigin;
37  import org.apache.commons.io.build.AbstractOrigin.WriterOrigin;
38  
39  /**
40   * Abstracts building an instance of {@code T}.
41   *
42   * @param <T> the type of instances to build.
43   * @param <B> the type of builder subclass.
44   * @since 2.12.0
45   */
46  public abstract class AbstractOriginSupplier<T, B extends AbstractOriginSupplier<T, B>> extends AbstractSupplier<T, B> {
47  
48      /**
49       * Constructs a new byte array origin for a byte array.
50       *
51       * @param origin the byte array.
52       * @return a new byte array origin.
53       */
54      protected static ByteArrayOrigin newByteArrayOrigin(final byte[] origin) {
55          return new ByteArrayOrigin(origin);
56      }
57  
58      /**
59       * Constructs a new CharSequence origin for a CharSequence.
60       *
61       * @param origin the CharSequence.
62       * @return a new file origin.
63       * @since 2.13.0
64       */
65      protected static CharSequenceOrigin newCharSequenceOrigin(final CharSequence origin) {
66          return new CharSequenceOrigin(origin);
67      }
68  
69      /**
70       * Constructs a new file origin for a file.
71       *
72       * @param origin the file.
73       * @return a new file origin.
74       */
75      protected static FileOrigin newFileOrigin(final File origin) {
76          return new FileOrigin(origin);
77      }
78  
79      /**
80       * Constructs a new file origin for a file path.
81       *
82       * @param origin the file path.
83       * @return a new file origin.
84       */
85      protected static FileOrigin newFileOrigin(final String origin) {
86          return new FileOrigin(new File(origin));
87      }
88  
89      /**
90       * Constructs a new input stream origin for a file.
91       *
92       * @param origin the input stream.
93       * @return a new input stream origin.
94       */
95      protected static InputStreamOrigin newInputStreamOrigin(final InputStream origin) {
96          return new InputStreamOrigin(origin);
97      }
98  
99      /**
100      * Constructs a new output stream origin for a file.
101      *
102      * @param origin the output stream.
103      * @return a new output stream origin.
104      */
105     protected static OutputStreamOrigin newOutputStreamOrigin(final OutputStream origin) {
106         return new OutputStreamOrigin(origin);
107     }
108 
109     /**
110      * Constructs a new path origin for a file.
111      *
112      * @param origin the path.
113      * @return a new path origin.
114      */
115     protected static PathOrigin newPathOrigin(final Path origin) {
116         return new PathOrigin(origin);
117     }
118 
119     /**
120      * Constructs a new path name origin for a path name.
121      *
122      * @param origin the path name.
123      * @return a new path name origin.
124      */
125     protected static PathOrigin newPathOrigin(final String origin) {
126         return new PathOrigin(Paths.get(origin));
127     }
128 
129     /**
130      * Constructs a new reader origin for a reader.
131      *
132      * @param origin the reader.
133      * @return a new reader origin.
134      */
135     protected static ReaderOrigin newReaderOrigin(final Reader origin) {
136         return new ReaderOrigin(origin);
137     }
138 
139     /**
140      * Constructs a new reader origin for a URI.
141      *
142      * @param origin the URI.
143      * @return a new URI origin.
144      */
145     protected static URIOrigin newURIOrigin(final URI origin) {
146         return new URIOrigin(origin);
147     }
148 
149     /**
150      * Constructs a new writer origin for a file.
151      *
152      * @param origin the writer.
153      * @return a new writer .
154      */
155     protected static WriterOrigin newWriterOrigin(final Writer origin) {
156         return new WriterOrigin(origin);
157     }
158 
159     /**
160      * The underlying origin.
161      */
162     private AbstractOrigin<?, ?> origin;
163 
164     /**
165      * Checks whether the origin is null.
166      *
167      * @return the origin.
168      * @throws IllegalStateException if the {@code origin} is {@code null}.
169      */
170     protected AbstractOrigin<?, ?> checkOrigin() {
171         if (origin == null) {
172             throw new IllegalStateException("origin == null");
173         }
174         return origin;
175     }
176 
177     /**
178      * Gets the origin.
179      *
180      * @return the origin.
181      */
182     protected AbstractOrigin<?, ?> getOrigin() {
183         return origin;
184     }
185 
186     /**
187      * Tests whether the origin is null.
188      *
189      * @return whether the origin is null.
190      */
191     protected boolean hasOrigin() {
192         return origin != null;
193     }
194 
195     /**
196      * Sets a new origin.
197      *
198      * @param origin the new origin.
199      * @return this
200      */
201     public B setByteArray(final byte[] origin) {
202         return setOrigin(newByteArrayOrigin(origin));
203     }
204 
205     /**
206      * Sets a new origin.
207      *
208      * @param origin the new origin.
209      * @return this
210      * @since 2.13.0
211      */
212     public B setCharSequence(final CharSequence origin) {
213         return setOrigin(newCharSequenceOrigin(origin));
214     }
215 
216     /**
217      * Sets a new origin.
218      *
219      * @param origin the new origin.
220      * @return this
221      */
222     public B setFile(final File origin) {
223         return setOrigin(newFileOrigin(origin));
224     }
225 
226     /**
227      * Sets a new origin.
228      *
229      * @param origin the new origin.
230      * @return this
231      */
232     public B setFile(final String origin) {
233         return setOrigin(newFileOrigin(origin));
234     }
235 
236     /**
237      * Sets a new origin.
238      *
239      * @param origin the new origin.
240      * @return this
241      */
242     public B setInputStream(final InputStream origin) {
243         return setOrigin(newInputStreamOrigin(origin));
244     }
245 
246     /**
247      * Sets a new origin.
248      *
249      * @param origin the new origin.
250      * @return this
251      */
252     protected B setOrigin(final AbstractOrigin<?, ?> origin) {
253         this.origin = origin;
254         return asThis();
255     }
256 
257     /**
258      * Sets a new origin.
259      *
260      * @param origin the new origin.
261      * @return this
262      */
263     public B setOutputStream(final OutputStream origin) {
264         return setOrigin(newOutputStreamOrigin(origin));
265     }
266 
267     /**
268      * Sets a new origin.
269      *
270      * @param origin the new origin.
271      * @return this
272      */
273     public B setPath(final Path origin) {
274         return setOrigin(newPathOrigin(origin));
275     }
276 
277     /**
278      * Sets a new origin.
279      *
280      * @param origin the new origin.
281      * @return this
282      */
283     public B setPath(final String origin) {
284         return setOrigin(newPathOrigin(origin));
285     }
286 
287     /**
288      * Sets a new origin.
289      *
290      * @param origin the new origin.
291      * @return this
292      */
293     public B setReader(final Reader origin) {
294         return setOrigin(newReaderOrigin(origin));
295     }
296 
297     /**
298      * Sets a new origin.
299      *
300      * @param origin the new origin.
301      * @return this
302      */
303     public B setURI(final URI origin) {
304         return setOrigin(newURIOrigin(origin));
305     }
306 
307     /**
308      * Sets a new origin.
309      *
310      * @param origin the new origin.
311      * @return this
312      */
313     public B setWriter(final Writer origin) {
314         return setOrigin(newWriterOrigin(origin));
315     }
316 }