/*
* Copyright (c) 2013 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.server.templates.war.resources;
import java.io.IOException;
import java.io.Writer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
import de.fhg.igd.slf4jplus.ALogger;
import de.fhg.igd.slf4jplus.ALoggerFactory;
import eu.esdihumboldt.hale.server.db.orient.DatabaseHelper;
import eu.esdihumboldt.hale.server.model.Template;
import eu.esdihumboldt.hale.server.templates.TemplateScavenger;
import eu.esdihumboldt.hale.server.templates.war.TemplateLocations;
/**
* Template resources provided to the user.
*
* @author Simon Templer
*/
@Controller
public class TemplatesAPI {
private static final ALogger log = ALoggerFactory.getLogger(TemplatesAPI.class);
private final TemplateScavenger scavenger;
/**
* Constructor.
*
* @param scavenger the template scavenger
*/
@Autowired
public TemplatesAPI(TemplateScavenger scavenger) {
this.scavenger = scavenger;
}
/**
* Retrieve all templates.
*
* @param request the request
* @param response the response
*/
@RequestMapping(value = "/all", method = RequestMethod.GET, produces = "application/json")
public void getFile(HttpServletRequest request, HttpServletResponse response) {
OrientGraph graph = DatabaseHelper.getGraph();
try {
Iterable<Template> allTemplates = Template.findAll(graph);
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
JsonFactory jsonFactory = new JsonFactory();
try (Writer writer = response.getWriter();
JsonGenerator gen = jsonFactory.createGenerator(writer)) {
gen.writeStartObject();
gen.writeArrayFieldStart("templates");
for (Template template : allTemplates) {
if (template.isValid()) {
// only valid templates should be returned
gen.writeStartObject();
String id = template.getTemplateId();
gen.writeStringField("id", id);
gen.writeStringField("name", template.getName());
gen.writeStringField("project",
TemplateLocations.getTemplateProjectUrl(scavenger, id));
gen.writeStringField("site", TemplateLocations.getTemplatePageUrl(id));
gen.writeEndObject();
}
}
gen.writeEndArray();
gen.writeEndObject();
} catch (IOException e) {
log.error("Error writing JSON response", e);
}
} finally {
graph.shutdown();
}
}
}