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 }