You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ce...@apache.org on 2004/04/09 19:36:43 UTC

cvs commit: logging-log4j/examples/src/joran/calculator ComputationAction1.java ComputationAction2.java

ceki        2004/04/09 10:36:43

  Modified:    examples/src/joran/calculator ComputationAction1.java
                        ComputationAction2.java
  Log:
  
  Improved docs
  
  Revision  Changes    Path
  1.3       +1 -1      logging-log4j/examples/src/joran/calculator/ComputationAction1.java
  
  Index: ComputationAction1.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j/examples/src/joran/calculator/ComputationAction1.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ComputationAction1.java	9 Apr 2004 16:03:19 -0000	1.2
  +++ ComputationAction1.java	9 Apr 2004 17:36:43 -0000	1.3
  @@ -24,7 +24,7 @@
   
   
   /**
  - * The ComputationAction will print the result of the compuration made by 
  + * ComputationAction1 will print the result of the compuration made by 
    * children elements but only if the compuration itself is named, that is if the
    * name attribute of the associated computation element is not null. In other
    * words, anonymous computations will not print their result.
  
  
  
  1.2       +39 -5     logging-log4j/examples/src/joran/calculator/ComputationAction2.java
  
  Index: ComputationAction2.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j/examples/src/joran/calculator/ComputationAction2.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ComputationAction2.java	9 Apr 2004 14:02:37 -0000	1.1
  +++ ComputationAction2.java	9 Apr 2004 17:36:43 -0000	1.2
  @@ -26,24 +26,58 @@
   
   
   /**
  - * The ComputationAction will print the result of the compuration made by 
  - * children elements but only if the compuration itself is named.
  + * ComputationAction2 will print the result of the compuration made by 
  + * children elements but only if the compuration itself is named, that is if the
  + * name attribute of the associated computation element is not null. In other
  + * words, anonymous computations will not print their result.
  + * 
  + * ComputationAction2 differs from ComputationAction1 in its handling of
  + * instance variables. ComputationAction1 has a simple <Code>nameStr</code>
  + * instance variable. This variable is set when the begin() method is called 
  + * and then later used within the end() method. 
  + * 
  + * This simple approach works properly if the begin() and end()
  + * method of a given action are expected to be called in sequence. However,
  + * there are situations where the begin() method of the same action instance is 
  + * invoked multiple times before the matching end() method is invoked. 
  + * 
  + * When this happens, the second call to begin() overwrites values set by
  + * the first invocation to begin(). The solution is to save parameter values 
  + * into a separate stack. The well-formedness of XML will guarantee that a value
  + * saved by one begin() will be consumed only by the matching end() method.
  + * 
  + * Note that in the vast majority of cases there is no need to resort to a 
  + * separate stack for each variable. The situation of successibe begin() 
  + * invocations can only occur if: 
  + * 
  + * 1) the associated pattern contains a wildcard, i.e. the &#42; character
  + * 
  + * and
  + * 
  + * 2) the associated element tag can contain itself as a child 
  + *  
  + * For example, "&#42;/computation" pattern means that computations can contain
  + * other computation elements as children. 
    * 
    * @author Ceki G&uuml;lc&uuml;
    */
   public class ComputationAction2 extends Action {
     public static String NAME_ATR = "name";
   
  -  Stack paremeterStack = new Stack();
  +  Stack nameStrStack = new Stack();
     
     
     public void begin(ExecutionContext ec, String name, Attributes attributes) {
       String nameStr = attributes.getValue(NAME_ATR);
  -    paremeterStack.push(nameStr);
  +    // save nameStr value in a special stack. Note that the value is saved
  +    // even if it is empty or null.
  +    nameStrStack.push(nameStr);
     }
   
     public void end(ExecutionContext ec, String name) {
  -    String nameStr = (String) paremeterStack.pop();
  +    // pop nameStr value from the special stack
  +    String nameStr = (String) nameStrStack.pop();
  +    
       if (Option.isEmpty(nameStr)) {
         // nothing to do
       } else {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org