package er.directtoweb.components.bool; import org.apache.log4j.Logger; import com.webobjects.appserver.WOContext; import com.webobjects.directtoweb.D2WQueryBoolean; import com.webobjects.foundation.NSArray; import er.extensions.localization.ERXLocalizer; /** * <span class="en"> * Better D2WQueryBoolean, which allows you to sprecify the choices names via a context key, * containing the labels in a format like ("Don't care", "Yes", "No") or ("Yes", "No"). * Also keeps the selected value. * * @d2wKey choicesNames * </span> * * <span class="ja"> * D2WQueryBoolean 拡張版 * コンテキスト・キーでローカライズが可能です。 * ("Don't care", "Yes", "No") 又は ("Yes", "No"). * * さらに、選択されている値を保存します * * @d2wKey choicesNames - ローカライズ名:("ERD2WBoolean.Yes", "ERD2WBoolean.No", "ERD2WBoolean.DontCare") * </span> * * @author ak on Mon Dec 22 2003 */ public class ERD2WCustomQueryBoolean extends D2WQueryBoolean { /** * 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; /** logging support */ private static final Logger log = Logger.getLogger(ERD2WCustomQueryBoolean.class); protected NSArray<String> _choicesNames; /** * Public constructor * @param context the context */ public ERD2WCustomQueryBoolean(WOContext context) { super(context); } @SuppressWarnings("unchecked") public NSArray<String> choicesNames() { if (_choicesNames == null) _choicesNames = (NSArray<String>)d2wContext().valueForKey("choicesNames"); return _choicesNames; } @Override public void reset(){ super.reset(); _choicesNames = null; } @Override public Object value() { return displayGroup().queryMatch().valueForKey(propertyKey()); } @Override public void setValue(Object obj) { displayGroup().queryOperator().removeObjectForKey(propertyKey()); displayGroup().queryMatch().removeObjectForKey(propertyKey()); if(obj == null) { if(log.isDebugEnabled()) log.debug("Don't care"); } else { displayGroup().queryMatch().takeValueForKey(obj, propertyKey()); if(log.isDebugEnabled()) log.debug(obj); } } public String stringForYes() { return choicesNames().objectAtIndex(0); } public String stringForNo() { return choicesNames().objectAtIndex(1); } public String stringForNull() { if(allowsNull()) { return choicesNames().objectAtIndex(2); } return null; } public boolean allowsNull() { return choicesNames().count() > 2; } @Override public String displayString() { NSArray<String> choicesNames = choicesNames(); String result; if(choicesNames == null) { result = super.displayString(); } else { int choicesIndex = index == 0 ? 2 : index - 1; if(choicesIndex >= choicesNames.count()) { result = super.displayString(); } else { result = choicesNames.objectAtIndex(choicesIndex); } } return ERXLocalizer.currentLocalizer().localizedStringForKeyWithDefault(result); } public String uiMode() { String uiMode = "radio"; if(d2wContext().valueForKey("uiMode") != null) { uiMode = (String) d2wContext().valueForKey("uiMode"); } return uiMode; } }