package net.mar;
import javax.servlet.*;
import net.mar.AnException;
public class SQLMenu

{
	public String setRequest(ServletRequest req) throws AnException
	{

		String sql="";
		int noParams=0;
		String select="";
		String where="";
        int noSelected=0;
        String comma="";
        int noConstraints=0;
        String logic="";
        String logic_supplied="";
        String count="";
        String from="";
		if (req.getParameter("from") != null)
		{
		from=req.getParameter("from");
		}



		if (req.getParameter("noParams") != null)
		{
		noParams=Integer.parseInt(req.getParameter("noParams"));
		}
		else
		{
			throw new AnException("Null noParams");
		}
		if (noParams < 1) {
			throw new AnException("No Parameters requested");
		}

		if (req.getParameter("logic") != null) {
			logic_supplied=req.getParameter("logic");
		}
		if (req.getParameter("count") != null) {
			count=req.getParameter("count");
		}

		String [] selectBits = new String[noParams];
		String [] minOper = new String[noParams];
		String [] maxOper = new String[noParams];
		String [] minValue = new String[noParams];
		String [] maxValue = new String[noParams];

		for (int i = 0; i < noParams; ++i){
			if (req.getParameter("select"+i) != null)
				{
					noSelected=noSelected+1;
					selectBits[i]=req.getParameter("select"+i);
					select=select+comma+selectBits[i];
					comma=",";
				}


			if (req.getParameter("minOper"+i) != null &&
				!req.getParameter("minOper"+i).equals("") &&
				req.getParameter("minValue"+i) != null &&
				!req.getParameter("minValue"+i).equals("")
				)
				{
					noConstraints=noConstraints+1;
					minOper[i]=req.getParameter("minOper"+i);
					minValue[i]=req.getParameter("minValue"+i);
					where=where+logic+minOper[i]+ " "+minValue[i] ;
					//logic=" and \n";
					logic=" "+logic_supplied+" \n";
				}
			if (req.getParameter("maxOper"+i) != null &&
				!req.getParameter("maxOper"+i).equals("") &&
				req.getParameter("maxValue"+i) != null &&
				!req.getParameter("maxValue"+i).equals("")
				)
				{
					noConstraints=noConstraints+1;
					maxOper[i]=req.getParameter("maxOper"+i);
					maxValue[i]=req.getParameter("maxValue"+i);
					where=where+logic+maxOper[i]+ " "+maxValue[i] ;
					//logic=" and \n";
					logic=" "+logic_supplied+" \n";
				}


		}

                if (count.equals("count")){
					select="count(*) as row_count ";
				}

				if (noSelected < 1 && !count.equals("count"))
					{
						throw new AnException("No parameters selected for output ");
			}

			if (where.equals("") || where == null)
			{
				throw new AnException("No constraints supplied. You must supply at least one minimum or maximum value for a parameter.");
			}
		return "select "+select+" \nfrom " + from + " \nwhere " + where;
}

}

