View Javadoc
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  
31  /**
32   * Uses n String generators and appends the output of each one in each generate() call.<br/>
33   * <br/>
34   * Created: 17.11.2007 17:33:21
35   *
36   * @author Volker Bergmann
37   */
38  public class CompositeStringGenerator extends GeneratorWrapper<String[], String> {
39  
40    /**
41     * The Unique.
42     */
43    protected final boolean unique;
44  
45    // constructors ----------------------------------------------------------------------------------------------------
46  
47    /**
48     * Instantiates a new Composite string generator.
49     */
50    public CompositeStringGenerator() {
51      this(false);
52    }
53  
54    /**
55     * Instantiates a new Composite string generator.
56     *
57     * @param unique  the unique
58     * @param sources the sources
59     */
60    @SafeVarargs
61    public CompositeStringGenerator(boolean unique, Generator<String>... sources) {
62      super(new MultiSourceArrayGenerator<>(String.class, unique, sources));
63      this.unique = unique;
64    }
65  
66    /**
67     * Is unique boolean.
68     *
69     * @return the boolean
70     */
71    public boolean isUnique() {
72      return unique;
73    }
74  
75    /**
76     * Sets sources.
77     *
78     * @param sources the sources
79     */
80    public void setSources(Generator<String>[] sources) {
81      ((MultiSourceArrayGenerator<String>) getSource()).setSources(sources);
82    }
83  
84    // Generator interface ---------------------------------------------------------------------------------------------
85  
86    @Override
87    public Class<String> getGeneratedType() {
88      return String.class;
89    }
90  
91    @Override
92    public ProductWrapper<String> generate(ProductWrapper<String> wrapper) {
93      StringBuilder builder = new StringBuilder();
94      ProductWrapper<String[]> parts = generateFromSource();
95      if (parts == null) {
96        return null;
97      }
98      for (String part : parts.unwrap()) {
99        builder.append(part);
100     }
101     return wrapper.wrap(builder.toString());
102   }
103 
104   // java.lang.Object overrides --------------------------------------------------------------------------------------
105 
106   @Override
107   public String toString() {
108     Generator<String[]> source = getSource();
109     return getClass().getSimpleName() + "[unique=" + unique + ", source=" + source + ']';
110   }
111 
112   // private helpers -------------------------------------------------------------------------------------------------
113 
114   /**
115    * Wrap generator.
116    *
117    * @param unique  the unique
118    * @param sources the sources
119    * @return the generator
120    */
121   protected static Generator<String[]> wrap(boolean unique, Generator<?>... sources) {
122     return new MultiSourceArrayGenerator<>(String.class, unique, WrapperFactory.asStringGenerators(sources));
123   }
124 
125 }