1 // ======================================================================== 2 // $Id: Select.java,v 1.7 2005/08/13 00:01:23 gregwilkins Exp $ 3 // Copyright 1996-2004 Mort Bay Consulting Pty. Ltd. 4 // ------------------------------------------------------------------------ 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // ======================================================================== 15 16 package org.mortbay.html; 17 import java.util.Enumeration; 18 19 20 21 /* -------------------------------------------------------------------- */ 22 /** HTML select Block. 23 * @see org.mortbay.html.Block 24 */ 25 public class Select extends Block 26 { 27 /* ----------------------------------------------------------------- */ 28 /** 29 * @param name Name of the form element 30 * @param multiple Whether multiple selections can be made 31 */ 32 public Select(String name,boolean multiple) 33 { 34 super("select"); 35 attribute("name",name); 36 37 if (multiple) 38 attribute("multiple"); 39 } 40 41 /* ----------------------------------------------------------------- */ 42 /** 43 * @param name Name of the form element 44 * @param multiple Whether multiple selections can be made 45 */ 46 public Select(String name,boolean multiple, String[] options) 47 { 48 this(name,multiple); 49 50 for (int i=0; i<options.length; i++) 51 add(options[i]); 52 } 53 54 /* ----------------------------------------------------------------- */ 55 /** Set the number of options to display at once */ 56 public Select setSize(int size) 57 { 58 size(size); 59 return this; 60 } 61 62 /* ----------------------------------------------------------------- */ 63 public Select add(Enumeration e) 64 { 65 while (e.hasMoreElements()) 66 add(e.nextElement().toString()); 67 return this; 68 } 69 70 /* ----------------------------------------------------------------- */ 71 /** Add option and specify if selected. 72 */ 73 public Composite add(Object o) 74 { 75 if (o instanceof Enumeration) 76 this.add((Enumeration)o); 77 else 78 { 79 super.add("<option>"); 80 super.add(o); 81 } 82 return this; 83 } 84 85 /* ----------------------------------------------------------------- */ 86 /** Add option and specify if selected. 87 */ 88 public Select add(Object o, boolean selected) 89 { 90 if (selected) 91 super.add("<option selected>"); 92 else 93 super.add("<option>"); 94 super.add(o); 95 return this; 96 } 97 98 /* ----------------------------------------------------------------- */ 99 /** Add an option. 100 * @param o The name of the option (displayed in the form) 101 * @param selected Whether the option is selected 102 * @param value The value of this option (returned in the form content) 103 */ 104 public Select add(Object o, boolean selected, String value) 105 { 106 if (selected) 107 super.add("<option selected value=\""+value+"\">"); 108 else 109 super.add("<option value=\""+value+"\">"); 110 111 super.add(o); 112 113 return this; 114 } 115 116 /* ----------------------------------------------------------------- */ 117 /** Build a select from the given array of Strings. The values of the 118 * select are the indexes into the array of the strings, which are used 119 * as the labels on the selector. 120 * @param arr The array of strings for labels 121 * @param selected The index of the selected label, -1 for default 122 */ 123 public Select add(String arr[], int selected) 124 { 125 for (int i = 0; i < arr.length; i++){ 126 this.add(arr[i], i == selected, Integer.toString(i)); 127 } 128 return this; 129 } 130 131 /* ----------------------------------------------------------------- */ 132 /** Build a select from the given array of Strings. The values of the 133 * select are the indexes into the array of the strings, which are used 134 * as the labels on the selector. 135 * @param arr The array of strings for labels 136 * @param selected The index of the selected label, -1 for default 137 */ 138 public Select add(String arr[], String selected) 139 { 140 for (int i = 0; i < arr.length; i++){ 141 this.add(arr[i], arr[i].equals(selected)); 142 } 143 return this; 144 } 145 146 /* ----------------------------------------------------------------- */ 147 /** Utility function for multi-selectors. 148 * <p> This function takes the result returned by a multi-select input 149 * and produces an integer bit-set result of the selections made. It 150 * assumes the values of the multi-select are all different powers of 2. 151 */ 152 public static int bitsetFormResult(String result) 153 { 154 int i; 155 int from = 0; 156 int res = 0; 157 String sres = null; 158 while ((i = result.indexOf(' ', from)) != -1){ 159 sres = result.substring(from, i); 160 res = res | Integer.parseInt(sres); 161 from = i+1; 162 } 163 sres = result.substring(from); 164 res = res | Integer.parseInt(sres); 165 return res; 166 } 167 } 168 169 170 171