/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.webui.form;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.core.model.SelectItemOption;
/**
* Represents a radio box element The selected box value is stored in the value_ property of UIFormInputBase
*/
@Serialized
public class UIFormRadioBoxInput extends UIFormInputBase<String> {
public static int VERTICAL_ALIGN = 1;
public static int HORIZONTAL_ALIGN = 2;
/**
* The list of radio boxes
*/
private List<SelectItemOption<String>> options_;
/**
* Alignment of the element (vertical or horizontal)
*/
private int align_;
private int topRender_ = 0;
public UIFormRadioBoxInput() {
}
public UIFormRadioBoxInput(String name, String value) {
this(name, value, new ArrayList<SelectItemOption<String>>());
}
public UIFormRadioBoxInput(String name, String value, List<SelectItemOption<String>> options) {
super(name, value, String.class);
value_ = value;
this.options_ = options;
align_ = HORIZONTAL_ALIGN;
}
public final List<SelectItemOption<String>> getOptions() {
return options_;
}
public final UIFormRadioBoxInput setOptions(List<SelectItemOption<String>> options) {
this.options_ = options;
return this;
}
public final UIFormRadioBoxInput setAlign(int val) {
align_ = val;
return this;
}
/**
* Method set render one radio box in fois !
*
* @return : object of UIFormRadioBoxInput
*/
public final UIFormRadioBoxInput setRenderOneRadioBox() {
topRender_ = 1;
return this;
}
@SuppressWarnings("unused")
public void decode(Object input, WebuiRequestContext context) {
if (isDisabled())
return;
if (input != null)
value_ = (String) input;
}
public void processRender(WebuiRequestContext context) throws Exception {
if (options_ == null)
return;
ResourceBundle res = context.getApplicationResourceBundle();
Writer w = context.getWriter();
if (value_ == null) {
SelectItemOption<String> si = options_.get(0);
value_ = si.getValue();
}
int index = 0;
for (int i = index; i < options_.size(); i++) {
SelectItemOption<String> si = options_.get(i);
String checked = "";
if (si.getValue().equals(value_))
checked = " checked='checked'";
// if(align_ == VERTICAL_ALIGN) w.write("<div style='overflow:hidden; width: 100%'>");
// if(align_ == VERTICAL_ALIGN) w.write("<div style='clear:both;'><span></span></div>") ;
if (align_ == VERTICAL_ALIGN)
w.write("<div>");
w.write("<input class='radio' type='radio'");
if (readonly_)
w.write(" readonly ");
if (isDisabled())
w.write(" disabled ");
w.write(checked);
w.write(" name='");
w.write(getName());
w.write("'");
w.write(" id='");
w.write(getName());
w.write("'");
w.write(" value='");
w.write(si.getValue());
w.write("'/>");
w.write(" <span>");
String label = getId() + ".label." + si.getLabel();
try {
label = res.getString(label);
} catch (MissingResourceException e) {
label = si.getLabel();
}
w.write(label);
w.write("</span>");
if (align_ == VERTICAL_ALIGN)
w.write("</div>");
// if(align_ == VERTICAL_ALIGN) w.write("</div>");
if (topRender_ == 1) {
index = i + 1;
if (index == options_.size())
index = 0;
break;
}
}
}
public String renderWithId(int iteration) throws Exception {
if (options_ == null)
return "";
Writer w = new StringWriter();
if (value_ == null) {
SelectItemOption<String> si = options_.get(0);
value_ = si.getValue();
}
int index = 0;
for (int i = index; i < options_.size(); i++) {
SelectItemOption<String> si = options_.get(i);
String checked = "";
if (si.getValue().equals(value_))
checked = " checked='checked'";
// if(align_ == VERTICAL_ALIGN) w.write("<div style='overflow:hidden; width: 100%'>");
// if(align_ == VERTICAL_ALIGN) w.write("<div style='clear:both;'><span></span></div>") ;
if (align_ == VERTICAL_ALIGN)
w.write("<div>");
w.write("<input class='radio' type='radio'");
if (readonly_)
w.write(" readonly ");
if (isDisabled())
w.write(" disabled ");
w.write(checked);
w.write(" name='");
w.write(getName());
w.write("'");
w.write(" id='");
w.write(getName() + iteration);
w.write("'");
w.write(" value='");
w.write(si.getValue());
w.write("'/>");
if (align_ == VERTICAL_ALIGN)
w.write("</div>");
// if(align_ == VERTICAL_ALIGN) w.write("</div>");
if (topRender_ == 1) {
index = i + 1;
if (index == options_.size())
index = 0;
break;
}
}
return w.toString();
}
}