Coverage Report - org.apache.commons.pipeline.stage.InvokeStaticMethodStage
 
Classes in this File Line Coverage Branch Coverage Complexity
InvokeStaticMethodStage
64%
16/25
50%
3/6
0
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one or more
 3  
  * contributor license agreements.  See the NOTICE file distributed with
 4  
  * this work for additional information regarding copyright ownership.
 5  
  * The ASF licenses this file to You under the Apache License, Version 2.0
 6  
  * (the "License"); you may not use this file except in compliance with
 7  
  * the License.  You may obtain a copy of the License at
 8  
  * 
 9  
  *     http://www.apache.org/licenses/LICENSE-2.0
 10  
  * 
 11  
  * Unless required by applicable law or agreed to in writing, software
 12  
  * distributed under the License is distributed on an "AS IS" BASIS,
 13  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14  
  * See the License for the specific language governing permissions and
 15  
  * limitations under the License. 
 16  
  */
 17  
 
 18  
 package org.apache.commons.pipeline.stage;
 19  
 
 20  
 import java.lang.reflect.InvocationTargetException;
 21  
 import java.lang.reflect.Method;
 22  
 
 23  
 import org.apache.commons.pipeline.StageException;
 24  
 
 25  
 /**
 26  
  * Runs a static method with the object (or array) being processed. The returned object 
 27  
  * will be exqueued on the main pipeline if it is not null. If the returned
 28  
  * object is null, this stage will attempt to place the original object on the 
 29  
  * branch specified by {@link #setNullResultBranchTag(String)}.
 30  
  */
 31  
 public class InvokeStaticMethodStage extends BaseStage {
 32  
     
 33  
     // Branch upon which the original objects will be enqueued if the defined
 34  
     // Method returned a null result.
 35  
     private String nullResultBranchKey;
 36  
 
 37  
     // Method used to process objects in the queue
 38  
     private Method method;
 39  
     
 40  
     /**
 41  
      * Creates a new instance of InvokeStaticMethodStage
 42  
      */
 43  
     public InvokeStaticMethodStage(Method method) {
 44  1
         super();
 45  1
         this.method = method;
 46  1
     }
 47  
     
 48  
     /** 
 49  
      * Convenience method to create the new stage with String description of className, methodName and argumentType
 50  
      *
 51  
      * @param className The fully qualified class name, such as "java.lang.String" of the class in which the method resides
 52  
      * @param methodName The name of the method
 53  
      * @param argumentType The argument type of the method (Sorry, this doesn't support multiple argument methods)
 54  
      */
 55  1
     public InvokeStaticMethodStage(String className, String methodName, String... argumentTypeNames) throws ClassNotFoundException, NoSuchMethodException {
 56  1
         Class clazz = InvokeStaticMethodStage.class.getClassLoader().loadClass(className);
 57  1
         Class[] argTypes = new Class[argumentTypeNames.length];
 58  2
         for (int i = 0; i < argumentTypeNames.length; i++) {
 59  1
             argTypes[i] = Class.forName(argumentTypeNames[i]);
 60  
         }
 61  
         
 62  1
         this.method = clazz.getMethod(methodName, argTypes);
 63  1
     }
 64  
     
 65  
     /** 
 66  
      * Returns the Method object for the method that will be used to process
 67  
      * objects in the queue.
 68  
      */
 69  
     public Method getMethod(){
 70  1
         return this.method;
 71  
     }
 72  
     
 73  
     /** 
 74  
      * <p>Calls the defined static method and exqueues the returned object if it is 
 75  
      * not null, otherwise placing the original object on the branch specified
 76  
      * by the nullResultBranchKey property if nullResultBranchKey is not null.</p>
 77  
      *
 78  
      * @param obj The object to be processed.
 79  
      */
 80  
     public void process(Object obj) throws StageException {
 81  
         try {
 82  1
             Object result = this.method.invoke(null, obj);
 83  1
             if (result != null){
 84  1
                 this.emit(result);
 85  0
             } else if (nullResultBranchKey != null) {
 86  0
                 this.context.getBranchFeeder(nullResultBranchKey).feed(obj);
 87  
             }
 88  0
         } catch (IllegalAccessException e){
 89  0
             throw new StageException(this, e);
 90  0
         } catch (InvocationTargetException e){
 91  0
             throw new StageException(this, e);
 92  1
         }       
 93  1
     }
 94  
 
 95  
     /**
 96  
      * Getter for property nullResultBranchKey.
 97  
      *
 98  
      * @return Value of property nullResultBranchKey.
 99  
      */
 100  
     public String getNullResultBranchKey() {
 101  0
         return this.nullResultBranchKey;
 102  
     }
 103  
 
 104  
     /**
 105  
      * Setter for property nullResultBranchKey. If set to null (default) 
 106  
      * then objects generating null results are simply dropped from the stream.
 107  
      *
 108  
      * @param nullResultBranchKey New value of property nullResultBranchKey.
 109  
      */
 110  
     public void setNullResultBranchKey(String nullResultBranchKey) {
 111  0
         this.nullResultBranchKey = nullResultBranchKey;
 112  0
     }
 113  
 }