/* * Copyright (C) NetStruxr, Inc. All rights reserved. * * This software is published under the terms of the NetStruxr * Public Software License version 0.5, a copy of which has been * included with this distribution in the LICENSE.NPL file. */ package er.directtoweb.components.bool; import com.webobjects.appserver.WOContext; import com.webobjects.directtoweb.D2WEditBoolean; import com.webobjects.foundation.NSArray; /** * Allows editing boolean values based on radio buttons and localizable strings.<br> * Set the values via the <code>choicesNames</code> d2wcontext value, eg: ("Yes", "No") or ("Set", "Unset", "Don't care") * @d2wKey choicesNames */ // FIXME AK: together with ERD2WQueryBoolean, should use a common ERXEditBoolean that takes a choicesNames binding public class ERD2WCustomEditBoolean extends D2WEditBoolean { /** * 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 ERD2WCustomEditBoolean(WOContext context) { super(context); } protected NSArray<String> _choicesNames; @Override public void reset(){ super.reset(); _choicesNames = null; } @SuppressWarnings("unchecked") public NSArray<String> choicesNames() { if(_choicesNames == null) { _choicesNames = (NSArray<String>)d2wContext().valueForKey("choicesNames"); } return _choicesNames; } 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 String uiMode() { return useCheckbox() ? "checkbox" : "radio"; } public boolean useCheckbox() { return choicesNames().count() == 1; } public boolean allowsNull() { return choicesNames().count() > 2; } }