2004-07-22 09:06:16 +00:00

140 lines
4.5 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 Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.dlg;
import java.io.IOException;
import java.util.*;
import org.apache.log4j.*;
import org.w3c.dom.*;
import com.silverwrist.util.*;
import com.silverwrist.venice.except.*;
import com.silverwrist.venice.ui.*;
public abstract class PickListField extends BaseDialogField
{
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
*/
private static Logger logger = Logger.getLogger(PickListField.class);
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private List m_choices;
/*--------------------------------------------------------------------------------
* Constructors
*--------------------------------------------------------------------------------
*/
protected PickListField(String name, String caption, String caption2, boolean required, List choices)
{
super(false,name,caption,caption2,required);
m_choices = choices;
} // end constructor
protected PickListField(Element elt, List choices) throws ConfigException
{
super(false,elt,true,true);
m_choices = choices;
} // end constructor
protected PickListField(PickListField other)
{
super(other);
m_choices = other.m_choices;
} // end constructor
/*--------------------------------------------------------------------------------
* Abstract functions which MUST be overriden
*--------------------------------------------------------------------------------
*/
protected abstract String getChoiceName(Object o);
protected abstract String getChoiceValue(Object o);
/*--------------------------------------------------------------------------------
* Overrides from class BaseDialogField
*--------------------------------------------------------------------------------
*/
protected void renderField(RequestOutput out) throws IOException
{
out.write("<select class=\"content\" name=\"" + getName() + "\" size=\"1\"");
if (!isEnabled())
out.write(" disabled=\"disabled\"");
out.write(">\n");
String val = getStringValue();
boolean not_selected = true;
for (Iterator it=m_choices.iterator(); it.hasNext(); )
{ // loop through the list and render the choices
Object ch = it.next();
String ch_name = getChoiceName(ch);
out.write("<option value=\"" + ch_name + "\"");
if (ch_name.equals(val))
{ // found the selected element
out.write(" selected=\"selected\"");
not_selected = false;
} // end if
out.write(">" + StringUtil.encodeHTML(getChoiceValue(ch)) + "</option>\n");
} // end for
if (not_selected && isEnabled())
{ // aw, shit! there's no selected item!
logger.warn("PickListField \"" + getName() + "\" did not find a match for selected value \"" + val + "\"");
ArrayList tmp = new ArrayList(m_choices.size());
for (Iterator it=m_choices.iterator(); it.hasNext(); )
tmp.add(getChoiceName(it.next()));
logger.warn("Possible choices were: " + tmp);
} // end if
out.write("</select>\n"); // all done
} // end render
/*--------------------------------------------------------------------------------
* External operations
*--------------------------------------------------------------------------------
*/
public List getChoicesList()
{
return m_choices;
} // end getChoicesList
public void setChoicesList(List list)
{
m_choices = list;
} // end setChoicesList
} // end class PickListField