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 * Proxies a {@link Generator}, examines its generated {@link ProductWrapper}s for the "last" tag and, if one is found, 33 * replaces a boolean array value at a given index ({@link #indexOfLastFlag}) with true, otherwise with false.<br/> 34 * <br/> 35 * Created: 12.09.2011 12:27:34 36 * 37 * @author Volker Bergmann 38 * @since 0.7.0 39 */ 40 public class LastFlagGenerator extends GeneratorProxy<Object[]> { 41 42 private final int indexOfLastFlag; 43 44 /** 45 * Instantiates a new Last flag generator. 46 * 47 * @param source the source 48 * @param indexOfLastFlag the index of last flag 49 */ 50 public LastFlagGenerator(Generator<Object[]> source, int indexOfLastFlag) { 51 super(source); 52 this.indexOfLastFlag = indexOfLastFlag; 53 } 54 55 @Override 56 public ProductWrapper<Object[]> generate(ProductWrapper<Object[]> wrapper) { 57 wrapper = super.generate(wrapper); 58 if (wrapper != null) { 59 Object[] product = wrapper.unwrap(); 60 if (indexOfLastFlag == product.length) { 61 // the @Last parameter might be additional to an imported array of size = paramCount - 1 62 Object[] tmp = new Object[product.length + 1]; 63 System.arraycopy(product, 0, tmp, 0, product.length); 64 product = tmp; 65 wrapper.wrap(product, false); 66 } 67 product[indexOfLastFlag] = ("true".equals(wrapper.getTag("last"))); 68 } 69 return wrapper; 70 } 71 72 }