package cz.cuni.mff.d3s.been.web.pages.context;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.PageRenderLinkSource;
import cz.cuni.mff.d3s.been.api.BeenApiException;
import cz.cuni.mff.d3s.been.core.task.TaskContextEntry;
import cz.cuni.mff.d3s.been.core.task.TaskEntry;
import cz.cuni.mff.d3s.been.web.components.Layout;
import cz.cuni.mff.d3s.been.web.model.TaskContextSupport;
import cz.cuni.mff.d3s.been.web.pages.Page;
/**
* @author Kuba Brecka
*/
@Page.Navigation(section = Layout.Section.TASK_DETAIL)
public class Detail extends Page {
@Inject
private PageRenderLinkSource pageRenderLinkSource;
@Property
private TaskContextEntry context;
@Property
private List<String> taskIds;
@Property
private String taskId;
@Property
private Map<String, TaskEntry> tasksMap;
@Property
private TaskEntry task;
@Property
private cz.cuni.mff.d3s.been.core.task.Property property;
@Property
private String taskContextId;
void onActivate(String taskContextId) throws BeenApiException {
this.taskContextId = taskContextId;
context = api.getApi().getTaskContext(taskContextId);
if (context != null) {
taskIds = context.getContainedTask();
tasksMap = new HashMap<>();
for (TaskEntry taskEntry : this.api.getApi().getTasksInTaskContext(taskContextId)) {
if (taskEntry == null)
continue;
tasksMap.put(taskEntry.getId(), taskEntry);
}
}
}
Object onPassivate() {
return taskContextId;
}
public TaskEntry taskEntryWithId(String taskId) {
return tasksMap.get(taskId);
}
public Object onKillContext(String contextId) throws BeenApiException, InterruptedException {
new TaskContextSupport(api.getApi()).killTaskContext(contextId);
return pageRenderLinkSource.createPageRenderLinkWithContext(Detail.class, contextId);
}
public Object onRemoveContext(String contextId) throws BeenApiException {
new TaskContextSupport(api.getApi()).removeKilledTaskContext(contextId);
return pageRenderLinkSource.createPageRenderLinkWithContext(Detail.class, contextId);
}
public boolean isTaskContextInFinalState(String taskContextId) throws BeenApiException {
return new TaskContextSupport(getApi()).isTaskContextInFinalState(taskContextId);
}
public boolean isContextRemovable(String taskContextId) throws BeenApiException {
return new TaskContextSupport(getApi()).isContextRemovable(taskContextId);
}
}