package com.din.din.webapp.beans.interfaces;
import javax.faces.application.FacesMessage;
import javax.persistence.EntityManager;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FlowEvent;
import com.din.din.model.dao.ProjectDAO;
import com.din.din.model.dao.QuantityTypeDAO.MeasurementSystem;
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.model.webapp.Wizard;
import com.din.din.webapp.beans.util.BeanUtil;
import com.din.din.webapp.beans.util.LoginUtil;
import com.google.appengine.api.users.User;
public class ProjectWizard extends Wizard<Project> {
private boolean preferMetricSystem = true;
public ProjectWizard(EntityCachingManager cache) {
this(null, cache);
User user = LoginUtil.getCurrentUser();
Project project = ProjectDAO.getOrCreateProjectByUser(user, cache);
setEntity(project);
setFinished(project.getState() == ProjectState.ACTIVE);
}
public ProjectWizard(Project project, EntityCachingManager cache) {
super(project, cache);
if(project != null) {
setFinished(project.getState() == ProjectState.ACTIVE);
}
}
public Project getProject() {
return getEntity();
}
@Override
public String onTransition(FlowEvent event) {
final String[] tabIds = new String[] { "preferences", "agreement", "confirm" };
if(event.getOldStep().equals(tabIds[1]) && event.getNewStep().equals(tabIds[2]) && !getEntity().isConfirmedAgreement()) {
BeanUtil.addMessageFmt(FacesMessage.SEVERITY_WARN, "start.agreement", "start.agreement.youmustagree");
RequestContext context = RequestContext.getCurrentInstance();
context.update("startForm:growl");
return event.getOldStep();
}
return event.getNewStep();
}
@Override
protected void onPreSave(EntityManager entityManager, Project project) throws Exception {
ProjectDAO.createDefaults(entityManager, project, preferMetricSystem ? MeasurementSystem.Metric : MeasurementSystem.Imperial, getCache());
}
@Override
protected String onSaveSuccess(Project project) {
return "build?faces-redirect=true";
}
@Override
public synchronized String save(boolean committed) {
Project project = getEntity();
if(committed) {
project.setState(ProjectState.ACTIVE);
}
return super.save(committed);
}
@Override
protected String onSaveFailure(Project project) {
project.setState(ProjectState.CONFIGURE);
return super.onSaveFailure(project);
}
public boolean isPreferMetricSystem() {
return preferMetricSystem;
}
public void setPreferMetricSystem(boolean preferMetricSystem) {
this.preferMetricSystem = preferMetricSystem;
}
}