Update of /cvsroot/wonder/ProjectWonder/Frameworks/ERExtensionsJava In directory usw-pr-cvs1:/tmp/cvs-serv23317 Modified Files: ERXApplication.java Added Files: ERXMutableUserInfoHolderInterface.java ERXSubmitButton.java ERXWOContext.java ERXWOForm.java Log Message: HACKs: Localized submit button, WOForm that hollers if it is embedded inside another, WOContext replacement with user info and a corresponding interface. --- NEW FILE: ERXMutableUserInfoHolderInterface.java --- // // ERXMutableUserInfoHolderInterface.java // Project ERExtensionsJava // // Created by ak on Thu Jun 20 2002 // package er.extensions; import com.webobjects.foundation.*; /** Interface to implement generic mutable containers */ public interface ERXMutableUserInfoHolderInterface { /** Returns the mutableUserInfo.*/ public NSMutableDictionary mutableUserInfo(); /** Set the mutableUserInfo */ public void setMutableUserInfo(NSMutableDictionary userInfo); } --- NEW FILE: ERXSubmitButton.java --- // // ERXSubmitButton.java // Project armehaut // // Created by ak on Mon Apr 01 2002 // /*HACK: we have to be in _private to override the _appendValueAttributeToResponse method*/ package com.webobjects.appserver._private; import com.webobjects.foundation.*; import com.webobjects.appserver.*; import er.extensions.ERXLogger; import er.extensions.ERXLocalizer; /** Localizable subclass of WOSubmitButton. * Uses {link er.extensions.ERXLocalizer} to translate the buttons Text. */ public class ERXSubmitButton extends WOSubmitButton { /** logger */ static final ERXLogger log = ERXLogger.getLogger(ERXSubmitButton.class); /** Constructor. Simply calls super */ public ERXSubmitButton(String name, NSDictionary associations, WOElement template) { super(name, associations, template); } /** Appends the attribute "value" to the response. * First tries to get a localized version and if that fails, uses the * supplied value as the default */ protected void _appendValueAttributeToResponse(WOResponse woresponse, WOContext wocontext) { if (_value != null) { Object object = _value.valueInComponent(wocontext.component()); Object object1 = null; if (object != null) { String string = object.toString(); string = ERXLocalizer.currentLocalizer(). localizedStringForKeyWithDefault(string); woresponse._appendTagAttributeAndValue("value", string, true); } } } } --- NEW FILE: ERXWOContext.java --- // // ERXWOContext.java // Project armehaut // // Created by ak on Mon Apr 01 2002 // package er.extensions; import com.webobjects.foundation.*; import com.webobjects.appserver.*; /** Replacement of WOContext. * This subclass is installed when the frameworks loads. */ public class ERXWOContext extends WOContext implements ERXMutableUserInfoHolderInterface { public ERXWOContext(WORequest worequest) { super(worequest); } protected NSMutableDictionary mutableUserInfo; public NSMutableDictionary mutableUserInfo() { if(mutableUserInfo == null) { mutableUserInfo = new NSMutableDictionary(); } return mutableUserInfo; } public void setMutableUserInfo(NSMutableDictionary userInfo) { mutableUserInfo = userInfo; } } --- NEW FILE: ERXWOForm.java --- // // ERXWOForm.java // Project armehaut // // Created by ak on Mon Apr 01 2002 // package er.extensions; import com.webobjects.foundation.*; import com.webobjects.appserver.*; /** Transparent replacement for WOForm. * It adds the Forms name to the ERXContext's mutableUserInfo as as "formName" key, * which makes writing JavaScript elements a bit easier. * Also, it warns you when you have one Form embedded inside another. * Should be fixed to skip writing out the Form tag, which would make the * ERXOptionalForm obsolete. * This subclass is installed when the frameworks loads. */ public class ERXWOForm extends com.webobjects.appserver._private.WOForm { static final ERXLogger log = ERXLogger.getLogger(ERXWOForm.class); String _formName; NSDictionary _associations; public ERXWOForm(String name, NSDictionary associations, WOElement template) { super(name, associations, template); _associations = associations; _formName = null; } public void appendAttributesToResponse(WOResponse response, WOContext context) { if(context instanceof ERXMutableUserInfoHolderInterface) { Object association = _associations.objectForKey("name"); if(association != null) { String formName = (String)((WOAssociation)association).valueInComponent(context.component()); if(formName != null) ((ERXMutableUserInfoHolderInterface)context).mutableUserInfo().setObjectForKey(formName, "formName"); } } super.appendAttributesToResponse(response, context); } public void appendToResponse(WOResponse response, WOContext context) { if(context.isInForm()) log.warn("This Form is embedded in another Form."); super.appendToResponse(response, context); if(context instanceof ERXMutableUserInfoHolderInterface) ((ERXMutableUserInfoHolderInterface)context).mutableUserInfo().removeObjectForKey("formName"); } } Index: ERXApplication.java =================================================================== RCS file: /cvsroot/wonder/ProjectWonder/Frameworks/ERExtensionsJava/ERXApplication.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** ERXApplication.java 30 May 2002 18:11:32 -0000 1.12 --- ERXApplication.java 20 Jun 2002 10:51:24 -0000 1.13 *************** *** 12,15 **** --- 12,16 ---- import com.webobjects.directtoweb.*; import com.webobjects.appserver.*; + import com.webobjects.appserver._private.ERXSubmitButton; import java.util.*; import org.apache.log4j.Category; *************** *** 32,35 **** --- 33,50 ---- public static final String WORequestHandlerDidHandleRequestNotification = WORequestHandler.DidHandleRequestNotification; + + /** + * The ERXApplication contructor. + * Sets the Context class name to "er.extensions.ERXWOContext" if + * it is "WOContext". Patches ERXWOForm to be used instead of WOForm. + */ + public ERXApplication() { + super(); + if(contextClassName().equals("WOContext")) + setContextClassName("er.extensions.ERXWOContext"); + ERXCompilerProxy.defaultProxy().setClassForName(ERXWOForm.class, "WOForm"); + ERXCompilerProxy.defaultProxy().setClassForName(ERXSubmitButton.class, "WOSubmitButton"); + } + /** * The ERXApplication singleton. *************** *** 77,80 **** --- 92,115 ---- t.schedule(); } super.run(); + } + + /** + * Creates the request object for this loop. + * Overridden to use an {link ERXRequest} object that fixes a bug + * with localization. + * @param aMethod the HTTP method object used to send the request, must be one of "GET", "POST" or "HEAD" + * @param aURL - must be non-null + * @param anHTTPVersion - the version of HTTP used + * @param someHeaders - dictionary whose String keys correspond to header names + * @param aContent - the HTML content of the receiver + * @param someInfo - an NSDictionary that can contain any kind of information related to the current response. + * @returns a new WORequest object + */ + public WORequest createRequest(String aMethod, String aURL, + String anHTTPVersion, + NSDictionary someHeaders, NSData aContent, + NSDictionary someInfo) { + WORequest worequest = new ERXRequest(aMethod, aURL, anHTTPVersion, someHeaders, aContent, someInfo); + return worequest; } |