package wowodc.background.rest.controllers; import wowodc.background.tasks.T10RestEOFTask; import wowodc.background.utilities.Utilities; import wowodc.eof.TaskInfo; import com.webobjects.appserver.WOActionResults; import com.webobjects.appserver.WORequest; import com.webobjects.appserver.WOResponse; import com.webobjects.foundation.NSDictionary; import com.webobjects.foundation.NSTimestamp; import er.extensions.appserver.ERXHttpStatusCodes; import er.extensions.concurrency.ERXExecutorService; import er.extensions.concurrency.ERXFutureTask; import er.extensions.eof.ERXEOControlUtilities; import er.extensions.eof.ERXKeyFilter; import er.rest.routes.ERXRouteController; import er.rest.routes.ERXRouteResults; import er.rest.routes.ERXRouteUrlUtils; public class TaskInfoController extends ERXRouteController { public TaskInfoController(WORequest request) { super(request); } public WOActionResults createAction() throws Throwable { TaskInfo taskInfo = ERXEOControlUtilities.createAndInsertObject(editingContext(), TaskInfo.class); taskInfo.setDuration(Long.valueOf(15000)); taskInfo.setStartNumber(Utilities.newStartNumber()); taskInfo.setStartTime(new NSTimestamp()); editingContext().saveChanges(); T10RestEOFTask taskInfoGID = new T10RestEOFTask(); taskInfoGID.setTaskGID(taskInfo.__globalID()); ERXFutureTask<?> _future = new ERXFutureTask(taskInfoGID); ERXExecutorService.executorService().execute(_future); ERXRouteResults results = (ERXRouteResults)response(taskInfo, ERXKeyFilter.filterWithAttributesAndToOneRelationships()); WOResponse response = results.generateResponse(); String location = hostName() + ERXRouteUrlUtils.actionUrlForRecord(_context, taskInfo, "show", format().name(), new NSDictionary(), request().isSecure(), request().isSessionIDInRequest()); response.setHeader(location, "Content-Location"); response.setStatus(ERXHttpStatusCodes.ACCEPTED); return response; } public WOActionResults showAction() throws Throwable { TaskInfo taskInfo = routeObjectForKey("taskInfo"); if (TaskInfo.WORKFLOW_PRIME_CHECKED.equals(taskInfo.workflowState())) { ERXRouteResults results = (ERXRouteResults)response(taskInfo, ERXKeyFilter.filterWithNone()); WOResponse response = results.generateResponse(); String location = hostName() + ERXRouteUrlUtils.actionUrlForRecord(_context, taskInfo, "results", format().name(), new NSDictionary(), request().isSecure(), request().isSessionIDInRequest()); response.setHeader(location, "Content-Location"); response.setStatus(ERXHttpStatusCodes.SEE_OTHER); return response; } return response(taskInfo.workflowState(), ERXKeyFilter.filterWithAttributes()); } public WOActionResults resultsAction() throws Throwable { TaskInfo taskInfo = routeObjectForKey("taskInfo"); return response(taskInfo, ERXKeyFilter.filterWithAttributesAndToOneRelationships()); } protected String hostName() { String host = request()._serverName(); if (request().isSecure()) { host = "https://" + host; } else { host = "http://" + host; if (request()._serverPort() != null) { host = host + ":" + request()._serverPort(); return host; } } return host; } }