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; 28 29 import com.rapiddweller.benerator.wrapper.ProductWrapper; 30 31 import java.io.Closeable; 32 import java.io.Flushable; 33 34 /** 35 * Abstraction of an object that consumes (possibly larger quantities of) objects. 36 * Consumation is a two-step process: For each object A to be consumed, Benerator 37 * first calls {@link #startConsuming(ProductWrapper)}, then 38 * {@link #finishConsuming(ProductWrapper)} with a wrapper of this object: 39 * <pre> 40 * startConsuming(A); 41 * finishConsuming(A); 42 * </pre> 43 * If an object A has a 'sub object' B, (defined via nested a >generate< 44 * statement), Benerator represents the recursion by the following invocation sequence: 45 * <pre> 46 * startConsuming(A); 47 * startConsuming(B); 48 * finishConsuming(B); 49 * finishConsuming(A); 50 * </pre> 51 * <br/> 52 * Created: 01.02.2008 16:15:09 53 * 54 * @author Volker Bergmann 55 * @since 0.4.0 56 */ 57 public interface Consumer extends Flushable, Closeable { 58 59 /** 60 * Starts consumption of an object. For invocation details see the class documentation. 61 * 62 * @param wrapper the wrapper 63 */ 64 void startConsuming(ProductWrapper<?> wrapper); 65 66 /** 67 * Starts consumption of an object. For invocation details see the class documentation. 68 * 69 * @param wrapper the wrapper 70 */ 71 void finishConsuming(ProductWrapper<?> wrapper); 72 73 /** 74 * Is called by Benerator for advising the Consumer to finish processing of the objects 75 * consumed so far. In Benerator descriptor files, the flushing behavior is controlled 76 * by the <code>pageSize</code> attribute. 77 */ 78 @Override 79 void flush(); 80 81 /** 82 * When called, the implementor has to close and free all resources. 83 * It will not receive any more calls. 84 */ 85 @Override 86 void close(); 87 88 }