KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > input > tags > MultiSelectListBoxTag


1 /*
2  * SSL-Explorer
3  *
4  * Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */

19             
20 package com.sslexplorer.input.tags;
21
22 import java.util.Iterator JavaDoc;
23 import java.util.Locale JavaDoc;
24
25 import javax.servlet.jsp.JspException JavaDoc;
26
27 import org.apache.struts.Globals;
28 import org.apache.struts.taglib.TagUtils;
29 import org.apache.struts.util.LabelValueBean;
30 import org.apache.struts.util.MessageResources;
31
32 import com.sslexplorer.core.CoreUtil;
33 import com.sslexplorer.input.MultiSelectSelectionModel;
34
35 /**
36  * @author Brett Smith <brett@3sp.com>
37  */

38 public class MultiSelectListBoxTag extends AbstractMultiFieldTag {
39     
40     protected String JavaDoc modelName;
41     protected String JavaDoc modelProperty;
42     protected String JavaDoc sourceTitleKey;
43     protected String JavaDoc valueKeyPrefix;
44
45     public MultiSelectListBoxTag() {
46         super();
47         release();
48     }
49
50     public void release() {
51         super.release();
52         this.type = "hidden";
53         setStyleId("multiSelect");
54         setRows("5");
55         modelName = null;
56         modelProperty = null;
57         sourceTitleKey = null;
58         valueKeyPrefix = null;
59     }
60
61     /* (non-Javadoc)
62      * @see org.apache.struts.taglib.html.BaseFieldTag#doStartTag()
63      */

64     public int doStartTag() throws JspException JavaDoc {
65         
66         String JavaDoc sourceTitle = null;
67         if(sourceTitleKey != null) {
68             sourceTitle =
69                 TagUtils.getInstance().message(
70                 pageContext,
71                 getBundle(),
72                 getLocale(),
73                 sourceTitleKey,
74                 new String JavaDoc[] { });
75             
76             if (sourceTitle == null) {
77                 JspException JavaDoc e =
78                     new JspException JavaDoc(
79                         messages.getMessage("message.message", "\"" + sourceTitleKey + "\""));
80                 TagUtils.getInstance().saveException(pageContext, e);
81                 throw e;
82             }
83         }
84
85         String JavaDoc targetTitle = prepareTargetTitle();
86         
87         
88         StringBuffer JavaDoc results = new StringBuffer JavaDoc("<div ");
89         results.append(prepareStyles());
90         results.append(">");
91         results.append(this.renderInputElement());
92         results.append("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">");
93         if(sourceTitle != null || targetTitle != null) {
94             results.append("<tr class=\"header\"><td class=\"source\">");
95             if(sourceTitle != null) {
96                 results.append(sourceTitle);
97             }
98             results.append("</td><td class=\"actions\"/><td class=\"target\">");
99             if(targetTitle != null) {
100                 results.append(targetTitle);
101             }
102             results.append("</td></tr>");
103         }
104         results.append("<tr class=\"body\"><td class=\"source\">");
105         results.append(renderSourceComponent());
106         results.append("</td><td class=\"actions\"><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">");
107         results.append("<tr><td>");
108         results.append(renderSelectComponent());
109         results.append("</td></tr>");
110         results.append("<tr><td>");
111         results.append(renderDeselectComponent());
112         if(configureKey != null) {
113             results.append("</td></tr><tr><td>");
114             results.append(renderConfigureComponent());
115         }
116         if(isAllowReordering()) {
117             results.append("</td></tr><tr><td>");
118             results.append(renderUpComponent());
119             results.append("</td></tr><tr><td>");
120             results.append(renderDownComponent());
121         }
122         results.append("</td></tr></table></td><td class=\"target\">");
123         results.append(renderTargetComponent());
124         results.append("</td></tr></table></div>");
125         TagUtils.getInstance().write(this.pageContext, results.toString());
126
127         return (EVAL_BODY_BUFFERED);
128     }
129     
130     protected String JavaDoc prepareSourceId() throws JspException JavaDoc {
131         StringBuffer JavaDoc results = new StringBuffer JavaDoc("sourceValues_");
132         if(indexed) {
133             prepareIndex(results, name);
134         }
135         results.append(property);
136         return results.toString();
137     }
138     
139     protected String JavaDoc renderSourceComponent() throws JspException JavaDoc {
140         StringBuffer JavaDoc results = new StringBuffer JavaDoc("<select multiple id=\"");
141         results.append(prepareSourceId());
142         results.append("\"");
143         if (rows != null) {
144             results.append(" size=\"");
145             results.append(rows);
146             results.append("\"");
147         }
148         results.append(prepareDisabled());
149         results.append(">");
150         Object JavaDoc value = TagUtils.getInstance().lookup(pageContext, modelName, modelProperty,
151             null);
152         if (value == null || ! ( value instanceof MultiSelectSelectionModel )) {
153             throw new JspException JavaDoc("Model attributes must specify an instance of MultiSelectListDataSourceModel (" + value + ")");
154         }
155         MultiSelectSelectionModel model = (MultiSelectSelectionModel)value;
156         for(Iterator JavaDoc i = model.getAvailableValues().iterator(); i.hasNext(); ) {
157             LabelValueBean lvb = (LabelValueBean)i.next();
158             results.append("<option value=\"");
159             results.append(lvb.getValue());
160             results.append("\">");
161             results.append(getLocalisedLabel(lvb));
162             results.append("</option>");
163         }
164         results.append("</select>");
165         return results.toString();
166         
167     }
168     
169     protected String JavaDoc renderSelectComponent() throws JspException JavaDoc {
170         StringBuffer JavaDoc results = new StringBuffer JavaDoc("<input class=\"multiAdd\"");
171         results.append(prepareDisabled());
172         results.append(" onclick=\"multiSelectSelectValue(");
173         results.append("document.getElementById('");
174         if (indexed) {
175             this.prepareIndex(results, name);
176         }
177         results.append(property);
178         results.append("'), document.getElementById('");
179         results.append(prepareSourceId());
180         results.append("'), document.getElementById('");
181         results.append(prepareTargetId());
182         results.append("'));\" type=\"button\" value=\"");
183         results.append(prepareAdd());
184         results.append("\"/>");
185         return results.toString();
186     }
187     
188     protected String JavaDoc renderDeselectComponent() throws JspException JavaDoc {
189         StringBuffer JavaDoc results = new StringBuffer JavaDoc("<input class=\"multiRemove\"");
190         results.append(prepareDisabled());
191         results.append(" onclick=\"multiSelectDeselectValue(");
192         results.append("document.getElementById('");
193         if (indexed) {
194             this.prepareIndex(results, name);
195         }
196         results.append(property);
197         results.append("'), document.getElementById('");
198         results.append(prepareSourceId());
199         results.append("'), document.getElementById('");
200         results.append(prepareTargetId());
201         results.append("'));\" type=\"button\" value=\"");
202         results.append(prepareRemove());
203         results.append("\"/>");
204         return results.toString();
205     }
206     
207     protected String JavaDoc renderTargetComponent() throws JspException JavaDoc {
208         StringBuffer JavaDoc results = new StringBuffer JavaDoc("<select multiple id=\"");
209         results.append(prepareTargetId());
210         results.append("\"");
211         if (rows != null) {
212             results.append(" size=\"");
213             results.append(rows);
214             results.append("\"");
215         }
216         results.append(">");
217         Object JavaDoc value = TagUtils.getInstance().lookup(pageContext, modelName, modelProperty,
218             null);
219         if (value == null || ! ( value instanceof MultiSelectSelectionModel )) {
220             throw new JspException JavaDoc("Model attributes must specify an instance of MultiSelectListDataSourceModel (" + value + ")");
221         }
222         MultiSelectSelectionModel model = (MultiSelectSelectionModel)value;
223         for(Iterator JavaDoc i = model.getSelectedValues().iterator(); i.hasNext(); ) {
224             LabelValueBean lvb = (LabelValueBean)i.next();
225             results.append("<option value=\"");
226             results.append(lvb.getValue());
227             results.append("\">");
228             results.append(getLocalisedLabel(lvb));
229             results.append("</option>");
230         }
231         results.append("</select>");
232         return results.toString();
233         
234     }
235     
236     protected String JavaDoc getLocalisedLabel(LabelValueBean lvb) {
237         if(valueKeyPrefix != null) {
238             Locale JavaDoc locale = (Locale JavaDoc)pageContext.getSession().getAttribute(Globals.LOCALE_KEY);
239             if(locale != null) {
240                 MessageResources mr = CoreUtil.getMessageResources(pageContext.getSession(), getBundle());
241                 if(mr != null) {
242                     String JavaDoc locLabel = mr.getMessage(locale, valueKeyPrefix + ".value." + lvb.getValue());
243                     if(locLabel != null) {
244                         return locLabel;
245                     }
246                 }
247             }
248         }
249         return lvb.getLabel();
250     }
251
252     /* (non-Javadoc)
253      * @see org.apache.struts.taglib.html.BaseFieldTag#renderInputElement()
254      */

255     protected String JavaDoc renderInputElement() throws JspException JavaDoc {
256         StringBuffer JavaDoc results = new StringBuffer JavaDoc("<input type=\"");
257         results.append(this.type);
258         results.append("\"");
259         results.append(prepareDisabled());
260         results.append(" name=\"");
261
262         if (indexed) {
263             this.prepareIndex(results, name);
264         }
265
266         results.append(property);
267         results.append("\"");
268         
269         results.append(" id=\"");
270         if(indexed) {
271             this.prepareIndex(results, name);
272         }
273
274         results.append(property);
275         results.append("\"");
276
277         results.append(" value=\"");
278         if (value != null) {
279             results.append(this.formatValue(value));
280
281         } else if (redisplay || !"password".equals(type)) {
282             Object JavaDoc value =
283                 TagUtils.getInstance().lookup(pageContext, name, property, null);
284
285             results.append(this.formatValue(value));
286         }
287         results.append('"');
288         results.append(this.prepareEventHandlers());
289         results.append(this.getElementClose());
290         return results.toString();
291     }
292     
293
294     /**
295      * @return Returns the modelName.
296      */

297     public String JavaDoc getModelName() {
298         return modelName;
299     }
300
301     /**
302      * @param modelName The modelName to set.
303      */

304     public void setModelName(String JavaDoc modelName) {
305         this.modelName = modelName;
306     }
307
308     /**
309      * @return Returns the modelProperty.
310      */

311     public String JavaDoc getModelProperty() {
312         return modelProperty;
313     }
314
315     /**
316      * @param modelProperty The modelProperty to set.
317      */

318     public void setModelProperty(String JavaDoc modelProperty) {
319         this.modelProperty = modelProperty;
320     }
321
322     /**
323      * @return Returns the sourceTitleKey.
324      */

325     public String JavaDoc getSourceTitleKey() {
326         return sourceTitleKey;
327     }
328
329     /**
330      * @param sourceTitleKey The sourceTitleKey to set.
331      */

332     public void setSourceTitleKey(String JavaDoc sourceTitleKey) {
333         this.sourceTitleKey = sourceTitleKey;
334     }
335     
336     public void setValueKeyPrefix(String JavaDoc valueKeyPrefix) {
337         this.valueKeyPrefix = valueKeyPrefix;
338     }
339 }
340
Popular Tags