You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by mo...@apache.org on 2002/10/08 21:29:01 UTC

cvs commit: jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/validators HttpValidatorTagSupport.java RegexpTag.java

morgand     2002/10/08 12:29:01

  Modified:    latka/src/java/org/apache/commons/latka/jelly
                        JellyUtils.java RequestTag.java SuiteTag.java
                        ValidateTag.java
               latka/src/java/org/apache/commons/latka/jelly/validators
                        HttpValidatorTagSupport.java RegexpTag.java
  Log:
  worked out event model more and implemented regexp validator
  
  Revision  Changes    Path
  1.3       +13 -3     jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/JellyUtils.java
  
  Index: JellyUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/JellyUtils.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JellyUtils.java	8 Oct 2002 17:28:21 -0000	1.2
  +++ JellyUtils.java	8 Oct 2002 19:29:01 -0000	1.3
  @@ -96,4 +96,14 @@
           return (LatkaEventInfo) context.getVariable(EVENT_INFO_VAR);
       }
   
  +    /**
  +     * Provide a LatkaEventInfo object.
  +     * 
  +     * @param context LatkaEventInfo object
  +     * @param info
  +     */
  +    public void setLatkaEventInfo(JellyContext context, LatkaEventInfo info) {
  +        context.setVariable(EVENT_INFO_VAR,info);
  +    }
  +
   }
  
  
  
  1.4       +27 -27    jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/RequestTag.java
  
  Index: RequestTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/RequestTag.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RequestTag.java	8 Oct 2002 17:28:21 -0000	1.3
  +++ RequestTag.java	8 Oct 2002 19:29:01 -0000	1.4
  @@ -121,25 +121,13 @@
           
           // will throw an unrecoverable LatkaException if the request could not
           // be created, typically because of a malformed URL
  -        if (_request == null) {
  -            LatkaEventInfo listener = 
  -                JellyUtils.getInstance().getLatkaEventInfo(getContext());
  -            try {
  -                Response response = getResponse();
  -                listener.requestSucceeded(new RequestSucceededEvent(
  -                    response.getRequest(), response));
  -                
  -                _log.warn("Eventually this debug needs to go.");
  -                if (_log.isDebugEnabled()) {
  -                  _log.debug(response.getResource());
  -                }
  -            
  -            } catch (IOException e) {
  -                listener.requestError(new RequestErrorEvent(_request, null, e));
  -            }
  -        }
  -
  +        Response response = getResponse();
   
  +        LatkaEventInfo listener = JellyUtils.getInstance().getLatkaEventInfo(getContext());
  +        if (listener.didRequestSucceed(_request)) {
  +            listener.requestSucceeded(new RequestSucceededEvent(
  +              response.getRequest(), response));            
  +        }
   
       }
   
  @@ -192,20 +180,32 @@
   
       /**
        * The first time this method is called, a live HTTP
  -     * call will be made to the server, throwing an IOException
  +     * call will be made to the server, returning null
        * if the response cannot be obtained.  Subsequent
        * calls return a cached response.
        * 
        * @return Response for the request specified by the Latka script
  -     * @exception IOException
  -     *                   error accessing the server (recoverable)
        * @exception LatkaException
        *                   error creating the Request (unrecoverable)
        */
  -    public Response getResponse() throws IOException, LatkaException {
  -        if (_response == null) {
  +    public Response getResponse() throws LatkaException {
  +        if (_request == null) {
               _request = createRequest();
  -            _response = _request.execute();
  +
  +            LatkaEventInfo listener = 
  +                JellyUtils.getInstance().getLatkaEventInfo(getContext());
  +            try {
  +                _response = _request.execute();
  +                
  +                _log.warn("Eventually this debug needs to go.");
  +                if (_log.isDebugEnabled()) {
  +                  _log.debug(_response.getResource());
  +                }            
  +            } catch (IOException e) {
  +                listener.requestError(new RequestErrorEvent(_request, null, e));
  +                return null;
  +            }
  +
               // hack because sometimes we need to generate a new request after
               // a redirect
               _request = _response.getRequest();
  
  
  
  1.14      +10 -6     jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/SuiteTag.java
  
  Index: SuiteTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/SuiteTag.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- SuiteTag.java	8 Oct 2002 17:28:21 -0000	1.13
  +++ SuiteTag.java	8 Oct 2002 19:29:01 -0000	1.14
  @@ -64,7 +64,8 @@
   import org.apache.commons.jelly.TagSupport;
   import org.apache.commons.jelly.XMLOutput;
   
  -import org.apache.commons.latka.event.LatkaEventListener;
  +import org.apache.commons.latka.XMLReporter;
  +import org.apache.commons.latka.event.LatkaEventInfo;
   import org.apache.commons.latka.event.SuiteCompletedEvent;
   
   /**
  @@ -92,10 +93,12 @@
        * @throws Exception when any error occurs
        */
       public void doTag(XMLOutput xmlOutput) throws Exception {
  -        LatkaEventListener reporter = 
  +        LatkaEventInfo reporter = 
               JellyUtils.getInstance().getLatkaEventInfo(getContext());
  +        // if an enclosing tag does not specify a reporter, provide a default
           if (reporter == null) {
  -            throw new NullPointerException("An enclosing tag must set the LatkaEventListener.");
  +            reporter = new XMLReporter();
  +            JellyUtils.getInstance().setLatkaEventInfo(getContext(),reporter);
           }
   
           _settings = 
  @@ -104,6 +107,7 @@
           invokeBody(xmlOutput);
   
           reporter.suiteCompleted(new SuiteCompletedEvent());
  +
       }
   
       public SuiteSettings getSuiteSettings() {
  
  
  
  1.2       +17 -6     jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/ValidateTag.java
  
  Index: ValidateTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/ValidateTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ValidateTag.java	8 Oct 2002 17:16:35 -0000	1.1
  +++ ValidateTag.java	8 Oct 2002 19:29:01 -0000	1.2
  @@ -64,6 +64,9 @@
   import org.apache.commons.jelly.TagSupport;
   import org.apache.commons.jelly.XMLOutput;
   
  +import org.apache.commons.latka.LatkaException;
  +import org.apache.commons.latka.http.Response;
  +
   import org.apache.log4j.Category;
   
   /**
  @@ -81,11 +84,19 @@
       public void doTag(XMLOutput xmlOutput) throws Exception {
   
           // execute the request
  +        Response response = getResponse();
   
  -
  -        // perform the validations
  -        invokeBody(xmlOutput);
  -
  +        // perform the validations, skip the validations
  +        // if a response could not be obtained
  +        if (response != null) {
  +            invokeBody(xmlOutput);
  +        }
  +
  +    }
  +
  +    protected Response getResponse() throws LatkaException {
  +        RequestTag tag = (RequestTag) findAncestorWithClass(RequestTag.class);
  +        return tag.getResponse();
       }
   
   }
  
  
  
  1.4       +45 -9     jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/validators/HttpValidatorTagSupport.java
  
  Index: HttpValidatorTagSupport.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/validators/HttpValidatorTagSupport.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- HttpValidatorTagSupport.java	8 Oct 2002 17:16:35 -0000	1.3
  +++ HttpValidatorTagSupport.java	8 Oct 2002 19:29:01 -0000	1.4
  @@ -62,12 +62,16 @@
   package org.apache.commons.latka.jelly.validators;
   
   import org.apache.commons.jelly.TagSupport;
  +import org.apache.commons.jelly.XMLOutput;
   
  +import org.apache.commons.latka.LatkaException;
   import org.apache.commons.latka.Validator;
   import org.apache.commons.latka.ValidationException;
  -import org.apache.commons.latka.event.LatkaEventListener;
  +import org.apache.commons.latka.event.LatkaEventInfo;
   import org.apache.commons.latka.event.RequestFailedEvent;
   import org.apache.commons.latka.http.Response;
  +import org.apache.commons.latka.jelly.JellyUtils;
  +import org.apache.commons.latka.jelly.RequestTag;
   
   import org.apache.log4j.Category;
   
  @@ -81,14 +85,34 @@
   public abstract class HttpValidatorTagSupport extends TagSupport {
   
       /** the response being validated */
  -    private Response _response = null;
  +    protected Response _response = null;
       /** the listener handling request success/failure etc */
  -    private LatkaEventListener _listener = null;
  +    protected LatkaEventInfo _listener = null;
       /** label for the test */
       protected String _label = null;
   
       protected static final Category _log = Category.getInstance(HttpValidatorTagSupport.class);
   
  +    public HttpValidatorTagSupport() {
  +    }
  +
  +    public abstract Validator getValidator();
  +
  +    /**
  +     * Provides a default implementation for simple validation
  +     * tags.  Will execute the validator produced by 
  +     * getValidator().  Override if necessary.
  +     * 
  +     * @param xmlOutput a place to write output
  +     * @exception Exception when any error occurs
  +     */
  +    public void doTag(XMLOutput xmlOutput) throws Exception {
  +        invokeBody(xmlOutput);
  +        
  +        Validator validator = getValidator();
  +        validate(validator);
  +    }
  +
       /**
        * Called by the ValidationFactory.
        *
  @@ -97,10 +121,15 @@
        * @param reader xml to process 
        * @param response response to validate
        */
  -    public void init(Response response, LatkaEventListener listener,
  -              String tagName) {
  -        _response = response;
  -        _listener = listener;
  +    public void init() {
  +        RequestTag tag = 
  +            (RequestTag) findAncestorWithClass(RequestTag.class);
  +        try {
  +            _response = tag.getResponse();
  +        } catch (LatkaException e) {
  +            _log.error("Unexpected exception, should have been caught earlier.");
  +        }
  +        _listener = JellyUtils.getInstance().getLatkaEventInfo(getContext());
       }
   
       public void setLabel(String label) {
  @@ -118,16 +147,23 @@
       /**
        * validate the response using the validator provided.
        * This method will notify the listener in the event
  -     * of a failure.
  +     * of a failure.  Will return false and not execute
  +     * the validation if the request is already invalid.
        * 
        * @param validator the object that performs validation
        * @return whether or not the request passed validation
        */
       public boolean validate(Validator validator) {
  +        init();
           if (_log.isDebugEnabled()) {
               _log.debug("performing custom validation");
               _log.debug("validator = " + validator);
               _log.debug("response = " + _response);
  +        }
  +
  +        if (_listener.didRequestSucceed(_response.getRequest()) == false) {
  +            _log.debug("Validator skipped");
  +            return false;
           }
   
           boolean valid = true;
  
  
  
  1.5       +6 -15     jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/validators/RegexpTag.java
  
  Index: RegexpTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/latka/src/java/org/apache/commons/latka/jelly/validators/RegexpTag.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- RegexpTag.java	8 Oct 2002 17:16:35 -0000	1.4
  +++ RegexpTag.java	8 Oct 2002 19:29:01 -0000	1.5
  @@ -61,9 +61,6 @@
   
   package org.apache.commons.latka.jelly.validators;
   
  -import org.apache.commons.jelly.MissingAttributeException;
  -import org.apache.commons.jelly.XMLOutput;
  -
   import org.apache.commons.latka.Validator;
   import org.apache.commons.latka.validators.RegexpValidator;
   
  @@ -86,14 +83,8 @@
       
       protected static final Category _log = Category.getInstance(RegexpTag.class);
   
  -    /**
  -     *
  -     * @param xmlOutput a place to write output
  -     * @throws Exception when any error occurs
  -     */
  -    public void doTag(XMLOutput xmlOutput) throws Exception {
  -        Validator validator = new RegexpValidator(_label,_pattern,_condition,_ignoreCase);
  -        boolean isValid = validate(validator);
  +    public Validator getValidator() {
  +        return new RegexpValidator(_label,_pattern,_condition,_ignoreCase);
       }
           
       /** Setter for property ignoreCase.
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>