fully implemented conference membership management and delete conference -
now almost all the conference functionality is in place
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
package com.silverwrist.venice.servlets;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.*;
|
||||
import org.apache.log4j.*;
|
||||
@@ -33,6 +34,9 @@ public class ConfOperations extends VeniceServlet
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private static final String DELETE_CONFIRM_ATTR = "servlets.ConfOperations.delete.confirm";
|
||||
private static final String DELETE_CONFIRM_PARAM = "confirm";
|
||||
|
||||
private static Category logger = Category.getInstance(ConfOperations.class.getName());
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
@@ -174,6 +178,11 @@ public class ConfOperations extends VeniceServlet
|
||||
conf.fixSeen();
|
||||
|
||||
} // end try
|
||||
catch (AccessError ae)
|
||||
{ // some sort of access error - display an error dialog
|
||||
return new ErrorBox("Access Error",ae.getMessage(),on_error);
|
||||
|
||||
} // end catch
|
||||
catch (DataException de)
|
||||
{ // some sort of error in the database
|
||||
return new ErrorBox("Database Error","Database error catching up conference: " + de.getMessage(),
|
||||
@@ -282,9 +291,84 @@ public class ConfOperations extends VeniceServlet
|
||||
on_error);
|
||||
|
||||
} // end catch
|
||||
catch (AccessError ae)
|
||||
{ // some sort of access error - display an error dialog
|
||||
return new ErrorBox("Access Error",ae.getMessage(),on_error);
|
||||
|
||||
} // end catch
|
||||
|
||||
} // end if ("RP" and "RR" commands)
|
||||
|
||||
if (cmd.equals("M"))
|
||||
{ // "M" - Manage Conference Membership (requires conference parameter)
|
||||
ConferenceContext conf = getConferenceParameter(request,sig,true,on_error);
|
||||
on_error = "confops?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&cmd=Q";
|
||||
|
||||
try
|
||||
{ // display the conference member list!
|
||||
ConferenceMembership m = new ConferenceMembership(engine,sig,conf);
|
||||
m.doConferenceMemberList();
|
||||
setMyLocation(request,"confops?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&cmd=M");
|
||||
return m;
|
||||
|
||||
} // end try
|
||||
catch (DataException de)
|
||||
{ // something wrong in the database
|
||||
return new ErrorBox("Database Error","Database error listing conference members: " + de.getMessage(),
|
||||
on_error);
|
||||
|
||||
} // end catch
|
||||
catch (AccessError ae)
|
||||
{ // some lack of access is causing problems
|
||||
return new ErrorBox("Access Error",ae.getMessage(),on_error);
|
||||
|
||||
} // end catch
|
||||
|
||||
} // end if ("M" command)
|
||||
|
||||
if (cmd.equals("DEL"))
|
||||
{ // "DEL" = "Delete Conference (requires conference parameter)
|
||||
ConferenceContext conf = getConferenceParameter(request,sig,true,on_error);
|
||||
on_error = "confops?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&cmd=Q";
|
||||
|
||||
if (!(conf.canDeleteConference()))
|
||||
return new ErrorBox("Access Error","You do not have permission to delete this conference.",on_error);
|
||||
|
||||
if (ConfirmBox.isConfirmed(request,DELETE_CONFIRM_ATTR,DELETE_CONFIRM_PARAM))
|
||||
{ // we are confirmed - delete the conference!
|
||||
try
|
||||
{ // tell it to go away
|
||||
conf.delete();
|
||||
|
||||
} // end try
|
||||
catch (DataException de)
|
||||
{ // something wrong in the database
|
||||
return new ErrorBox("Database Error","Database error deleting conference: " + de.getMessage(),
|
||||
on_error);
|
||||
|
||||
} // end catch
|
||||
catch (AccessError ae)
|
||||
{ // some lack of access is causing problems
|
||||
return new ErrorBox("Access Error",ae.getMessage(),on_error);
|
||||
|
||||
} // end catch
|
||||
|
||||
// that's it - trap back to the main conference list
|
||||
throw new RedirectResult("confops?sig=" + sig.getSIGID());
|
||||
|
||||
} // end if
|
||||
else
|
||||
{ // generate a confirmation box and wait for confirmation
|
||||
String message = "You are about to permanently delete the \"" + conf.getName() + "\" conference! "
|
||||
+ "Are you sure you want to do this?";
|
||||
return new ConfirmBox(request,DELETE_CONFIRM_ATTR,DELETE_CONFIRM_PARAM,"Delete Conference",message,
|
||||
"confops?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&cmd=DEL",
|
||||
on_error);
|
||||
|
||||
} // end else
|
||||
|
||||
} // end if ("DEL" command)
|
||||
|
||||
// Any unrecognized command shows us the conference list.
|
||||
on_error = "sigprofile?sig=" + sig.getSIGID();
|
||||
try
|
||||
@@ -572,6 +656,124 @@ public class ConfOperations extends VeniceServlet
|
||||
|
||||
} // end if ("A" command)
|
||||
|
||||
if (cmd.equals("M"))
|
||||
{ // "M" - Manage Conference Membership (requires conference parameter)
|
||||
ConferenceContext conf = getConferenceParameter(request,sig,true,on_error);
|
||||
on_error = "confops?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&cmd=M";
|
||||
|
||||
if (isImageButtonClicked(request,"update"))
|
||||
{ // the "update" command that changes all the security levels
|
||||
HashMap org_vals = new HashMap();
|
||||
HashMap new_vals = new HashMap();
|
||||
try
|
||||
{ // retrieve all parameters and filter them for the levels
|
||||
Enumeration p_names = request.getParameterNames();
|
||||
while (p_names.hasMoreElements())
|
||||
{ // examine each parameter name in turn
|
||||
String p_name = (String)(p_names.nextElement());
|
||||
if (p_name.startsWith("zxcur_"))
|
||||
{ // this is a current value (from a hidden field)
|
||||
int uid = Integer.parseInt(p_name.substring(6));
|
||||
int level = Integer.parseInt(request.getParameter(p_name));
|
||||
org_vals.put(new Integer(uid),new Integer(level));
|
||||
|
||||
} // end if
|
||||
else if (p_name.startsWith("zxnew_"))
|
||||
{ // this is a new value (from a dropdown list box)
|
||||
int uid = Integer.parseInt(p_name.substring(6));
|
||||
int level = Integer.parseInt(request.getParameter(p_name));
|
||||
new_vals.put(new Integer(uid),new Integer(level));
|
||||
|
||||
} // end else if
|
||||
|
||||
} // end while
|
||||
|
||||
if (org_vals.size()!=new_vals.size())
|
||||
return new ErrorBox(null,"Invalid parameters.",on_error);
|
||||
|
||||
} // end try
|
||||
catch (NumberFormatException nfe)
|
||||
{ // error converting the parameters
|
||||
return new ErrorBox(null,"Invalid parameter conversion.",on_error);
|
||||
|
||||
} // end catch
|
||||
|
||||
try
|
||||
{ // loop through the hashmaps and set the value
|
||||
Iterator it = org_vals.keySet().iterator();
|
||||
while (it.hasNext())
|
||||
{ // extract the UID, old level, and new level
|
||||
Integer uid = (Integer)(it.next());
|
||||
Integer org_level = (Integer)(org_vals.get(uid));
|
||||
Integer new_level = (Integer)(new_vals.get(uid));
|
||||
if (new_level==null) // whoops
|
||||
return new ErrorBox(null,"Invalid new level parameter.",on_error);
|
||||
int new_level_x = new_level.intValue();
|
||||
if (new_level_x==0)
|
||||
new_level_x = -1;
|
||||
|
||||
// call down to set the membership level
|
||||
if (org_level.intValue()!=new_level_x)
|
||||
conf.setMembership(uid.intValue(),new_level_x);
|
||||
|
||||
} // end while
|
||||
|
||||
} // end try
|
||||
catch (AccessError ae)
|
||||
{ // some sort of access error - display an error dialog
|
||||
return new ErrorBox("Access Error",ae.getMessage(),on_error);
|
||||
|
||||
} // end catch
|
||||
catch (DataException de)
|
||||
{ // database error creating the conference
|
||||
return new ErrorBox("Database Error","Database error setting memberships: " + de.getMessage(),
|
||||
on_error);
|
||||
|
||||
} // end catch
|
||||
|
||||
// trap back to the conference membership display
|
||||
throw new RedirectResult(on_error);
|
||||
|
||||
} // end if ("update" clicked)
|
||||
|
||||
if ( isImageButtonClicked(request,"search") || isImageButtonClicked(request,"previous")
|
||||
|| isImageButtonClicked(request,"next"))
|
||||
{ // create the new dialog box
|
||||
ConferenceMembership m = new ConferenceMembership(engine,sig,conf);
|
||||
|
||||
try
|
||||
{ // perform the search!
|
||||
m.doSearch(request);
|
||||
|
||||
} // end try
|
||||
catch (ValidationException ve)
|
||||
{ // validation error - throw it back to the user
|
||||
return new ErrorBox(null,ve.getMessage() + " Please try again.",on_error);
|
||||
|
||||
} // end catch
|
||||
catch (AccessError ae)
|
||||
{ // some sort of access error - display an error dialog
|
||||
return new ErrorBox("Access Error",ae.getMessage(),on_error);
|
||||
|
||||
} // end catch
|
||||
catch (DataException de)
|
||||
{ // database error creating the conference
|
||||
return new ErrorBox("Database Error","Database error updating conference: " + de.getMessage(),
|
||||
on_error);
|
||||
|
||||
} // end catch
|
||||
|
||||
setMyLocation(request,on_error);
|
||||
return m;
|
||||
|
||||
} // end if (search function clicked)
|
||||
|
||||
// we don't know what button was pressed
|
||||
logger.error("no known button click on ConfOperations.doPost, cmd=M");
|
||||
return new ErrorBox("Internal Error","Unknown command button pressed",on_error);
|
||||
|
||||
} // end if ("M" command)
|
||||
|
||||
// unrecognized command!
|
||||
logger.error("invalid command to ConfOperations.doPost: " + cmd);
|
||||
return new ErrorBox("Internal Error","Invalid command to ConfOperations.doPost",on_error);
|
||||
|
||||
@@ -47,7 +47,8 @@ public class ConferenceActivity implements JSPRender
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public ConferenceActivity(SIGContext sig, ConferenceContext conf, boolean posters) throws DataException
|
||||
public ConferenceActivity(SIGContext sig, ConferenceContext conf, boolean posters)
|
||||
throws DataException, AccessError
|
||||
{
|
||||
this.sig = sig;
|
||||
this.conf = conf;
|
||||
|
||||
@@ -0,0 +1,337 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (the "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.servlets.format;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.*;
|
||||
import com.silverwrist.venice.ValidationException;
|
||||
import com.silverwrist.venice.security.Role;
|
||||
import com.silverwrist.venice.core.*;
|
||||
|
||||
public class ConferenceMembership implements JSPRender, SearchMode
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static data members
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Attribute name for request attribute
|
||||
protected static final String ATTR_NAME = "com.silverwrist.venice.content.ConferenceMembership";
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private VeniceEngine engine; // reference to the engine
|
||||
private SIGContext sig; // the SIG we're in
|
||||
private ConferenceContext conf; // the conference being listed
|
||||
private List display_list = null; // list of members to display
|
||||
private boolean conf_members = false; // is this a list of conference members?
|
||||
private int field = -1; // search field
|
||||
private int mode = -1; // search mode
|
||||
private String term = null; // search term
|
||||
private int offset = 0; // search result offset
|
||||
private int find_count = -1; // search results count
|
||||
private List role_choices; // the list of security roles
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructors
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public ConferenceMembership(VeniceEngine engine, SIGContext sig, ConferenceContext conf)
|
||||
{
|
||||
this.engine = engine;
|
||||
this.sig = sig;
|
||||
this.conf = conf;
|
||||
this.role_choices = Role.getConferenceMemberLevelChoices();
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Internal functions
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private static int getParamInt(ServletRequest request, String name, int default_val)
|
||||
{
|
||||
String str = request.getParameter(name);
|
||||
if (str==null)
|
||||
return -1;
|
||||
|
||||
try
|
||||
{ // parse the integer value
|
||||
return Integer.parseInt(str);
|
||||
|
||||
} // end try
|
||||
catch (NumberFormatException nfe)
|
||||
{ // in case of conversion error, return default
|
||||
return default_val;
|
||||
|
||||
} // end catch
|
||||
|
||||
} // end getParamInt
|
||||
|
||||
private static boolean isImageButtonClicked(ServletRequest request, String name)
|
||||
{
|
||||
String val = request.getParameter(name + ".x");
|
||||
return (val!=null);
|
||||
|
||||
} // end isImageButtonClicked
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External static functions
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public static ConferenceMembership retrieve(ServletRequest request)
|
||||
{
|
||||
return (ConferenceMembership)(request.getAttribute(ATTR_NAME));
|
||||
|
||||
} // end retrieve
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface VeniceContent
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public String getPageTitle(RenderData rdat)
|
||||
{
|
||||
return "Membership in Conference " + conf.getName();
|
||||
|
||||
} // end getPageTitle
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface JSPRender
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public void store(ServletRequest request)
|
||||
{
|
||||
request.setAttribute(ATTR_NAME,this);
|
||||
|
||||
} // end store
|
||||
|
||||
public String getTargetJSPName()
|
||||
{
|
||||
return "conf_member.jsp";
|
||||
|
||||
} // end getTargetJSPName
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public void doConferenceMemberList() throws DataException, AccessError
|
||||
{
|
||||
this.display_list = conf.getMemberList();
|
||||
this.conf_members = true;
|
||||
this.term = "";
|
||||
|
||||
} // end doConferenceMemberList
|
||||
|
||||
public void doSearch(ServletRequest request) throws ValidationException, DataException, AccessError
|
||||
{
|
||||
// Validate the search field parameter.
|
||||
field = getParamInt(request,"field",FIELD_USER_NAME);
|
||||
if ( (field!=FIELD_USER_NAME) && (field!=FIELD_USER_DESCRIPTION) && (field!=FIELD_USER_GIVEN_NAME)
|
||||
&& (field!=FIELD_USER_FAMILY_NAME))
|
||||
throw new ValidationException("The field search parameter is not valid.");
|
||||
|
||||
// Validate the search mode parameter.
|
||||
mode = getParamInt(request,"mode",SEARCH_PREFIX);
|
||||
if ((mode!=SEARCH_PREFIX) && (mode!=SEARCH_SUBSTRING) && (mode!=SEARCH_REGEXP))
|
||||
throw new ValidationException("The search mode parameter is not valid.");
|
||||
|
||||
// Retrieve the search term parameter.
|
||||
term = request.getParameter("term");
|
||||
if (term==null)
|
||||
term = "";
|
||||
|
||||
// Retrieve the offset and find count parameters.
|
||||
offset = getParamInt(request,"ofs",0);
|
||||
find_count = getParamInt(request,"fcount",-1);
|
||||
|
||||
// Adjust the search return offset based on the command button click.
|
||||
int count = getNumResultsDisplayed();
|
||||
if (isImageButtonClicked(request,"search"))
|
||||
offset = 0;
|
||||
else if (isImageButtonClicked(request,"previous"))
|
||||
{ // adjust the offset in the reverse direction
|
||||
offset -= count;
|
||||
if (offset<0)
|
||||
offset = 0;
|
||||
|
||||
} // end else if
|
||||
else if (isImageButtonClicked(request,"next"))
|
||||
offset += count; // go forwards instead
|
||||
else
|
||||
throw new ValidationException("Unable to determine what action triggered the form.");
|
||||
|
||||
// Perform the search!
|
||||
List intermediate = sig.searchForMembers(field,mode,term,offset,count);
|
||||
if (find_count<0)
|
||||
find_count = sig.getSearchMemberCount(field,mode,term);
|
||||
|
||||
// Create the real display list by getting the conference security levels.
|
||||
Iterator it = intermediate.iterator();
|
||||
Vector rc = new Vector(count+1);
|
||||
while (it.hasNext())
|
||||
{ // loop around and find the member level of every one
|
||||
UserFound uf = (UserFound)(it.next());
|
||||
int new_level = conf.getMemberLevel(uf.getUID());
|
||||
if (new_level==-1)
|
||||
new_level = 0;
|
||||
rc.add(uf.createNewLevel(new_level));
|
||||
|
||||
} // end while
|
||||
|
||||
display_list = rc; // save display list for display
|
||||
|
||||
} // end doSearch
|
||||
|
||||
public int getSIGID()
|
||||
{
|
||||
return sig.getSIGID();
|
||||
|
||||
} // end getSIGID
|
||||
|
||||
public int getConfID()
|
||||
{
|
||||
return conf.getConfID();
|
||||
|
||||
} // end getConfID
|
||||
|
||||
public String getSIGName()
|
||||
{
|
||||
return sig.getName();
|
||||
|
||||
} // end getSIGName
|
||||
|
||||
public String getConfName()
|
||||
{
|
||||
return conf.getName();
|
||||
|
||||
} // end getConfName
|
||||
|
||||
public String getLocator()
|
||||
{
|
||||
return "sig=" + sig.getSIGID() + "&conf=" + conf.getConfID();
|
||||
|
||||
} // end getLocator
|
||||
|
||||
public boolean displayList()
|
||||
{
|
||||
if ((display_list==null) || (display_list.size()==0))
|
||||
return false;
|
||||
if (conf_members && (display_list.size()>engine.getMaxNumConferenceMembersDisplay()))
|
||||
return false;
|
||||
return true;
|
||||
|
||||
} // end displayList
|
||||
|
||||
public boolean conferenceMemberList()
|
||||
{
|
||||
return conf_members;
|
||||
|
||||
} // end conferenceMemberList
|
||||
|
||||
public int getSearchField()
|
||||
{
|
||||
return field;
|
||||
|
||||
} // end getSearchField
|
||||
|
||||
public int getSearchMode()
|
||||
{
|
||||
return mode;
|
||||
|
||||
} // end getSearchMode
|
||||
|
||||
public boolean searchFieldIs(int value)
|
||||
{
|
||||
return (field==value);
|
||||
|
||||
} // end searchFieldIs
|
||||
|
||||
public boolean searchModeIs(int value)
|
||||
{
|
||||
return (mode==value);
|
||||
|
||||
} // end searchModeIs
|
||||
|
||||
public String getSearchTerm()
|
||||
{
|
||||
return term;
|
||||
|
||||
} // end getSearchTerm
|
||||
|
||||
public int getFindCount()
|
||||
{
|
||||
return find_count;
|
||||
|
||||
} // end getFindCount
|
||||
|
||||
public int getOffset()
|
||||
{
|
||||
return offset;
|
||||
|
||||
} // end getOffset
|
||||
|
||||
public int getSize()
|
||||
{
|
||||
return display_list.size();
|
||||
|
||||
} // end getSize
|
||||
|
||||
public int getNumResultsDisplayed()
|
||||
{
|
||||
return engine.getStdNumSearchResults();
|
||||
|
||||
} // end getNumResultsDisplayed
|
||||
|
||||
public UserFound getItem(int ndx)
|
||||
{
|
||||
return (UserFound)(display_list.get(ndx));
|
||||
|
||||
} // end getItem
|
||||
|
||||
public void outputDropDown(Writer out, int uid, int cur_level) throws IOException
|
||||
{
|
||||
out.write("<INPUT TYPE=HIDDEN NAME=\"zxcur_" + uid + "\" VALUE=\"" + cur_level + "\">\n");
|
||||
out.write("<SELECT NAME=\"zxnew_" + uid + "\" SIZE=1>\n");
|
||||
Iterator it = role_choices.iterator();
|
||||
while (it.hasNext())
|
||||
{ // output the <OPTION> lines for the dropdown
|
||||
Role r = (Role)(it.next());
|
||||
out.write("<OPTION VALUE=\"" + r.getLevel() + "\"");
|
||||
if (r.getLevel()==cur_level)
|
||||
out.write(" SELECTED");
|
||||
out.write(">" + r.getName() + "</OPTION>\n");
|
||||
|
||||
} // end while
|
||||
|
||||
out.write("</SELECT>\n");
|
||||
|
||||
} // end outputDropDown
|
||||
|
||||
} // end class ConferenceMembership
|
||||
@@ -66,7 +66,7 @@ public class ConfirmBox implements ContentRender
|
||||
this.conf_num = rng.nextInt(0x1000000);
|
||||
this.title = title;
|
||||
this.message = message;
|
||||
this.confirm_url = confirm_url + "&" + param_name + "=" + String.valueOf(this.conf_num);
|
||||
this.confirm_url = confirm_url + "&" + param_name + "=" + this.conf_num;
|
||||
this.deny_url = deny_url;
|
||||
|
||||
// Stash this object in the HTTP session.
|
||||
|
||||
Reference in New Issue
Block a user