• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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      */
newByteArrayOrigin(final byte[] origin)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      */
newCharSequenceOrigin(final CharSequence origin)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      */
newFileOrigin(final File origin)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      */
newFileOrigin(final String origin)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      */
newInputStreamOrigin(final InputStream origin)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      */
newOutputStreamOrigin(final OutputStream origin)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      */
newPathOrigin(final Path origin)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      */
newPathOrigin(final String origin)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      */
newReaderOrigin(final Reader origin)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      */
newURIOrigin(final URI origin)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      */
newWriterOrigin(final Writer origin)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      */
checkOrigin()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      */
getOrigin()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      */
hasOrigin()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      */
setByteArray(final byte[] origin)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      */
setCharSequence(final CharSequence origin)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      */
setFile(final File origin)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      */
setFile(final String origin)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      */
setInputStream(final InputStream origin)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      */
setOrigin(final AbstractOrigin<?, ?> origin)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      */
setOutputStream(final OutputStream origin)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      */
setPath(final Path origin)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      */
setPath(final String origin)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      */
setReader(final Reader origin)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      */
setURI(final URI origin)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      */
setWriter(final Writer origin)313     public B setWriter(final Writer origin) {
314         return setOrigin(newWriterOrigin(origin));
315     }
316 }
317