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 }