package dataQualityWebSite;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.ListIterator;


public class GroupList extends LinkedList<GroupElement>
{
	private static final long serialVersionUID = 1L;
	private Statement selectGroupStatement;
 	private ResultSet groupResultSet;
 	private boolean groupFound;
 	private Connection connection;
 	

 	public GroupList(Connection connection)
 	{
 		this.connection = connection;
 		
 		try
 		{
 			selectGroupStatement = connection.createStatement();
 		}
 		catch(SQLException sqle)
 		{
 			System.out.println(sqle);
 		}

 		try
 		{
 			groupResultSet = selectGroupStatement.executeQuery
 			(
 				"select " +
 					"id, " +
 					"title " +
 				"from " +
 					"factor_group " +
 				"order by " +
 					"group_sequence"
 			);
	 	}
 		catch(SQLException sqle)
 		{
 			System.out.println(sqle);
 		}
 		
 		groupFound = true;
 		GroupElement dqGroupElement;
 		
 		while(groupFound)
 		{
 			try
 			{
 				groupFound = groupResultSet.next();
 			} 
 			catch (SQLException e)
 			{
 				e.printStackTrace();
 			}
 			
 			if (groupFound)
 			{
 				try
 				{
 					dqGroupElement = new GroupElement();
 					dqGroupElement.setGroupId(groupResultSet.getInt("id"));
 					dqGroupElement.setGroupTitle(groupResultSet.getString("title"));
 					this.add(dqGroupElement);
 				} 
 				catch (SQLException e)
 				{
 					e.printStackTrace();
 				}
 			}
 		}
 		try 
 		{
 			selectGroupStatement.close();
 		} 
 		catch (SQLException e) 
 		{
 			e.printStackTrace();
 		}
 	}
 	
	
	public void generate(FactorList dqFactorList, Configuration configuration)
	{
		GroupFactorList groupFactorList;
		ListIterator<GroupElement> iterator;
		GroupElement dqGroupElement;
		
		for (iterator = this.listIterator(); iterator.hasNext(); )
		{
			dqGroupElement = (GroupElement) iterator.next();
			
			groupFactorList = new GroupFactorList(dqGroupElement, dqFactorList, connection);

			new GroupDetail(dqGroupElement, groupFactorList, dqFactorList, configuration);
		}
	}
}

