Select Git revision
ServletMCutout.java
-
Robert Butora authoredRobert Butora authored
ServletMCutout.java 4.82 KiB
import java.util.logging.Logger;
import java.security.Principal;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
import java.util.LinkedList;
import java.util.Map;
import java.util.Properties;
// for Logging/Accounting
import org.json.simple.JSONObject;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
// read HTTP body
import java.util.stream.Collectors;
import org.apache.commons.io.IOUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
public class ServletMCutout extends javax.servlet.http.HttpServlet
{
private static final Logger LOGGER = Logger.getLogger(ServletMCutout.class.getName());
private static final Settings settings = Settings.getInstance();
protected Datasets datasets = new DatasetsImpl(settings);
public void init() throws ServletException
{
super.init();
LOGGER.info("FITS : " + settings.fitsPaths.toString());
LOGGER.info("AMQP : " + settings.amqpConn.toString());
LOGGER.info("DB : " + settings.dbConn.toString());
}
/* DALI allows GET and POST for sync services */
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
processRequest(request, response);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
long startTime_msec = System.currentTimeMillis();
boolean showDuration = true;
InputStreamReader isr = null;
response.setContentType("text/xml");
try
{
isr = new InputStreamReader(request.getInputStream(),"utf-8");
BufferedReader input = new BufferedReader(isr);
StringBuffer jsonStringBuffer = new StringBuffer();
String line;
while((line = input.readLine()) != null)
{
jsonStringBuffer.append(line);
}
String reqJsonString = jsonStringBuffer.toString();
OutputStream respOutputStream = response.getOutputStream();
MCutResult result = datasets.doMCutout(reqJsonString);
final String contentType = "text/xml"; // FIXME
final String respEncoding = "utf-8"; // FIXME
if(contentType.equals("text/xml") || contentType.equals("application/xml"))
{
PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, respEncoding));
String accessUrl = convertLocalPathnameToRemoteUrl(result.fileName,
settings.fitsPaths.cutouts(),
settings.fitsPaths.cutoutsUrl());
XmlSerializer.serializeToLegacyCutResult(writer, respEncoding,
result, accessUrl,
//id, pos, band, time, pol, pixels, countNullValues,
showDuration, startTime_msec);
writer.close();
}
else if(contentType.equals("application/tar.gz")) // FIXME mime for tgz ?
{
//LOGGER.info("streaming the file NOT IMPLEMENTED yet for mcutout");
/*
File downloadFile = new File(cod.absCutPathname);
FileInputStream input = new BuffereInputStream(new FileInputStream(downloadFile));
input.transferTo(respOutputStream);
LOGGER.info("Deleting after download: " + downloadFile.getName() );
downloadFile.delete();
*/
}
else
{
throw new AssertionError("Unsupported contentType for output: " + contentType);
}
}
catch(IOException ex)
{
/* FIXME find better exception */
throw new AssertionError("internal error: jsonFile.open() throws IOException:" + ex.getMessage());
}
}
private String convertLocalPathnameToRemoteUrl(String localPathname,
String FITScutpath, String FITSRemoteUrlCutouts)
{
LOGGER.info("trace " + localPathname);
String fileName = localPathname.replaceAll(FITScutpath + "/", "");
LOGGER.info("local filename: " + fileName);
String remotefname = FITSRemoteUrlCutouts + "/" + fileName;
LOGGER.info("remote url : " + remotefname);
return remotefname;
}
}