/*
 * Created on Feb 8, 2005.
 */
package com.alliancesys.ibatis.testing;

import java.io.Reader;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import com.alliancesys.ibatisdemo.domain.Category;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

import junit.framework.TestCase;

/**
 * <code>{@link IBATISAggregateObjectTest}</code>
 * 
 * @author Mark Nabours
 * 
 */
public class IBATISAggregateObjectTest extends TestCase {

	/**
	 * Constructor for IBATISAggregateObjectTest.
	 * @param arg0
	 */
	public IBATISAggregateObjectTest(String arg0) {
		super(arg0);
	}

	public static void main(String[] args) {
		junit.textui.TestRunner.run(IBATISAggregateObjectTest.class);
	}

	public void testGetCategories() throws Exception {
		Reader reader =
			Resources.getResourceAsReader(
				getClass().getClassLoader(),
				"sql-map-config.xml");
		SqlMapClient sqlMapClient =
			SqlMapClientBuilder.buildSqlMapClient(reader);

		try {
			
			sqlMapClient.startTransaction();
			
			//Fetch a list of categories with lazy load of items.
			List categoriesWithLazyLoad =
				sqlMapClient.queryForList("getAllCategoriesWithLazyLoad", null);
			
			for (Iterator iter = categoriesWithLazyLoad.iterator();
				iter.hasNext();
				) {
				//force lazy load
				((Category)iter.next()).getItems().iterator();				
			}
			//print each category
			for (Iterator iter = categoriesWithLazyLoad.iterator();
				iter.hasNext();
				) {
				System.out.println(iter.next());
			}
			
			// Fetch a list of categories with N+1 solution
			List categoriesWithNPlusOne = sqlMapClient.queryForList("getAllCategoriesWithNPlusOne", null);
			for (Iterator iter = categoriesWithNPlusOne.iterator();
				iter.hasNext();
				) {
				System.out.println(iter.next());		
			}
		} catch (SQLException e) {
			throw e;
		} finally {
			sqlMapClient.endTransaction();
		}

	}

}
