package com.oculusinfo.tile.rest.layer; import com.google.inject.Inject; import org.json.JSONObject; import org.restlet.data.MediaType; import org.restlet.data.Status; import org.restlet.representation.FileRepresentation; import org.restlet.representation.Representation; import org.restlet.resource.Get; import org.restlet.resource.ResourceException; import org.restlet.resource.ServerResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.nio.file.Path; import java.nio.file.Paths; /** * Created by wmayo on 2015-10-08. */ public class KMLLayerResource extends ServerResource { private static final Logger LOGGER = LoggerFactory.getLogger(LayerResource.class); private LayerService _service; @Inject public KMLLayerResource( LayerService service ) { _service = service; } @Get public Representation getKMLLayer() { try { String layerId = ( String ) getRequest().getAttributes().get( "layer" ); int kmlId = Integer.parseInt( ( String) getRequest().getAttributes().get("kmlId")); String fileName = ( String ) getRequest().getAttributes().get("kmlFile"); JSONObject layer = _service.getLayerJSON(layerId); JSONObject kmlDef = layer.getJSONObject("public").getJSONArray("kml").getJSONObject(kmlId); String path = new File(new File(kmlDef.getString("dir")), fileName).getPath(); File kmlFile = new File(getClass().getClassLoader().getResource(path).toURI()); return new FileRepresentation(kmlFile, MediaType.APPLICATION_KML); } catch (Exception e) { throw new ResourceException( Status.SERVER_ERROR_INTERNAL, "Unable to load desired kml file", e ); } } }