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;
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 &gt;generate&lt;
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  }