Re: [projectwonder/wonder] 3ecb42: Provide a delegate to override the built in ERD2W ...
Re: [projectwonder/wonder] 3ecb42: Provide a delegate to override the built in ERD2W ...
- Subject: Re: [projectwonder/wonder] 3ecb42: Provide a delegate to override the built in ERD2W ...
- From: Ramsey Gurley <email@hidden>
- Date: Mon, 30 Apr 2012 10:09:44 -0700
I needed it too. Now my login validation errors show up.
https://github.com/nullterminated/ponder/blob/master/ERAuth/Sources/er/auth/LoginValidationDelegate.java
I still haven't done list validation on multiple objects with it, but I think there's sufficient flexibility there to do it now. Sorry it took me a month for me to get to it :-)
Ramsey
On Apr 30, 2012, at 9:49 AM, Fabian Peters wrote:
> Ramsey,
>
> Thanks for this, it's very useful! Much appreciated!
>
> Fabian
>
> Am 25.04.2012 um 05:00 schrieb GitHub:
>
>> Branch: refs/heads/integration
>> Home: https://github.com/projectwonder/wonder
>> Commit: 3ecb423dd6b575451f85b5f0ced77d655411d84f
>> https://github.com/projectwonder/wonder/commit/3ecb423dd6b575451f85b5f0ced77d655411d84f
>> Author: nullterminated <email@hidden>
>> Date: 2012-04-24 (Tue, 24 Apr 2012)
>>
>> Changed paths:
>> M Frameworks/Core/ERDirectToWeb/Sources/er/directtoweb/pages/ERD2WPage.java
>>
>> Log Message:
>> -----------
>> Provide a delegate to override the built in ERD2W validation logic.
>>
>>
>> diff --git a/Frameworks/Core/ERDirectToWeb/Sources/er/directtoweb/pages/ERD2WPage.java b/Frameworks/Core/ERDirectToWeb/Sources/er/directtoweb/pages/ERD2WPage.java
>> index 7a92892..afdaab2 100644
>> --- a/Frameworks/Core/ERDirectToWeb/Sources/er/directtoweb/pages/ERD2WPage.java
>> +++ b/Frameworks/Core/ERDirectToWeb/Sources/er/directtoweb/pages/ERD2WPage.java
>> @@ -9,6 +9,9 @@
>> import java.io.IOException;
>> import java.io.ObjectInputStream;
>> import java.io.ObjectOutputStream;
>> +import java.io.Serializable;
>> +import java.lang.reflect.Constructor;
>> +import java.lang.reflect.InvocationTargetException;
>> import java.util.Enumeration;
>> import java.util.NoSuchElementException;
>>
>> @@ -31,11 +34,13 @@
>> import com.webobjects.eocontrol.EOEnterpriseObject;
>> import com.webobjects.foundation.NSArray;
>> import com.webobjects.foundation.NSDictionary;
>> +import com.webobjects.foundation.NSForwardException;
>> import com.webobjects.foundation.NSKeyValueCoding;
>> import com.webobjects.foundation.NSMutableArray;
>> import com.webobjects.foundation.NSMutableDictionary;
>> import com.webobjects.foundation.NSMutableSet;
>> import com.webobjects.foundation.NSTimestamp;
>> +import com.webobjects.foundation._NSUtilities;
>>
>> import er.directtoweb.ERD2WContainer;
>> import er.directtoweb.ERD2WDirectAction;
>> @@ -161,7 +166,7 @@
>> public static final String firstResponderKey = "firstResponderKey";
>>
>> }
>> -
>> +
>> /** logging support */
>> public final static Logger log = Logger.getLogger(ERD2WPage.class);
>>
>> @@ -364,19 +369,23 @@ public void setLocalContext(D2WContext newValue) {
>> // Error handling extensions
>> // **************************************************************************
>>
>> - protected NSMutableDictionary<String,String> errorMessages = new NSMutableDictionary<String,String>();
>> + protected NSMutableDictionary errorMessages = new NSMutableDictionary();
>>
>> - protected NSMutableArray<String> errorKeyOrder = new NSMutableArray<String>();
>> + protected NSMutableArray errorKeyOrder = new NSMutableArray();
>>
>> protected NSMutableArray<String> keyPathsWithValidationExceptions = new NSMutableArray<String>();
>>
>> protected String errorMessage = "";
>> +
>> + protected ValidationDelegate validationDelegate;
>> +
>> + protected boolean validationDelegateInited;
>>
>> - public NSMutableDictionary<String,String> errorMessages() {
>> + public NSMutableDictionary errorMessages() {
>> return errorMessages;
>> }
>>
>> - public void setErrorMessages(NSMutableDictionary<String,String> value) {
>> + public void setErrorMessages(NSMutableDictionary value) {
>> errorMessages = value;
>> }
>>
>> @@ -392,7 +401,7 @@ public boolean hasErrors() {
>> return (errorMessages != null && errorMessages.count() > 0) || (errorMessage != null && errorMessage.trim().length() > 0);
>> }
>>
>> - public NSArray<String> errorKeyOrder() {
>> + public NSArray errorKeyOrder() {
>> return errorKeyOrder;
>> }
>>
>> @@ -436,6 +445,10 @@ public void validationFailedWithException(Throwable e, Object value, String keyP
>> validationLog.debug("Validation failed with exception: " + e + " value: " + value + " keyPath: " + keyPath);
>> }
>> if (shouldCollectValidationExceptions()) {
>> + if(validationDelegate() != null) {
>> + validationDelegate().validationFailedWithException(e, value, keyPath);
>> + return;
>> + }
>> if (e instanceof ERXValidationException) {
>> ERXValidationException erv = (ERXValidationException) e;
>>
>> @@ -505,6 +518,67 @@ public void validationFailedWithException(Throwable e, Object value, String keyP
>> parent().validationFailedWithException(e, value, keyPath);
>> }
>> }
>> +
>> + public ValidationDelegate validationDelegate() {
>> + if(shouldCollectValidationExceptions() && !validationDelegateInited) {
>> + // initialize validation delegate
>> + String delegateClassName = (String)d2wContext().valueForKey("validationDelegateClassName");
>> + if(delegateClassName != null) {
>> + try {
>> + Class<? extends ValidationDelegate> delegateClass =
>> + _NSUtilities.classWithName(delegateClassName);
>> + if(delegateClass != null) {
>> + Constructor<? extends ValidationDelegate> constructor =
>> + delegateClass.getConstructor(ERD2WPage.class);
>> + validationDelegate = constructor.newInstance(this);
>> + }
>> + } catch (NoSuchMethodException e) {
>> + throw NSForwardException._runtimeExceptionForThrowable(e);
>> + } catch (IllegalArgumentException e) {
>> + throw NSForwardException._runtimeExceptionForThrowable(e);
>> + } catch (InstantiationException e) {
>> + throw NSForwardException._runtimeExceptionForThrowable(e);
>> + } catch (IllegalAccessException e) {
>> + throw NSForwardException._runtimeExceptionForThrowable(e);
>> + } catch (InvocationTargetException e) {
>> + throw NSForwardException._runtimeExceptionForThrowable(e);
>> + }
>> + }
>> + validationDelegateInited = true;
>> + }
>> + return validationDelegate;
>> + }
>> +
>> + public void setValidationDelegate(ValidationDelegate delegate) {
>> + validationDelegate = delegate;
>> + }
>> +
>> + public static abstract class ValidationDelegate implements Serializable {
>> + protected final ERD2WPage _page;
>> +
>> + public ValidationDelegate(ERD2WPage page) {
>> + _page = page;
>> + }
>> +
>> + protected NSMutableDictionary errorMessages() {
>> + return _page.errorMessages;
>> + }
>> +
>> + protected NSMutableArray errorKeyOrder() {
>> + return _page.errorKeyOrder;
>> + }
>> +
>> + protected String errorMessage() {
>> + return _page.errorMessage;
>> + }
>> +
>> + protected void setErrorMessage(String errorMessage) {
>> + _page.setErrorMessage(errorMessage);
>> + }
>> +
>> + public abstract boolean hasValidationExceptionForPropertyKey();
>> + public abstract void validationFailedWithException(Throwable e, Object value, String keyPath);
>> + }
>>
>> /** Checks if the current object can be edited. */
>> public boolean isObjectEditable() {
>> @@ -554,6 +628,9 @@ public boolean isEntityEditable() {
>> * current property key.
>> */
>> public boolean hasValidationExceptionForPropertyKey() {
>> + if(validationDelegate() != null) {
>> + return validationDelegate().hasValidationExceptionForPropertyKey();
>> + }
>> return d2wContext().propertyKey() != null && keyPathsWithValidationExceptions.count() != 0 ? keyPathsWithValidationExceptions.containsObject(d2wContext().propertyKey())
>> : false;
>> }
>>
>>
>> ================================================================
>>
>> #############################################################
>> This message is sent to you because you are subscribed to
>> the mailing list <email@hidden>.
>> To unsubscribe, E-mail to: <email@hidden>
>> To switch to the DIGEST mode, E-mail to <email@hidden>
>> To switch to the INDEX mode, E-mail to <email@hidden>
>> Send administrative queries to <email@hidden>
>>
>
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden