/*
* Copyright 2006-2014 the original author or authors.
*
* 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.
*/
package org.jrecruiter.web.views;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;
import org.jrecruiter.common.CalendarUtils;
import org.jrecruiter.model.Job;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.View;
/**
* Provides an XML document containing jobs, suitable for Indeed.com integration.
*
* @author Gunnar Hillert
*/
public class XmlView implements View {
public static final Logger LOGGER = LoggerFactory.getLogger(XmlView.class);
/* (non-Javadoc)
* @see org.springframework.web.servlet.View#getContentType()
*/
@Override
public String getContentType() {
return "text/xml";
}
/* (non-Javadoc)
* @see org.springframework.web.servlet.View#render(java.util.Map, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public void render(final Map model,
final HttpServletRequest request,
final HttpServletResponse response) throws Exception {
response.setContentType(this.getContentType());
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = outputFactory.createXMLStreamWriter(response.getOutputStream(), "UTF-8");
writer.writeStartDocument("UTF-8", "1.0");
writer.writeStartElement("source");
writer.writeStartElement("publisher");
writer.writeCData("jRecruiter - AJUG Job Postings");
writer.writeEndElement();
writer.writeStartElement("publisherUrl");
writer.writeCData("http://www.ajug.org/jobs/");
writer.writeEndElement();
writer.writeStartElement("lastBuildDate");
writer.writeCharacters(CalendarUtils.getXmlFormatedDate());
writer.writeEndElement();
final List<Job> jobs = (List<Job>) model.get("jobs");
final String serverAddress = (String) model.get("serverAddress");
int i = 0;
for (final Job job : jobs) {
writer.writeStartElement("job");
writer.writeStartElement("jobTitle");
writer.writeCData(job.getJobTitle());
writer.writeEndElement();
writer.writeStartElement("date");
writer.writeCData(CalendarUtils.getXmlFormatedDate(job.getUpdateDate()));
writer.writeEndElement();
writer.writeStartElement("referenceNumber");
writer.writeCData(String.valueOf(job.getId()));
writer.writeEndElement();
writer.writeStartElement("url");
final String jobUrl = serverAddress + "/job-detail.html?jobId=" + job.getId();
writer.writeCData(jobUrl);
writer.writeEndElement();
writer.writeStartElement("company");
writer.writeCData(job.getBusinessName());
writer.writeEndElement();
writer.writeStartElement("city");
writer.writeCData(job.getBusinessCity());
writer.writeEndElement();
writer.writeStartElement("state");
writer.writeCData(job.getBusinessState());
writer.writeEndElement();
writer.writeStartElement("country");
writer.writeCData("US");
writer.writeEndElement();
writer.writeStartElement("postalCode");
writer.writeCData(job.getBusinessZip());
writer.writeEndElement();
writer.writeStartElement("description");
writer.writeCData(job.getDescription());
writer.writeEndElement();
writer.writeStartElement("education");
writer.writeCData("");
writer.writeEndElement();
writer.writeStartElement("salary");
writer.writeCData(String.valueOf(job.getSalary()));
writer.writeEndElement();
writer.writeStartElement("jobtype");
writer.writeCData("");
writer.writeEndElement();
writer.writeStartElement("category");
writer.writeCData(job.getIndustry().getName());
writer.writeEndElement();
writer.writeStartElement("experience");
writer.writeCData("");
writer.writeEndElement();
writer.writeEndElement();
if (job.getId().equals(Long.valueOf(3520))) {
LOGGER.info("1");
}
if (i % 300 == 0) {
writer.flush();
}
i++;
}
writer.writeEndDocument();
writer.flush();
writer.close();
}
}