1 /*
2 * (c) Copyright 2006-2020 by rapiddweller GmbH & Volker Bergmann. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, is permitted under the terms of the
6 * GNU General Public License.
7 *
8 * For redistributing this software or a derivative work under a license other
9 * than the GPL-compatible Free Software License as defined by the Free
10 * Software Foundation or approved by OSI, you must first obtain a commercial
11 * license to this software product from rapiddweller GmbH & Volker Bergmann.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14 * WITHOUT A WARRANTY OF ANY KIND. ALL EXPRESS OR IMPLIED CONDITIONS,
15 * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE
17 * HEREBY EXCLUDED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 * POSSIBILITY OF SUCH DAMAGE.
25 */
26
27 package com.rapiddweller.benerator.wrapper;
28
29 import com.rapiddweller.benerator.Generator;
30 import com.rapiddweller.benerator.NonNullGenerator;
31
32 /**
33 * {@link GeneratorProxy} implementation which implements the {@link NonNullGenerator} interface and
34 * supports its implementors as source {@link Generator}.<br/><br/>
35 * Created: 27.07.2011 11:57:17
36 *
37 * @param <E> the type parameter
38 * @author Volker Bergmann
39 * @since 0.7.0
40 */
41 public abstract class NonNullGeneratorProxy<E> extends GeneratorProxy<E> implements NonNullGenerator<E> {
42
43 // constructors ----------------------------------------------------------------------------------------------------
44
45 /**
46 * Instantiates a new Non null generator proxy.
47 *
48 * @param generatedType the generated type
49 */
50 public NonNullGeneratorProxy(Class<E> generatedType) {
51 super(generatedType);
52 }
53
54 /**
55 * Instantiates a new Non null generator proxy.
56 *
57 * @param source the source
58 */
59 public NonNullGeneratorProxy(NonNullGenerator<E> source) {
60 super(source);
61 }
62
63 /**
64 * Returns the source generator
65 */
66 @Override
67 public NonNullGenerator<E> getSource() {
68 return (NonNullGenerator<E>) super.getSource();
69 }
70
71 /**
72 * Sets the source generator
73 */
74 @Override
75 public void setSource(Generator<E> source) {
76 if (!(source instanceof NonNullGenerator)) {
77 throw new IllegalArgumentException("Not a NonNullGenerator: " + source);
78 }
79 super.setSource(source);
80 }
81
82 /**
83 * Generate from not null source e.
84 *
85 * @return the e
86 */
87 protected final E generateFromNotNullSource() {
88 return getSource().generate();
89 }
90
91 @Override
92 public final ProductWrapper<E> generate(ProductWrapper<E> wrapper) {
93 E result = generate();
94 return (result != null ? wrapper.wrap(result) : null);
95 }
96
97 @Override
98 public E generate() {
99 return generateFromNotNullSource();
100 }
101
102 }