/*
 * Copyright 2004, Ugo Cei.
 * Licensed  under the  Apache License,  Version 2.0  (the "License");
 * you may not use  this file  except in  compliance with the License.
 * You may obtain a copy of the License at 
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed  under the  License is distributed on an "AS IS" BASIS,
 * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
 * implied.
 * 
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.butterfly.generation;

import org.apache.butterfly.xml.XMLProducer;


/**
 * Description of Generator.
 * 
 * @version CVS $Id: Generator.java,v 1.1 2004/07/23 08:47:20 ugo Exp $
 */
public interface Generator extends XMLProducer {
    public void generate();
}
