/* ===================================================================
 * DomainObjectFactory.java
 * 
 * Created Sep 16, 2004 2:41:43 PM
 * 
 * Copyright (c) 2004 Matt Magoffin (spamsqr@msqr.us)
 * 
 * This program is free software; you can redistribute it and/or 
 * modify it under the terms of the GNU General Public License as 
 * published by the Free Software Foundation; either version 2 of 
 * the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License 
 * along with this program; if not, write to the Free Software 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 
 * 02111-1307 USA
 * ===================================================================
 * $Id: DomainObjectFactory.java 74 2009-05-15 04:44:37Z msqr $
 * ===================================================================
 */

package magoffin.matt.ieat.biz;

import magoffin.matt.ieat.domain.AdvancedSearchCriteria;
import magoffin.matt.ieat.domain.Base;
import magoffin.matt.ieat.domain.Course;
import magoffin.matt.ieat.domain.Difficulty;
import magoffin.matt.ieat.domain.Ethnicity;
import magoffin.matt.ieat.domain.Ingredient;
import magoffin.matt.ieat.domain.Meal;
import magoffin.matt.ieat.domain.MealRecipe;
import magoffin.matt.ieat.domain.PrepTime;
import magoffin.matt.ieat.domain.Recipe;
import magoffin.matt.ieat.domain.RecipeComment;
import magoffin.matt.ieat.domain.RecipeIngredient;
import magoffin.matt.ieat.domain.RecipeRating;
import magoffin.matt.ieat.domain.RecipeSearchCriteria;
import magoffin.matt.ieat.domain.RecipeStep;
import magoffin.matt.ieat.domain.System;
import magoffin.matt.ieat.domain.UiData;
import magoffin.matt.ieat.domain.UiEdit;
import magoffin.matt.ieat.domain.UiIndex;
import magoffin.matt.ieat.domain.UiIngredientMatch;
import magoffin.matt.ieat.domain.UiMetaSupport;
import magoffin.matt.ieat.domain.UiPaginationSupport;
import magoffin.matt.ieat.domain.UiParameter;
import magoffin.matt.ieat.domain.UiRecipeMatch;
import magoffin.matt.ieat.domain.UiSearchResults;
import magoffin.matt.ieat.domain.UiSessionData;
import magoffin.matt.ieat.domain.UiUserMatch;
import magoffin.matt.ieat.domain.Unit;
import magoffin.matt.ieat.domain.User;
import magoffin.matt.xweb.XAppContext;
import magoffin.matt.xweb.XwebParameter;

/**
 * Interface for obtaining domain object instances.
 * 
 * @author Matt Magoffin (spamsqr@msqr.us)
 * @version $Revision: 74 $ $Date: 2009-05-15 16:44:37 +1200 (Fri, 15 May 2009) $
 */
public interface DomainObjectFactory {
	
	/**
	 * @return the new instance
	 */
	Base getBaseInstance();
	
	/**
	 * @return the new instance
	 */
	Course getCourseInstance();
	
	/**
	 * @return the new instance
	 */
	Difficulty getDifficultyInstance();
	
	/**
	 * @return the new instance
	 */
	Ethnicity getEthnicityInstance();
	
	/**
	 * @return the new instance
	 */
	Ingredient getIngredientInstance();
	
	/**
	 * @return the new instance
	 */
	Meal getMealInstance();
	
	/**
	 * @return the new instance
	 */
	MealRecipe getMealRecipeInstance();
	
	/**
	 * @return the new instance
	 */
	PrepTime getPrepTimeInstance();
	
	/**
	 * @return the new instance
	 */
	Recipe getRecipeInstance();
	
	/**
	 * @return the new instance
	 */
	RecipeIngredient getRecipeIngredientInstance();
	
	/**
	 * @return the new instance
	 */
	RecipeStep getRecipeStepInstance();
	
	/**
	 * @return the new instance
	 */
	System getSystemInstance();
	
	/**
	 * @return the new instance
	 */
	Unit getUnitInstance();
	
	/**
	 * @return the new instance
	 */
	User getUserInstance();
	
	/**
	 * @return the new instance
	 */
	UiData getUiDataInstance();
	
	/**
	 * @return the new instance
	 */
	UiEdit getUiEditInstance();
	
	/**
	 * @return the new instance
	 */
	UiIndex getIndexInstance();
	
	/**
	 * @return the new instance
	 */
	UiIngredientMatch getIngredientMatchInstance();
	
	/**
	 * @return the new instance
	 */
	RecipeSearchCriteria getRecipeCriteriaInstance();
	
	/**
	 * @return the new instance
	 */
	UiRecipeMatch getRecipeMatchInstance();
	
	/**
	 * @return the new instance
	 */
	UiUserMatch getUserMatchInstance();
	
	/**
	 * @return the new instance
	 */
	UiIndex.IndexSectionType getIndexSelectionTypeInstance();
	
	/**
	 * @return the new instance
	 */
	UiSearchResults getSearchResultsInstance();
	
	/**
	 * @return the new instance
	 */
	UiSearchResults getEmbeddedSearchResultsInstance();
	
	/**
	 * @return the new instance
	 */
	UiSessionData getUiSessionDataInstance();
	
	/**
	 * @param object the domain object to clone
	 * @return the cloned object
	 */
	Object clone(Object object);
	
	/**
	 * @return the new instance
	 */
	RecipeRating getRecipeRatingInstance();
	
	/**
	 * @return the new instance
	 */
	RecipeComment getRecipeCommentInstance();
	
	/**
	 * @return the new instance
	 */
	UiPaginationSupport getPaginationSupportInstance();

	/**
	 * @return the new instance
	 */
	UiMetaSupport getMetaSupportInstance();
	
	/**
	 * @return the new instance
	 */
	UiParameter getParameterInstance();
	
	/**
	 * @return the new instance
	 */
	AdvancedSearchCriteria getAdvancedSearchCriteriaInstance();
	
	/**
	 * Get a new XAppContext instance.
	 * @return new XAppContext instance
	 */
	XAppContext newXAppContextInstance();
	
	/**
	 * Get a new XwebParameter instance.
	 * @return the XwebParameter instance
	 */
	XwebParameter newXwebParameterInstance();
	
}
