/* * (c) Copyright 2006-2011 by Volker Bergmann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, is permitted under the terms of the * GNU General Public License. * * For redistributing this software or a derivative work under a license other * than the GPL-compatible Free Software License as defined by the Free * Software Foundation or approved by OSI, you must first obtain a commercial * license to this software product from Volker Bergmann. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * WITHOUT A WARRANTY OF ANY KIND. ALL EXPRESS OR IMPLIED CONDITIONS, * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE * HEREBY EXCLUDED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ package org.databene.benerator; import java.io.Closeable; import org.databene.benerator.GeneratorContext; import org.databene.benerator.wrapper.ProductWrapper; import org.databene.commons.Resettable; import org.databene.commons.ThreadAware; /** * This is the basic Generator interface, the mother of all generators.<br/> * <br/> * <b>Generator States</b><br/> * A Generator may be in one of three states: * <ul> * <li><i>constructing</i>: The generator is under construction. * This may take several steps, since generators need to be JavaBeans. * The generator may transit into the available state automatically * or manually when the validate() method is called.</li> * <li><i>available</i>: Generator construction is done and the generator is available. * The user may loop the Generator via generate().</li> * <li><i>unavailable</i>: The Generator may become unavailable automatically if its value space is depleted or * manually when close() has been invoked. The Generator may be made <i>available</i> again by calling reset(). * When <i>unavailable</i>, the generator must be in a state in which it can be safely garbage collected.</li> * </ul> * * <b>Developer Notes:</b><br/> * When implementing a custom generator, you should make it a JavaBean: * <ul> * <li>Implement a public default (no-arg) constructor</li> * <li>make each relevant property configurable by a set-method</li> * </ul> * <br/> * Created: 07.06.2006 18:51:28 * @since 0.1 * @author Volker Bergmann */ public interface Generator<E> extends ThreadAware, Resettable, Closeable { /** * Declares the type of the objects returned by the generate() method. */ Class<E> getGeneratedType(); void init(GeneratorContext context); boolean wasInitialized(); /** * Returns an instance of the generic type E. */ ProductWrapper<E> generate(ProductWrapper<E> wrapper); /** * Closes the generator. After invocation the state is <i>unavailable</i>. */ void close(); }