/**
* Copyright (c) 2011-2014, OpenIoT
*
* This file is part of OpenIoT.
*
* OpenIoT is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* OpenIoT is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with OpenIoT. If not, see <http://www.gnu.org/licenses/>.
*
* Contact: OpenIoT mailto: info@openiot.eu
* @author Behnaz Bostanipour
* @author Timotee Maret
* @author Julien Eberle
*/
package org.openiot.gsn.http.ac;
import org.openiot.gsn.Main;
import org.openiot.gsn.http.WebConstants;
import org.apache.log4j.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
/**
* Created by IntelliJ IDEA.
* User: Behnaz Bostanipour
* Date: Apr 12, 2010
* Time: 5:02:52 PM
* To change this template use File | Settings | File Templates.
*/
public class MyCreateGroupServlet extends HttpServlet
{
private static transient Logger logger = Logger.getLogger( MyCreateGroupServlet.class );
/****************************************** Servlet Methods*******************************************/
/******************************************************************************************************/
public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException
{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
// Get the session
HttpSession session = req.getSession();
User user = (User) session.getAttribute("user");
if (user == null)
{
this.redirectToLogin(req,res);
}
else
{
this.checkSessionScheme(req,res);
if(user.isAdmin()== false)
{
res.sendError( WebConstants.ACCESS_DENIED , "Access denied." );
}
else
{
this.setSessionPrintWriter(req,out);
printHeader(out);
printLayoutMastHead(out, user);
printLayoutContent(out);
printForm(out);
printLayoutFooter(out);
}
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException
{
doGet(req,res);
handleForm(req, res);
}
/****************************************** HTML Printing Methods*******************************************/
/***********************************************************************************************************/
private void printHeader(PrintWriter out)
{
out.println("<HTML>");
out.println("<HEAD>");
out.println("<script type=\"text/javascript\" src=\"/js/acjavascript.js\"></script>");
out.println("<TITLE>Create New Group Form</TITLE>");
out.println(" <link rel=\"stylesheet\" media=\"screen\" type=\"text/css\" href=\"/style/acstyle.css\"/>");
out.println("</HEAD>");
out.println("<body>");
out.println("<div id=\"container\">");
out.println("<div class=box>");
}
private void printLayoutMastHead(PrintWriter out, User user)
{
out.println("<div id=\"masthead\">");
out.println("<div class=\"image_float\"><img src=\"/style/gsn-mark.png\" alt=\"GSN logo\" /></div><br>");
out.println("<h1>Create New Group Form</h1>");
out.println("<div class=\"spacer\"></div>");
out.println("</div>");
out.println("<div id=\"mastheadborder\">");
this.printLinks(out);
this.printUserName(out, user);
out.println("<br><br>");
out.println("</div>");
}
private void printLayoutContent(PrintWriter out)
{
out.println("<div id=\"content\">");
}
private void printLayoutFooter(PrintWriter out)
{
out.println("</div>");
out.println("<div id=\"footer\">");
out.println(" <p align=\"center\"><FONT COLOR=\"#000000\"/>Powered by <a class=\"nonedecolink\" href=\"http://globalsn.sourceforge.net/\">GSN</a>, Distributed Information Systems Lab, EPFL 2010</p>");
out.println("</div>");
out.println("</div>");
out.println("</div>");
out.println("</body>");
out.println("</html>");
}
private void printLinks(PrintWriter out)
{
out.println("<a class=linkclass href=\"/gsn/MyAdminManagementServlet\">admin only</a>");
out.println("<a class=linkclass href=\"/gsn/MyLogoutHandlerServlet\">logout</a>");
}
private void printUserName(PrintWriter out, User user)
{
out.println("<p id=\"login\">logged in as : "+user.getUserName()+"</p>");
}
private void printForm(PrintWriter out) throws ServletException
{
Vector dsNames = this.getDSNames();
if(dsNames==null)
{
out.println("<p><b>Can not print the form !</b></p>");
return;
}
else
{
out.println("<FORM METHOD=POST>"); // posts to itself
//out.println("<div class=\"image_float\">");
out.println("<h2>Group Name</h2>");
out.println("<BR>");
this.printFormInputs(out);
//out.println("</div>");
out.println("<BR>");
out.println("<h2>Group Structure</h2>");
out.println("<BR>");
this.printDSList(out,dsNames);
//out.println("<div class=\"spacer\"></div>");
out.println("<BR>");
out.println("<BR>");
this.printFormButtons(out);
out.println("</FORM>");
}
}
private void printFormInputs(PrintWriter out)
{
out.println("<table>");
out.println("<tr><th>groupname</th><td><INPUT TYPE=TEXT NAME=groupname size=30></td></tr>");
out.println("</table>");
}
private void printFormButtons(PrintWriter out)
{
//out.println("<table class=transparenttable>");
out.println("<INPUT TYPE=SUBMIT class=sumitbuttonstyle VALUE=\"Create Now\">");
out.println("  <INPUT TYPE=RESET class=sumitbuttonstyle VALUE=\"Reset\">");
//out.println("</table>");
}
private void printDSList(PrintWriter out,Vector dsNames)
{
String vs=null;
if(dsNames.size()==0)
{
out.println("<table class=transparenttable>");
out.println("<tr><td><LI>No virtaul sensor is available.</LI></td></tr>");
out.println("</table>");
}
else
{
out.println("<table>");
out.println("<tr><th> virtual sensor name </th>");
out.println("<th> access right</th></tr>");
for(int i=0; i<dsNames.size();i++)
{
vs=(String)(dsNames.get(i));
out.println("<tr><td>" + vs + "</td>");
out.println("<td><INPUT TYPE=RADIO NAME="+vs+" VALUE= 1> read ");
out.println("<INPUT TYPE=RADIO NAME="+vs+" VALUE= 2> write ");
out.println("<INPUT TYPE=RADIO NAME="+vs+" VALUE=3> read/write </td>");
out.println("</tr>");
}
out.println("</table>");
}
}
/****************************************** AC related Methods*******************************************************/
/********************************************************************************************************************/
private void handleForm(HttpServletRequest req,HttpServletResponse res) throws IOException
{
HttpSession session = req.getSession();
PrintWriter out = (PrintWriter) session.getAttribute("out");
ParameterSet pm = new ParameterSet(req);
ConnectToDB ctdb =null;
try
{
if(pm.hasEmptyParameter())
{
//out.println("At least one of the input parameters is empty "+"<br>");
this.managaeUserAlert(out, "At least one of the input parameters is empty ! ",true );
}
else
{
ctdb =new ConnectToDB();
String originalgroupname=pm.valueForName("groupname");
String groupname= originalgroupname.replace(" ","");
if(ctdb.valueExistsForThisColumn(new Column("GROUPNAME",groupname),"ACGROUP")==false )
{
Vector vector = ctdb.getDataSourceListForParameterSet(pm);
if(vector.size()!= 0)
{
Group group= new Group(groupname,vector);
if(ctdb.registerGroup(group)== true)
{
this.managaeUserAlert(out, "Group creation was successful ! ",false );
}
else
{
this.managaeUserAlert(out, "Registration in DB failed ! ",true );
}
}
else
{
//out.println("You did not choose any virtual sensor !<br>");
this.managaeUserAlert(out, "You did not choose any virtual sensor ! ",true );
}
}
else
{
//out.println("This groupname exists already in DB, choose another one!<br>");
this.managaeUserAlert(out, "This groupname exists already in DB, choose another one ! ",true );
}
}
}
catch(Exception e)
{
out.println("Exception caught : "+e.getMessage());
}
finally
{
if(ctdb!=null)
{
ctdb.closeStatement();
ctdb.closeConnection();
}
}
}
private void managaeUserAlert(PrintWriter out, String alertMessage, boolean hasFailed)
{
this.createAlertBox(out, alertMessage, hasFailed);
this.callAlertBox(out);
}
private void createAlertBox(PrintWriter out, String alertMessage, boolean hasFailed)
{
out.println("<div id=\"AlertBox\" class=\"alert\">");
out.println("<p>");
out.println(alertMessage );
out.println("</p>");
if(hasFailed== true)
{
out.println("<p>");
out.println("Failed to create the group, ");
out.println("you may want to try again !");
out.println("</p>");
}
else
{
out.println("<p>");
out.println(" Ready to create a new group." );
out.println("</p>");
}
out.println("<form style=\"text-align:right\">");
out.println("<input");
out.println("type=\"button\"");
out.println("class= alertbuttonstyle");
out.println("value=\"OK\"");
out.println("style=\"width:75px;\"");
out.println("onclick=\"document.getElementById('AlertBox').style.display='none'\">");
out.println("</form>");
out.println("</div>");
}
private void callAlertBox(PrintWriter out)
{
out.println("<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"TEXT/JAVASCRIPT\">");
out.println("<!--");
out.println("DisplayAlert('AlertBox',500,200);");
out.println("//-->");
out.println("</SCRIPT>");
}
/****************************************** Client Session related Methods*******************************************/
/********************************************************************************************************************/
private void setSessionPrintWriter(HttpServletRequest req,PrintWriter out)
{
req.getSession().setAttribute("out",out);
}
private void checkSessionScheme(HttpServletRequest req, HttpServletResponse res)throws IOException
{
if(req.getScheme().equals("https")== true)
{
if((req.getSession().getAttribute("scheme")==null))
{
req.getSession().setAttribute("scheme","https");
}
}
else if(req.getScheme().equals("http")== true )
{
if((req.getSession().getAttribute("scheme")==null))
{
req.getSession().setAttribute("scheme","http");
}
res.sendRedirect("https://"+req.getServerName()+":"+ Main.getContainerConfig().getSSLPort()+"/gsn/MyCreateGroupServlet");
}
}
private void redirectToLogin(HttpServletRequest req, HttpServletResponse res)throws IOException
{
req.getSession().setAttribute("login.target", HttpUtils.getRequestURL(req).toString());
res.sendRedirect("/gsn/MyLoginHandlerServlet");
}
/****************************************** DB related Methods*******************************************/
/********************************************************************************************************************/
private Vector getDSNames()
{
Vector dsNames =null;
ConnectToDB ctdb = null;
try
{ ctdb = new ConnectToDB();
dsNames = ctdb.getValuesVectorForOneColumnUnderOneCondition(new Column("DATASOURCENAME"),new Column("ISCANDIDATE","no"),"ACDATASOURCE");
}
catch(Exception e)
{
System.out.println("Exception caught : "+e.getMessage());
logger.error("ERROR IN getDSNames");
logger.error(e.getMessage(),e);
}
finally
{
if(ctdb!=null)
{
ctdb.closeStatement();
ctdb.closeConnection();
}
}
return dsNames;
}
}