//
// return content of xml 
// (used for VOSI capabilityVOSI and availability.xml)
//

import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.*; // ArrayList<String>

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream; // for SOOA

// from vlkb_mergefiles.java - dir & file handling
import java.io.*;

import java.nio.file.*;
import static java.nio.file.StandardCopyOption.*;


// serve VOSI resources from xml files (for now implemented as strings, not files FIXME)

public class VlkbServletFile
    extends javax.servlet.http.HttpServlet
{
    // for logs and debug
    String className = this.getClass().getSimpleName();

// VOSI
// String accessURL = null; // FIXME now read from MERGEURL later introduce own param
// String funcName = "vlkb_cutout"; // FIXME read from config file

	private static final String availStr = 
		  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
		+ "<vosi:availability  "
		+ " xmlns:vosi=\"http://www.ivoa.net/xml/VOSIAvailability/v1.0\">"
		+ " <vosi:available>true</vosi:available>"
		+ " <vosi:note>service is accepting queries</vosi:note>"
		+ "</vosi:availability>";

	private String capsStr = null;


	protected void SetCapsStr(String URL, String funcName)
	{
		if(URL != null)
		{
		
            String accessURL = stripTrailingSlash(URL);

    capsStr =
		  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"

		+ "<vosi:capabilities "
		+    "xmlns:vosi=\"http://www.ivoa.net/xml/VOSICapabilities/v1.0\" "
		+    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
		+    "xmlns:vod=\"http://www.ivoa.net/xml/VODataService/v1.1\">"

		+ " <capability standardID=\"ivo://ivoa.net/std/VOSI#capabilities\">"
		+ "   <interface xsi:type=\"vod:ParamHTTP\" version=\"1.0\">"
		+ "     <accessURL use=\"full\">"
		+          accessURL + "/capabilities"
		+ "     </accessURL>"
		+ "   </interface>"
		+ " </capability>"

		+ " <capability standardID=\"ivo://ivoa.net/std/VOSI#availability\">"
		+ "   <interface xsi:type=\"vod:ParamHTTP\" version=\"1.0\">"
		+ "     <accessURL use=\"full\">"
		+          accessURL + "/availability"
		+ "     </accessURL>"
		+ "   </interface>"
		+ " </capability>"

		+ " <capability standardID=\"ivo://ivoa.net/std/SODA#sync-1.0\">"
		+ "   <interface xsi:type=\"vod:ParamHTTP\" role=\"std\" version=\"1.0\">"
		+ "     <accessURL use=\"full\">"
		+          accessURL + "/" + funcName
		+ "     </accessURL>"
		+ "   </interface>"
		+ " </capability>"

		+ " <capability standardID=\"ivo://ivoa.net/std/SODA#async-1.0\">"
		+ "   <interface xsi:type=\"vod:ParamHTTP\" role=\"std\" version=\"1.0\">"
		+ "     <accessURL use=\"full\">"
		+          accessURL + "/" + funcName + "_uws/soda_cuts"
		+ "     </accessURL>"
		+ "   </interface>"
		+ " </capability>"

	+ "</vosi:capabilities>";
		}
	}


	String stripTrailingSlash(String path)
	{
       		if (path.endsWith("/"))
           		return path.substring(0,path.length()-1);
       		else
           		return path;
    	}


    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException {

            doPost(request, response);
        }



    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
        throws ServletException, IOException
	{
		StringBuffer requestURL = request.getRequestURL();
	
   	System.out.println(className + " vlkb req from: " + request.getRemoteAddr()
                               + " doGet: " + requestURL.toString());

		PrintWriter writer = response.getWriter();
		response.setContentType("text/xml");
	
		if(-1 != requestURL.lastIndexOf("/capabilities"))
		{
            String fullURL = request.getRequestURL().toString();
            String baseURL = fullURL.substring(0,requestURL.lastIndexOf("/"));

            SetCapsStr(baseURL, "soda");
			writer.println(capsStr);	

		}
		else if(-1 != requestURL.lastIndexOf("/availability"))
		{
			writer.println(availStr);	
		}
		// error FIXME what to do if none of above given ? e.g. misconfigured web.xml
		
		writer.close();
		return;
        }
}

