package com.intuit.tank.project;
/*
* #%L
* JSF Support Beans
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import javax.inject.Named;
import com.intuit.tank.util.Messages;
import org.picketlink.Identity;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.model.basic.User;
import com.intuit.tank.ModifiedProjectMessage;
import com.intuit.tank.ProjectBean;
import com.intuit.tank.auth.Security;
import com.intuit.tank.config.TsLoggedIn;
import com.intuit.tank.dao.ProjectDao;
import com.intuit.tank.project.Project;
import com.intuit.tank.project.TestPlan;
import com.intuit.tank.project.Workload;
import com.intuit.tank.qualifier.Modified;
import com.intuit.tank.util.ExceptionHandler;
import com.intuit.tank.vm.api.enumerated.ScriptDriver;
import com.intuit.tank.vm.settings.AccessRight;
@Named
@RequestScoped
public class CreateProjectBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private Identity identity;
@Inject
private IdentityManager identityManager;
@Inject
private Security security;
@Inject
@Modified
private Event<ModifiedProjectMessage> projectEvent;
@Inject
private Messages messages;
@Inject
private ExceptionHandler exceptionHandler;
@Inject
private ProjectBean projectBean;
private String name;
private String productName;
private String scriptDriver = ScriptDriver.Tank.name();
private String comments;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the productName
*/
public String getProductName() {
return productName;
}
/**
* @param productName
* the productName to set
*/
public void setProductName(String productName) {
this.productName = productName;
}
/**
* @return the scriptDriver
*/
public String getScriptDriver() {
return scriptDriver;
}
/**
* @param scriptDriver
* the scriptDriver to set
*/
public void setScriptDriver(String scriptDriver) {
this.scriptDriver = scriptDriver;
}
/**
* @return the comments
*/
public String getComments() {
return comments;
}
/**
* @param comments
* the comments to set
*/
public void setComments(String comments) {
this.comments = comments;
}
/**
*
*/
@TsLoggedIn
public String createNewProject() {
Project project = new Project();
Workload workload = new Workload();
List<Workload> workloads = new ArrayList<Workload>();
workload.setName(name);
workloads.add(workload);
workload.setParent(project);
TestPlan testPlan = TestPlan.builder().name("Main").usersPercentage(100).build();
workload.addTestPlan(testPlan);
project.setName(name);
project.setWorkloads(workloads);
project.setScriptDriver(ScriptDriver.valueOf(scriptDriver));
project.setComments(getComments());
project.setProductName(getProductName());
project.setCreator(identityManager.lookupById(User.class, identity.getAccount().getId()).getLoginName());
try {
project = new ProjectDao().saveOrUpdateProject(project);
projectEvent.fire(new ModifiedProjectMessage(project, this));
messages.info("Project " + name + " has been created.");
projectBean.openProject(project);
} catch (Throwable t) {
exceptionHandler.handle(t);
return null;
}
return "success";
}
public void cancel() {
}
public boolean canCreateProject() {
return security.hasRight(AccessRight.CREATE_PROJECT);
}
}