/*
 * Hibernate Search, full-text search for your domain model
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later
 * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */

package org.hibernate.search.test.configuration.mutablefactory.generated;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * @author Emmanuel Bernard
 */
public final class Generator {

	private Generator() {
		//not allowed
	}

	public static void main(String[] args) {
		StringBuilder generated = new StringBuilder( );
		generated.append( "package org.hibernate.search.test.configuration.mutablefactory.generated;\n\n" )
			.append( "import org.hibernate.search.annotations.DocumentId;\n" )
			.append( "import org.hibernate.search.annotations.Field;\n" )
			.append( "import org.hibernate.search.annotations.Indexed;\n\n" )
			.append( "/** Class generated container 100 inner classes */" )
			.append( "public class Generated {\n" );

		StringBuilder inner = new StringBuilder( );
		inner.append( "\t" ).append( "@Indexed" ).append( "\n" )
				.append( "\t" ).append( "public static class Ax {" ).append( "\n" )
				.append( "\t" ).append( "\t" ).append( "public Ax(Integer id, String name) { this.id = id; this.name = name; }" ).append( "\n\n" )
				.append( "\t" ).append( "\t" ).append( "@DocumentId" ).append( "\n" )
				.append( "\t" ).append( "\t" ).append( "public Integer getId() {return id;}" ).append( "\n" )
				.append( "\t" ).append( "\t" ).append( "public void setId(Integer id) { this.id = id; }" ).append( "\n" )
				.append( "\t" ).append( "\t" ).append( "private Integer id;" ).append( "\n\n" )
				.append( "\t" ).append( "\t" ).append( "@Field" ).append( "\n" )
				.append( "\t" ).append( "\t" ).append( "public String getName() {return name;}" ).append( "\n" )
				.append( "\t" ).append( "\t" ).append( "public void setName(String name) { this.name = name; }" ).append( "\n" )
				.append( "\t" ).append( "\t" ).append( "private String name;" ).append( "\n" )
				.append( "\t}\n\n" );
		String innerString = inner.toString();
		for ( int i = 0 ; i < 100 ; i++ ) {
			generated.append( innerString.replace( "Ax", "A" + i ) );
		}

		generated.append( "}\n" );
		File f = new File( "./Generated.java" );
		try {
			OutputStreamWriter fw = new OutputStreamWriter( new FileOutputStream( f ), "UTF-8" );
			fw.write( generated.toString() );
			fw.close();
		}
		catch (IOException e) {
			System.out.println( "Error while generating classes" );
			e.printStackTrace();
		}
		System.out.println( "Generated in :" + f.getAbsolutePath() );
	}
}
