Eric J. Bowersox 070fd2c9e2 implemented the "pics in posts" flag globally...it marks the first appearance
of "properties" storage and editing for conferences, communities, users, and
the global system.  In addition, the "global properties" editing screen got
implemented, because it wasn't there yet.
2001-11-11 01:22:07 +00:00

466 lines
13 KiB
Java

/*
* 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 Community 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.util.*;
import java.io.Writer;
import java.io.IOException;
import javax.servlet.ServletRequest;
import com.silverwrist.util.StringUtil;
import com.silverwrist.venice.ValidationException;
public class ContentDialog implements Cloneable, ContentRender, ColorSelectors
{
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private String title; // dialog title
private String subtitle; // dialog subtitle
private String formname; // name of the built-in form
private String action; // action applet
private String error_message = null; // error message
private String instructions = null; // instructions
private Hashtable hidden_fields; // list of all hidden fields & values
private Hashtable command_buttons; // command buttons by name
private Vector command_order; // command buttons in order (left to right)
private Hashtable form_fields; // form fields by name
private Vector form_order; // form fields in order (top to bottom)
/*--------------------------------------------------------------------------------
* Constructors
*--------------------------------------------------------------------------------
*/
public ContentDialog(String title, String subtitle, String formname, String action)
{
this.title = title;
this.subtitle = subtitle;
this.formname = formname;
this.action = action;
hidden_fields = new Hashtable();
command_buttons = new Hashtable();
command_order = new Vector();
form_fields = new Hashtable();
form_order = new Vector();
} // end constructor
protected ContentDialog(ContentDialog other)
{
this.title = other.title;
this.subtitle = other.subtitle;
this.formname = other.formname;
this.action = other.action;
this.instructions = other.instructions;
this.hidden_fields = (Hashtable)(other.hidden_fields.clone());
command_buttons = new Hashtable();
command_order = new Vector();
form_fields = new Hashtable();
form_order = new Vector();
Enumeration enum = other.command_order.elements();
while (enum.hasMoreElements())
{ // share the command buttons with the new dialog
CDCommandButton button = (CDCommandButton)(enum.nextElement());
addCommandButton(button);
} // end while
enum = other.form_order.elements();
while (enum.hasMoreElements())
{ // clone the form fields and put them in the new dialog
CDFormField field = (CDFormField)(enum.nextElement());
addFormField(field.duplicate());
} // end while
} // end constructor
/*--------------------------------------------------------------------------------
* Internal functions
*--------------------------------------------------------------------------------
*/
private boolean anyRequired()
{
boolean rc = false;
Enumeration enum = form_order.elements();
while (!rc && enum.hasMoreElements())
{ // look for the first field that's marked "required"
CDFormField fld = (CDFormField)(enum.nextElement());
rc = fld.isRequired();
} // end while
return rc;
} // end anyRequired
/*--------------------------------------------------------------------------------
* Overrideable operations
*--------------------------------------------------------------------------------
*/
protected void validateWholeForm() throws ValidationException
{ // do nothing at this level
} // end validateWholeForm
/*--------------------------------------------------------------------------------
* Implementations from interface VeniceContent
*--------------------------------------------------------------------------------
*/
public String getPageTitle(RenderData rdat)
{
return title;
} // end getPageTitle
public String getPageQID()
{
return null;
} // end getPageQID
/*--------------------------------------------------------------------------------
* Implementations from interface ContentRender
*--------------------------------------------------------------------------------
*/
public void renderHere(Writer out, RenderData rdat) throws IOException
{
Enumeration enum;
// Output the content header
rdat.writeContentHeader(out,title,subtitle);
if (error_message!=null)
{ // print the error message
out.write("<TABLE BORDER=0 ALIGN=CENTER CELLPADDING=6 CELLSPACING=0><TR VALIGN=TOP>"
+ "<TD ALIGN=CENTER CLASS=\"content\">\n" + rdat.getStdFontTag(CONTENT_ERROR,3) + "<B>");
out.write(StringUtil.encodeHTML(error_message));
out.write("</B></FONT>\n</TD></TR></TABLE>\n");
} // end if
// Output the start of the form
out.write("<FORM NAME=\"" + formname + "\" METHOD=POST ACTION=\"" + rdat.getEncodedServletPath(action)
+ "\"><DIV CLASS=\"content\">" + rdat.getStdFontTag(CONTENT_FOREGROUND,2) + "\n");
enum = hidden_fields.keys();
while (enum.hasMoreElements())
{ // output all the hidden fields
String name = (String)(enum.nextElement());
String value = (String)(hidden_fields.get(name));
out.write("<INPUT TYPE=HIDDEN NAME=\"" + name + "\" VALUE=\"" + value + "\">\n");
} // end while
if (instructions!=null)
out.write(StringUtil.encodeHTML(instructions));
if (anyRequired())
{ // print the "required fields" instruction
if (instructions!=null)
out.write("<P>");
out.write("Required fields are marked with a " + rdat.getRequiredBullet() + ".<BR>\n");
} // end if
else if (instructions!=null)
out.write("<BR>\n");
out.write("<TABLE BORDER=0 ALIGN=CENTER CELLPADDING=6 CELLSPACING=0>\n");
if (form_order.size()>0)
{ // render the form elements now
enum = form_order.elements();
while (enum.hasMoreElements())
{ // render all the fields in order
CDFormField fld = (CDFormField)(enum.nextElement());
fld.renderHere(out,rdat);
} // end while
} // end if
out.write("</TABLE>\n");
if (command_order.size()>0)
{ // render the command buttons at the bottom
boolean is_first = true;
out.write("<DIV ALIGN=CENTER CLASS=\"content\">");
enum = command_order.elements();
while (enum.hasMoreElements())
{ // render each of the command buttons in the list
CDCommandButton button = (CDCommandButton)(enum.nextElement());
if (is_first)
is_first = false;
else
out.write("&nbsp;&nbsp;");
button.renderHere(out,rdat);
} // end while
out.write("</DIV>\n");
} // end if
out.write("</FONT></DIV></FORM>\n");
} // end renderHere
/*--------------------------------------------------------------------------------
* Operations usable only from derived classes
*--------------------------------------------------------------------------------
*/
protected CDFormField modifyField(String name)
{
return (CDFormField)(form_fields.get(name));
} // end modifyField
/*--------------------------------------------------------------------------------
* External operations
*--------------------------------------------------------------------------------
*/
public void setTitle(String title)
{
this.title = title;
} // end setTitle
public void setSubtitle(String subtitle)
{
this.subtitle = subtitle;
} // end setSubtitle
public void setErrorMessage(String message)
{
this.error_message = message;
} // end setErrorMessage
public void setInstructions(String instructions)
{
this.instructions = StringUtil.encodeHTML(instructions);
} // end setInstructions
public void setHiddenField(String name, String value)
{
if (value!=null)
hidden_fields.put(name,value);
} // end setHiddenField
public void removeHiddenField(String name)
{
hidden_fields.remove(name);
} // end removeHiddenField
public void addCommandButton(CDCommandButton button, int position)
{
command_buttons.put(button.getName(),button);
if (position<0)
command_order.addElement(button);
else
command_order.insertElementAt(button,position);
} // end addCommandButton
public void addCommandButton(CDCommandButton button)
{
addCommandButton(button,-1);
} // end addCommandButton
public void addFormField(CDFormField field, int position)
{
String name = field.getName();
if (name!=null)
form_fields.put(name,field);
if (position<0)
form_order.addElement(field);
else
form_order.insertElementAt(field,position);
} // end addFormField
public void addFormField(CDFormField field)
{
addFormField(field,-1);
} // end addFormField
public boolean isButtonClicked(ServletRequest request, String name)
{
CDCommandButton button = (CDCommandButton)(command_buttons.get(name));
if (button!=null)
return button.isClicked(request);
// now look in all form fields for the embedded button
Enumeration enum = form_order.elements();
while (enum.hasMoreElements())
{ // zap the state of the fields
CDFormField fld = (CDFormField)(enum.nextElement());
button = fld.findButton(name);
if (button!=null)
return button.isClicked(request);
} // end while
return false;
} // end isButtonClicked
public void loadValues(ServletRequest request)
{
// Look for the values of the hidden fields first.
Enumeration enum = hidden_fields.keys();
Hashtable updates = new Hashtable();
while (enum.hasMoreElements())
{ // get updates to the hidden field values
String name = (String)(enum.nextElement());
String value = request.getParameter(name);
if (value!=null)
updates.put(name,value);
} // end while
hidden_fields.putAll(updates); // make all the updates be recognized
// Now look for the values of the form fields.
enum = form_order.elements();
while (enum.hasMoreElements())
{ // look for the first field that's marked "required"
CDFormField fld = (CDFormField)(enum.nextElement());
String name = fld.getName();
if (name!=null) // load the parameter value
fld.setValue(request.getParameter(name));
} // end while
} // end loadValues
public void clearAllFields()
{
Enumeration enum = form_order.elements();
while (enum.hasMoreElements())
{ // zap the state of the fields
CDFormField fld = (CDFormField)(enum.nextElement());
fld.setValue(null);
} // end while
} // end clearAllFields
public String getFieldValue(String fieldname)
{
String value = (String)(hidden_fields.get(fieldname));
if (value!=null)
return value;
CDFormField fld = (CDFormField)(form_fields.get(fieldname));
if (fld!=null)
return fld.getValue();
else
return null;
} // end getFieldValue
public void setFieldValue(String fieldname, String value)
{
CDFormField fld = (CDFormField)(form_fields.get(fieldname));
if (fld!=null)
fld.setValue(value);
else if (value!=null)
setHiddenField(fieldname,value);
} // end setFieldValue
public Object getFieldObjValue(String fieldname)
{
String value = (String)(hidden_fields.get(fieldname));
if (value!=null)
return value;
CDFormField fld = (CDFormField)(form_fields.get(fieldname));
if (fld!=null)
return fld.getObjValue();
else
return null;
} // end getFieldObjValue
public void setFieldObjValue(String fieldname, Object value)
{
CDFormField fld = (CDFormField)(form_fields.get(fieldname));
if (fld!=null)
fld.setObjValue(value);
else if (value!=null)
setHiddenField(fieldname,value.toString());
} // end setFieldObjValue
public boolean isFieldEnabled(String fieldname)
{
CDFormField fld = (CDFormField)(form_fields.get(fieldname));
if (fld!=null)
return fld.isEnabled();
else
return false;
} // end isFieldEnabled
public void setFieldEnabled(String fieldname, boolean flag)
{
CDFormField fld = (CDFormField)(form_fields.get(fieldname));
if (fld!=null)
fld.setEnabled(flag);
} // end setFieldEnabled
public void validate() throws ValidationException
{
// validate each field in isolation
Enumeration enum = form_order.elements();
while (enum.hasMoreElements())
{ // look for the first field that's marked "required"
CDFormField fld = (CDFormField)(enum.nextElement());
fld.validate();
} // end while
// now validate the form as a whole
validateWholeForm();
} // end validate
public Object clone()
{
return new ContentDialog(this);
} // end clone
} // end class Dialog