package controllers;
import java.util.List;
import dao.Dao;
import exceptions.ExceptionMapper;
import managers.FactoryManager;
import managers.ProjectManager;
import managers.StationManager;
import managers.UserManager;
import managers.WorkItemManager;
import models.Factory;
import models.Project;
import models.Station;
import models.User;
import models.WorkItem;
import models.WorkItemStateTransition;
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
/**
* Project CRUD services
*
* @author: bbenson
*/
public class Projects extends Controller {
private static final ProjectManager projectManager = new ProjectManager(new Dao<Project>(Project.class),
new FactoryManager(new Dao<Factory>(Factory.class), new StationManager(new Dao<Station>(Station.class))),
new WorkItemManager(new Dao<WorkItem>(WorkItem.class),
new Dao<WorkItemStateTransition>(WorkItemStateTransition.class),
new UserManager(new Dao<User>(User.class)), new StationManager(new Dao<Station>(Station.class))));
public static Result list() {
try {
String state = play.data.Form.form().bindFromRequest().get("state");
List<Project> projects = projectManager.list(state);
return ok(Json.toJson(projects));
} catch (RuntimeException ex) {
return ExceptionMapper.toResult(ex);
}
}
public static Result read(Long projectId) {
try {
Project project = projectManager.read(projectId);
return ok(Json.toJson(project));
} catch (RuntimeException ex) {
return ExceptionMapper.toResult(ex);
}
}
public static Result create() {
try {
Project projectIn = Json.fromJson(request().body().asJson(), Project.class);
Project project = projectManager.create(projectIn);
return created(Json.toJson(project));
} catch (RuntimeException ex) {
return ExceptionMapper.toResult(ex);
}
}
public static Result update(Long projectId) {
try {
Project projectIn = Json.fromJson(request().body().asJson(), Project.class);
Project project = projectManager.update(projectIn);
return ok(Json.toJson(project));
} catch (RuntimeException ex) {
return ExceptionMapper.toResult(ex);
}
}
public static Result delete(Long projectId) {
try {
projectManager.delete(projectId);
return ok();
} catch (RuntimeException ex) {
return ExceptionMapper.toResult(ex);
}
}
public static Result assign(Long projectId) {
try {
Long factoryId = toLong(play.data.Form.form().bindFromRequest().get("factoryId"));
Long transitionerId = toLong(play.data.Form.form().bindFromRequest().get("transitionerId"));
String comment = play.data.Form.form().bindFromRequest().get("comment");
Project project = projectManager.assign(projectId, factoryId, transitionerId, comment);
return ok(Json.toJson(project));
} catch (RuntimeException ex) {
return ExceptionMapper.toResult(ex);
}
}
private static Long toLong(String parm) {
Long converted = null;
if (parm != null) {
converted = Long.parseLong(parm);
}
return converted;
}
}