/**
* 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 26, 2010
* Time: 2:34:13 PM
* To change this template use File | Settings | File Templates.
*/
public class MyUserUpdateWaitingListServlet extends HttpServlet
{
private static transient Logger logger = Logger.getLogger( MyUserUpdateWaitingListServlet.class );
/****************************************** Servlet Methods*******************************************/
/****************************************************************************************************/
public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException
{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
ConnectToDB ctdb = null;
// 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.printHeader(out);
this.printLayoutMastHead(out, user );
this.printLayoutContent(out);
try
{
ctdb = new ConnectToDB();
Vector waitingUsers = ctdb.getWaitingUsers();
if(waitingUsers.size()==0)
{
out.println("<p><B> There is no entry in the waiting user list !</B> </p>");
}
for(int i=0;i<waitingUsers.size();i++)
{
//printForm(out,(User)(waitingUsers.get(i)));
this.printNewEntry(out,(User)(waitingUsers.get(i)));
}
}
catch(Exception e)
{
out.println("<p><B> Can not print the form</B> </p>");
logger.error("ERROR IN DOGET");
logger.error(e.getMessage(),e);
}
finally
{
if(ctdb!=null)
{
ctdb.closeStatement();
ctdb.closeConnection();
}
}
//out.println("</BODY>");
this.printLayoutFooter(out);
}
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
doGet(req,res);
}
/****************************************** HTML Printing Methods*******************************************/
/***********************************************************************************************************/
private void printHeader(PrintWriter out)
{
out.println("<HTML>");
out.println("<HEAD>");
//For Java Script!!
//this.printEmbeddedJS(out);
out.println("<script type=\"text/javascript\" src=\"/js/acjavascript.js\"></script>");
out.println("<TITLE>Users Updates Waiting List</TITLE>");
out.println(" <link rel=\"stylesheet\" media=\"screen\" type=\"text/css\" href=\"/style/acstyle.css\"/>");
//printStyle(out);
out.println("</HEAD>");
out.println("<body onload=\"loadScroll()\" onunload=\"saveScroll()\" >");
//call for alert pop up
//out.println("<input type=\"button\" onclick=\"popup()\" value=\"popup\">");
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>Users Updates Waiting List</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)
{
//String username=user.getUserName();
out.println("<p id=\"login\">logged in as : "+user.getUserName()+"</p>");
}
private void printNewEntry(PrintWriter out,User user) throws ServletException
{
out.println("<h2>New Entry In Waiting List</h2>");
//out.println("<BR>");
//out.println("<h3>User Information</h3>");
out.println("<br>");
out.println("<li class=registerli >User Information </li><br>");
this.printUserInformation(out,user);
//out.println("<h3>Selected Groups </h3>");
out.println("<br>");
out.println("<li class=registerli >Selected Groups </li>");
this.printUserGroupList(out,user);
//out.println("<h3>Selected Virtual Sensors</h3>");
out.println("<br>");
out.println("<li class=registerli>Selected Virtual Sensors</li><br>");
this.printUserDataSourceList(out,user);
out.println("<BR>");
}
//new version without group ds combunation
private void printUserGroupList(PrintWriter out,User user)
{
Group group=null;
String label=null;
String groupName=null;
String groupType=null;
String userName = user.getUserName();
if(user.getGroupList().size()==0)
{
out.println("<p>No group is selected.</p>");
}
else
{
out.println("<table >");
out.println("<tr><th> group name </th>");
out.println("<th> group structure</th>");
out.println("<th> user choice</th>");
out.println("<th> admin decision</th>");
out.println("<th> admin decision</th></tr>");
for(int i=0; i<user.getGroupList().size();i++)
{
group=(Group)(user.getGroupList().get(i));
groupName=group.getGroupName();
groupType=group.getGroupType();
if(groupType.equals("5"))
{
label=" user wants to add this group ";
}
else if(groupType.equals("0"))
{
label=" user wants to delete this group ";
}
out.println("<tr><td>"+groupName +"</td>");
this.printGroupStructureLink(out, group.getGroupName());
out.println("<td>"+label +" </td>");
out.println("<FORM ACTION=/gsn/MyUpdateUserGroupServlet METHOD=POST>");
out.println("<INPUT TYPE=HIDDEN NAME=groupname VALUE="+groupName+">");
out.println("<INPUT TYPE=HIDDEN NAME=grouptype VALUE="+groupType+">");
out.println("<INPUT TYPE=HIDDEN NAME=username VALUE= "+userName+">");
out.println("<INPUT TYPE=HIDDEN NAME=update VALUE= yes>");
out.println("<td><INPUT TYPE=SUBMIT class=creategroupbuttonstyle VALUE=\"agree to update\"></td>");
out.println("</FORM>");
out.println("<FORM ACTION=/gsn/MyUpdateUserGroupServlet METHOD=POST>");
out.println("<INPUT TYPE=HIDDEN NAME=groupname VALUE="+groupName+">");
out.println("<INPUT TYPE=HIDDEN NAME=grouptype VALUE="+groupType+">");
out.println("<INPUT TYPE=HIDDEN NAME=username VALUE= "+userName+">");
out.println("<INPUT TYPE=HIDDEN NAME=update VALUE= no>");
out.println("<td><INPUT TYPE=SUBMIT class=creategroupbuttonstyle VALUE=\"refuse to update\"></td></tr>");
out.println("</FORM>");
}
out.println("</table>");
}
}
private void printGroupStructureLink(PrintWriter out, String groupname)
{
String groupurl="/gsn/MyGroupHtmlResultSetServlet?groupname="+groupname;
out.println("<ul class=displaylinkul >");
out.println("<td style=text-align:center><LI class=displaylinkli><a href="+groupurl+" onClick=\"poptastic(this.href); return false;\">    view    </a></LI></td>");
out.println("</ul>");
}
private void printGroupListModulo(PrintWriter out,User user,int index)
{
Group group=null;
String label=null;
String groupName=null;
String groupType=null;
String userName = user.getUserName();
group=(Group)(user.getGroupList().get(index));
groupName=group.getGroupName();
groupType=group.getGroupType();
if(groupType.equals("5"))
{
label=" user wants to add this group ";
}
else if(groupType.equals("0"))
{
label=" user wants to delete this group ";
}
out.println("<table class=\"transparenttable\">");
out.println("<tr><td><B>groupname: </B>"+groupName +"</td></tr>");
out.println("<tr><td><B>user choice: </B>"+label +" </td></tr>");
out.println("</table>");
out.println("<BR>");
this.printGroupDataSourceList(out,group);
out.println("<BR>");
out.println("<FORM ACTION=/gsn/MyUpdateUserGroupServlet METHOD=POST>");
out.println("<INPUT TYPE=HIDDEN NAME=groupname VALUE="+groupName+">");
out.println("<INPUT TYPE=HIDDEN NAME=grouptype VALUE="+groupType+">");
out.println("<INPUT TYPE=HIDDEN NAME=username VALUE= "+userName+">");
out.println("<INPUT TYPE=HIDDEN NAME=update VALUE= yes>");
out.println("<table class=\"transparenttable\">");
out.println("<td><INPUT TYPE=SUBMIT class=creategroupbuttonstyle VALUE=\"agree to update\"></td>");
out.println("</FORM>");
out.println("<FORM ACTION=/gsn/MyUpdateUserGroupServlet METHOD=POST>");
out.println("<INPUT TYPE=HIDDEN NAME=groupname VALUE="+groupName+">");
out.println("<INPUT TYPE=HIDDEN NAME=grouptype VALUE="+groupType+">");
out.println("<INPUT TYPE=HIDDEN NAME=username VALUE= "+userName+">");
out.println("<INPUT TYPE=HIDDEN NAME=update VALUE= no>");
out.println("<td><INPUT TYPE=SUBMIT class=creategroupbuttonstyle VALUE=\"refuse to update\"></td></tr>");
out.println("</FORM>");
out.println("</table>");
}
private void printGroupDataSourceList(PrintWriter out,Group group)
{
DataSource ds=null;
String dsname=null;
String dstype=null;
String label=null;
out.println("<table >");
out.println(" <caption>"+group.getGroupName()+" combination</caption>");
out.println("<tr><th> virtual sensor name </th>");
out.println("<th> access right</th></tr>");
for(int j=0;j<group.getDataSourceList().size();j++)
{
ds=(DataSource)group.getDataSourceList().get(j);
dsname=ds.getDataSourceName();
dstype=ds.getDataSourceType();
if(dstype.charAt(0)=='1')
{
label="read";
}
else if(dstype.charAt(0)=='2')
{
label="write";
}
else if(dstype.charAt(0)=='3')
{
label="read/write";
}
out.println("<tr><td>" +dsname+"</td>");
out.println("<td>" +label +"</td></tr>");
}
out.println("</table>");
}
private void printUserInformation(PrintWriter out,User user)
{
out.println("<table>");
out.println("<tr><th>username</th>");
out.println("<th>user first name</th>");
out.println("<th>user last name</th>");
out.println("<th>user E-mail</th></tr>");
out.println("<tr><td>"+user.getUserName() +"</td>");
out.println("<td>"+user.getFirstName() +" </td>");
out.println("<td>"+user.getLastName() +"</td>");
out.println("<td>"+user.getEmail() +"</td></tr>");
out.println("</table>");
}
private void printUserDataSourceList(PrintWriter out,User user)
{
String userName=user.getUserName();
DataSource ds=null;
String dsname=null;
String dstype=null;
String ownerDecision=null;
String label=null;
if(user.getDataSourceList().size()==0)
{
out.println("<p>No virtaul sensor is selected.</p>");
out.println("<BR>");
}
else
{
out.println("<table>");
out.println("<tr><th> virtual sensor name </th>");
out.println("<th> access right</th>");
out.println("<th> owner decision</th>");
out.println("<th> admin decision</th>");
out.println("<th> admin decision</th></tr>");
for(int i=0; i<user.getDataSourceList().size();i++)
{
ds=(DataSource)(user.getDataSourceList().get(i));
dsname=ds.getDataSourceName();
dstype=ds.getDataSourceType();
ownerDecision=ds.getOwnerDecision();
if(dstype.charAt(1)=='1')
{
label="read";
}
else if(dstype.charAt(1)=='2')
{
label="write";
}
else if(dstype.charAt(1)=='3')
{
label="read/write";
}
else if(dstype.charAt(1)=='0')
{
label="delete";
}
if(ownerDecision.equals("notreceived"))
{
ownerDecision = "not received";
}
out.println("<tr><td>" +dsname+"</td>");
out.println("<td>" +label +"</td>");
out.println("<td>" +ownerDecision +"</td>");
out.println("<FORM ACTION=/gsn/MyUpdateUserDataSourceServlet METHOD=POST>");
out.println("<INPUT TYPE=HIDDEN NAME=username VALUE= "+userName+">");
out.println("<INPUT TYPE=HIDDEN NAME= datasourcename VALUE= "+dsname+"> ");
out.println("<INPUT TYPE=HIDDEN NAME= datasourcetype VALUE= "+dstype+"> ");
out.println("<INPUT TYPE=HIDDEN NAME=update VALUE= yes>");
out.println("<td><INPUT TYPE=SUBMIT class=creategroupbuttonstyle VALUE=\"agree to update \"></td>");
out.println("</FORM>");
out.println("<FORM ACTION=/gsn/MyUpdateUserDataSourceServlet METHOD=POST>");
out.println("<INPUT TYPE=HIDDEN NAME=username VALUE= "+userName+">");
out.println("<INPUT TYPE=HIDDEN NAME= datasourcename VALUE= "+dsname+"> ");
out.println("<INPUT TYPE=HIDDEN NAME= datasourcetype VALUE= "+dstype+"> ");
out.println("<INPUT TYPE=HIDDEN NAME=update VALUE= no>");
out.println("<td><INPUT TYPE=SUBMIT class=creategroupbuttonstyle VALUE=\"refuse to update\"></td></tr>");
out.println("</FORM>");
}
}
out.println("</table>");
}
private void printFooter(PrintWriter out) throws ServletException
{
out.println("<p>\n" +
"<table width=\"100%\"><tr>\n" +
"<td align=right><A HREF=\"/gsn/MyLogoutHandlerServlet\">logout</a>"+
" <A HREF=/gsn/MyAdminManagementServlet>back to admin account management </a></td>"+
"</tr></table>");
}
/****************************************** Client Session related Methods*******************************************/
/********************************************************************************************************************/
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/MyUserUpdateWaitingListServlet");
}
}
private void redirectToLogin(HttpServletRequest req, HttpServletResponse res)throws IOException
{
req.getSession().setAttribute("login.target", HttpUtils.getRequestURL(req).toString());
res.sendRedirect("/gsn/MyLoginHandlerServlet");
}
}