package cz.cuni.mff.d3s.been.web.pages.task; import java.util.ArrayList; import java.util.Collection; 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.bpk.BpkIdentifier; import cz.cuni.mff.d3s.been.bpk.ObjectFactory; import cz.cuni.mff.d3s.been.core.task.TaskContextDescriptor; import cz.cuni.mff.d3s.been.core.task.TaskDescriptor; import cz.cuni.mff.d3s.been.core.task.TaskType; import cz.cuni.mff.d3s.been.web.components.Layout; import cz.cuni.mff.d3s.been.web.pages.Page; /** * User: donarus Date: 4/29/13 Time: 2:14 PM */ @Page.Navigation(section = Layout.Section.TASK_SUBMIT) public class Submit extends Page { @Property BpkIdentifier bpk; @Property Descriptor descriptor; @Inject private PageRenderLinkSource pageRenderLinkSource; public Collection<BpkIdentifier> getBpks() throws BeenApiException { return getApi().getBpks(); } Object onDeleteNamedTaskDescriptor(String name, String groupId, String bpkId, String version) throws BeenApiException { BpkIdentifier bpkIdentifier = new ObjectFactory().createBpkIdentifier().withBpkId(bpkId).withGroupId(groupId).withVersion( version); getApi().deleteNamedTaskDescriptor(bpkIdentifier, name); return Submit.class; } Object onDeleteNamedTaskContextDescriptor(String name, String groupId, String bpkId, String version) throws BeenApiException { BpkIdentifier bpkIdentifier = new ObjectFactory().createBpkIdentifier().withBpkId(bpkId).withGroupId(groupId).withVersion( version); getApi().deleteNamedTaskContextDescriptor(bpkIdentifier, name); return Submit.class; } public Collection<Descriptor> descriptorsForBpk(BpkIdentifier bpk) throws BeenApiException { Collection<Descriptor> result = new ArrayList<>(); result.addAll(createTaskDescriptorWrappers(bpk)); result.addAll(createTaskContextDescriptorWrappers(bpk)); return result; } private Collection<Descriptor> createTaskDescriptorWrappers(BpkIdentifier bpk) throws BeenApiException { Collection<Descriptor> descriptors = new ArrayList(); descriptors.addAll(createTaskDescriptorWrappers(getApi().getTaskDescriptors(bpk).entrySet(), bpk, false)); descriptors.addAll(createTaskDescriptorWrappers(getApi().getNamedTaskDescriptorsForBpk(bpk).entrySet(), bpk, true)); return descriptors; } private Collection<Descriptor> createTaskContextDescriptorWrappers(BpkIdentifier bpk) throws BeenApiException { Collection<Descriptor> descriptors = new ArrayList(); descriptors.addAll(createTaskContextDescriptorWrappers( getApi().getTaskContextDescriptors(bpk).entrySet(), bpk, false)); descriptors.addAll(createTaskContextDescriptorWrappers( getApi().getNamedContextDescriptorsForBpk(bpk).entrySet(), bpk, true)); return descriptors; } private Collection<Descriptor> createTaskDescriptorWrappers(Collection<Map.Entry<String, TaskDescriptor>> entries, BpkIdentifier bpk, boolean named) throws BeenApiException { Collection<Descriptor> descriptors = new ArrayList(); for (Map.Entry<String, TaskDescriptor> entry : entries) { String descriptorName = entry.getKey(); TaskDescriptor td = entry.getValue(); Object[] linkEventContext = new Object[] { bpk.getGroupId(), bpk.getBpkId(), bpk.getVersion(), descriptorName }; String submitLink = null; if (td.getType() == TaskType.TASK) { submitLink = createLink(SubmitTaskDescriptor.class, linkEventContext); } else if (td.getType() == TaskType.BENCHMARK) { submitLink = createLink(SubmitBenchmarkDescriptor.class, linkEventContext); } descriptors.add(new Descriptor(td, submitLink, descriptorName, named)); } return descriptors; } private Collection<Descriptor> createTaskContextDescriptorWrappers(Collection<Map.Entry<String, TaskContextDescriptor>> entries, BpkIdentifier bpk, boolean named) throws BeenApiException { Collection<Descriptor> descriptors = new ArrayList(); for (Map.Entry<String, TaskContextDescriptor> entry : entries) { String descriptorName = entry.getKey(); TaskContextDescriptor tcd = entry.getValue(); Object[] linkEventContext = new Object[] { bpk.getGroupId(), bpk.getBpkId(), bpk.getVersion(), descriptorName }; String submitLink = createLink(SubmitTaskContextDescriptor.class, linkEventContext); descriptors.add(new Descriptor(tcd, submitLink, descriptorName, named)); } return descriptors; } private String createLink(Class<?> pageClass, Object[] linkEventContext) { return pageRenderLinkSource.createPageRenderLinkWithContext(pageClass, linkEventContext).toAbsoluteURI().toString(); } // ****************************** // Displayable descriptor wrapper // ****************************** public class Descriptor { public String name; public TaskDescriptor taskDescriptor; public TaskContextDescriptor taskContextDescriptor; public String submitLink; public boolean isNamed; public Descriptor(TaskDescriptor taskDescriptor, String submitLink, String name, boolean named) { this.taskDescriptor = taskDescriptor; this.submitLink = submitLink; this.name = name; this.isNamed = named; } public Descriptor(TaskContextDescriptor taskContextDescriptor, String submitLink, String name, boolean named) { this.taskContextDescriptor = taskContextDescriptor; this.submitLink = submitLink; this.name = name; this.isNamed = named; } } }