package com.webobjects.woextensions;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver._private.WOCheckBoxList;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSMutableArray;
/**
* XHTML equivalents of WOCheckboxList
*
* @see WOCheckBoxList
* @author mendis
*/
public class WXCheckboxList extends WOComponent {
/**
* Do I need to update serialVersionUID?
* See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the
* <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a>
*/
private static final long serialVersionUID = 1L;
public int index;
private String _id;
public WXCheckboxList(WOContext context) {
super(context);
}
@Override
public boolean isStateless() {
return true;
}
@Override
public void reset() {
super.reset();
_id = null;
}
/*
* api of component
*/
public static interface Bindings {
public static final String selections = "selections";
public static final String item = "item";
public static final String id = "id";
public static final String name = "name";
public static final String index = "index";
public static final String prefix = "prefix"; // TODO
public static final String suffix = "suffix"; // TODO
}
// accesors
private NSArray selections() {
return (NSArray) valueForBinding(Bindings.selections);
}
private Object item() {
return valueForBinding(Bindings.item);
}
public Object selection() {
if (selections() == null) return null;
return selections().contains(item()) ? item() : null;
}
public void setSelection(Object value) {
NSMutableArray selections = (selections() != null) ? selections().mutableClone() : new NSMutableArray();
if (value != null) {
selections.addObject(item());
} else {
selections.removeObject(item());
}
setValueForBinding(selections, Bindings.selections);
}
public String elementName() {
return hasBinding(Bindings.name) ? (String) valueForBinding(Bindings.name) : _id();
}
public String id() {
return _id() + "_" + index;
}
private String _id() {
if (_id == null) _id = hasBinding(Bindings.id) ? (String) valueForBinding(Bindings.id) : context().javaScriptElementID();
return _id;
}
public void setIndex(int i) {
index = i;
setValueForBinding(Integer.valueOf(index), Bindings.index);
}
}