/*************************GO-LICENSE-START*********************************
* Copyright 2014 ThoughtWorks, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*************************GO-LICENSE-END***********************************/
package com.thoughtworks.go.server.domain.xml;
import java.io.IOException;
import java.util.List;
import com.thoughtworks.go.config.EnvironmentVariableConfig;
import com.thoughtworks.go.config.Resource;
import com.thoughtworks.go.domain.JobIdentifier;
import com.thoughtworks.go.domain.JobPlan;
import com.thoughtworks.go.domain.WaitingJobPlan;
import com.thoughtworks.go.domain.XmlRepresentable;
import com.thoughtworks.go.domain.XmlWriterContext;
import com.thoughtworks.go.util.StringUtil;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.dom.DOMDocument;
import org.dom4j.dom.DOMElement;
public class JobPlanXmlViewModel implements XmlRepresentable {
private final List<WaitingJobPlan> jobPlans;
public JobPlanXmlViewModel(List<WaitingJobPlan> jobPlans) {
this.jobPlans = jobPlans;
}
public Document toXml(XmlWriterContext writerContext) throws DocumentException, IOException {
DOMElement root = new DOMElement("scheduledJobs");
for (WaitingJobPlan jobPlan : jobPlans) {
DOMElement jobElement = getXmlForJobPlan(writerContext, jobPlan);
root.add(jobElement);
}
DOMDocument domDocument = new DOMDocument(root);
return domDocument;
}
private DOMElement getXmlForJobPlan(XmlWriterContext writerContext, WaitingJobPlan waitingJobPlan) {
JobPlan jobPlan = waitingJobPlan.jobPlan();
DOMElement root = new DOMElement("job");
root.addAttribute("name", jobPlan.getName()).addAttribute("id", String.valueOf(jobPlan.getJobId()));
root.addElement("link").addAttribute("rel", "self").addAttribute("href", httpUrlFor(writerContext.getBaseUrl(), jobPlan.getIdentifier()));
root.addElement("buildLocator").addText(jobPlan.getIdentifier().buildLocator());
if (!StringUtil.isBlank(waitingJobPlan.envName())) {
root.addElement("environment").addText(waitingJobPlan.envName());
}
if (!jobPlan.getResources().isEmpty()) {
DOMElement resources = new DOMElement("resources");
for (Resource resource : jobPlan.getResources()) {
resources.addElement("resource").addCDATA(resource.getName());
}
root.add(resources);
}
if (!jobPlan.getVariables().isEmpty()) {
DOMElement envVars = new DOMElement("environmentVariables");
for (EnvironmentVariableConfig environmentVariableConfig : jobPlan.getVariables()) {
envVars.addElement("variable").addAttribute("name", environmentVariableConfig.getName()).addText(environmentVariableConfig.getDisplayValue());
}
root.add(envVars);
}
return root;
}
public String httpUrl(String baseUrl) {
throw new RuntimeException("Unimplemented");
}
private String httpUrlFor(String baseUrl, final JobIdentifier identifier) {
return baseUrl + "/tab/build/detail/" + identifier.buildLocator();
}
}