// ========================================================================
// $Id: Select.java,v 1.7 2005/08/13 00:01:23 gregwilkins Exp $
// Copyright 1996-2004 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
package net.lightbody.bmp.proxy.jetty.html;
import net.lightbody.bmp.proxy.jetty.log.LogFactory;
import org.apache.commons.logging.Log;
import java.util.Enumeration;
/* -------------------------------------------------------------------- */
/** HTML select Block.
* @see net.lightbody.bmp.proxy.jetty.html.Block
*/
public class Select extends Block
{
private static Log log = LogFactory.getLog(Select.class);
/* ----------------------------------------------------------------- */
/**
* @param name Name of the form element
* @param multiple Whether multiple selections can be made
*/
public Select(String name,boolean multiple)
{
super("select");
attribute("name",name);
if (multiple)
attribute("multiple");
}
/* ----------------------------------------------------------------- */
/**
* @param name Name of the form element
* @param multiple Whether multiple selections can be made
*/
public Select(String name,boolean multiple, String[] options)
{
this(name,multiple);
for (int i=0; i<options.length; i++)
add(options[i]);
}
/* ----------------------------------------------------------------- */
/** Set the number of options to display at once */
public Select setSize(int size)
{
size(size);
return this;
}
/* ----------------------------------------------------------------- */
public Select add(Enumeration e)
{
while (e.hasMoreElements())
add(e.nextElement().toString());
return this;
}
/* ----------------------------------------------------------------- */
/** Add option and specify if selected.
*/
public Composite add(Object o)
{
if (o instanceof Enumeration)
this.add((Enumeration)o);
else
{
super.add("<option>");
super.add(o);
}
return this;
}
/* ----------------------------------------------------------------- */
/** Add option and specify if selected.
*/
public Select add(Object o, boolean selected)
{
if (selected)
super.add("<option selected>");
else
super.add("<option>");
super.add(o);
return this;
}
/* ----------------------------------------------------------------- */
/** Add an option.
* @param o The name of the option (displayed in the form)
* @param selected Whether the option is selected
* @param value The value of this option (returned in the form content)
*/
public Select add(Object o, boolean selected, String value)
{
if (selected)
super.add("<option selected value=\""+value+"\">");
else
super.add("<option value=\""+value+"\">");
super.add(o);
return this;
}
/* ----------------------------------------------------------------- */
/** Build a select from the given array of Strings. The values of the
* select are the indexes into the array of the strings, which are used
* as the labels on the selector.
* @param arr The array of strings for labels
* @param selected The index of the selected label, -1 for default
*/
public Select add(String arr[], int selected)
{
for (int i = 0; i < arr.length; i++){
this.add(arr[i], i == selected, Integer.toString(i));
}
return this;
}
/* ----------------------------------------------------------------- */
/** Build a select from the given array of Strings. The values of the
* select are the indexes into the array of the strings, which are used
* as the labels on the selector.
* @param arr The array of strings for labels
* @param selected The index of the selected label, -1 for default
*/
public Select add(String arr[], String selected)
{
for (int i = 0; i < arr.length; i++){
this.add(arr[i], arr[i].equals(selected));
}
return this;
}
/* ----------------------------------------------------------------- */
/** Utility function for multi-selectors.
* <p> This function takes the result returned by a multi-select input
* and produces an integer bit-set result of the selections made. It
* assumes the values of the multi-select are all different powers of 2.
*/
public static int bitsetFormResult(String result)
{
int i;
int from = 0;
int res = 0;
if(log.isDebugEnabled())log.debug("Result:"+result);
String sres = null;
while ((i = result.indexOf(' ', from)) != -1){
sres = result.substring(from, i);
res = res | Integer.parseInt(sres);
if(log.isDebugEnabled())log.debug("Match:"+sres+"+ res="+res);
from = i+1;
}
sres = result.substring(from);
res = res | Integer.parseInt(sres);
if(log.isDebugEnabled())log.debug("Match:"+sres+", res="+res);
return res;
}
}