package com.din.din.webapp.beans;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import com.din.din.model.dao.ProjectDAO;
import com.din.din.model.entities.Project;
import com.din.din.model.entities.Project.ProjectState;
import com.din.din.model.util.EntityCachingManager;
import com.din.din.webapp.beans.interfaces.FoodManager;
import com.din.din.webapp.beans.interfaces.ProjectWizard;
import com.din.din.webapp.beans.interfaces.QuantityTypeManager;
import com.din.din.webapp.beans.interfaces.RecipeManager;
import com.din.din.webapp.beans.util.LoginUtil;
import com.google.appengine.api.users.User;
@ManagedBean
@SessionScoped
public class ProjectBean implements Serializable {
private static final long serialVersionUID = -119440868284639498L;
public static final String ACCESSOR = "#{projectBean}";
private boolean firstViewBuilder = true;
private boolean firstViewPlanner = true;
private boolean projectLoaded = false;
private ProjectWizard wizard = null;
private Project project = null;
private FoodManager foodManager = null;
private RecipeManager recipeManager = null;
private QuantityTypeManager quantityTypeManager = null;
@ManagedProperty("#{cacheBean.cache}")
private EntityCachingManager cache = null;
public ProjectBean() {
loadProject();
}
public boolean isProjectConfigured() {
loadProject();
return project != null && project.getState() != ProjectState.CONFIGURE;
}
public void setProjectConfigured(boolean configured) {
if(configured && this.project == null && wizard != null && wizard.isFinished()) {
// Override first view status, since the only time this condition can be met is if
// wizard has successfully created new project
setFirstViewBuilder(true);
setFirstViewPlanner(true);
}
}
private synchronized void loadProject() {
if(!projectLoaded) {
User user = LoginUtil.getCurrentUser();
if(user != null) {
projectLoaded = true;
setProject(ProjectDAO.getProjectByUser(user));
}
}
}
public synchronized ProjectWizard getWizard() {
if(wizard == null) {
Project project = getProject();
if(project != null) {
wizard = new ProjectWizard(project, cache);
} else {
wizard = new ProjectWizard(cache);
}
}
return wizard;
}
public synchronized FoodManager getFoodManager() {
if(foodManager == null) {
foodManager = new FoodManager(getProject(), cache);
}
return foodManager;
}
public synchronized RecipeManager getRecipeManager() {
if(recipeManager == null) {
recipeManager = new RecipeManager(getProject(), cache);
}
return recipeManager;
}
public synchronized QuantityTypeManager getQuantityTypeManager() {
if(quantityTypeManager == null) {
quantityTypeManager = new QuantityTypeManager(getProject(), cache);
}
return quantityTypeManager;
}
public Project getProject() {
loadProject();
return project;
}
protected synchronized void setProject(Project project) {
if(project != null) {
boolean firstView = project.getState() == ProjectState.CONFIGURE;
setFirstViewBuilder(firstView);
setFirstViewPlanner(firstView);
}
this.project = project;
}
public boolean isFirstViewBuilder() {
return firstViewBuilder;
}
public void setFirstViewBuilder(boolean firstViewBuilder) {
this.firstViewBuilder = firstViewBuilder;
}
public boolean isFirstViewPlanner() {
return firstViewPlanner;
}
public void setFirstViewPlanner(boolean firstViewPlanner) {
this.firstViewPlanner = firstViewPlanner;
}
public EntityCachingManager getCache() {
return cache;
}
public void setCache(EntityCachingManager cache) {
this.cache = cache;
}
public void onDialogBuilderClose() {
setFirstViewBuilder(false);
}
public void onDialogPlannerClose() {
setFirstViewPlanner(false);
}
}