Coverage Report - org.kuali.rice.kns.uif.field.GeneratedField
 
Classes in this File Line Coverage Branch Coverage Complexity
GeneratedField
0%
0/28
0%
0/8
1.857
 
 1  
 /*
 2  
  * Copyright 2011 The Kuali Foundation
 3  
  *
 4  
  * Licensed under the Educational Community License, Version 1.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  * http://www.opensource.org/licenses/ecl1.php
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package org.kuali.rice.kns.uif.field;
 17  
 
 18  
 import org.apache.commons.lang.StringUtils;
 19  
 import org.kuali.rice.kns.uif.container.View;
 20  
 import org.kuali.rice.kns.uif.core.Component;
 21  
 import org.springframework.util.MethodInvoker;
 22  
 
 23  
 /**
 24  
  * Field instance whose output is produced by invoking a method
 25  
  * 
 26  
  * <p>
 27  
  * Generated fields can be used to produce any kind of HTML output using code.
 28  
  * The properties configured for the <code>GeneratedField</code> configure the
 29  
  * class and method that should be invoked to render the component. The method
 30  
  * that will be invoked should take the <code>GeneratedField</code> instance as
 31  
  * a parameter and return a String (which can include state HTML)
 32  
  * </p>
 33  
  * 
 34  
  * <p>
 35  
  * If the renderingMethodToCall is set, it is assumed to be a method on the
 36  
  * configured <code>ViewHelperService</code>. For invoking other class methods
 37  
  * the renderMethodInvoker must be configured
 38  
  * </p>
 39  
  * 
 40  
  * <p>
 41  
  * e.g. public String sayHiInBold(GeneratedField field) { return "<b>HI!</b>"; }
 42  
  * </p>
 43  
  * 
 44  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 45  
  * @deprecated
 46  
  */
 47  
 public class GeneratedField extends FieldBase {
 48  
         private static final long serialVersionUID = 1575182633700024203L;
 49  
 
 50  0
         private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(GeneratedField.class);
 51  
 
 52  
         private String renderingMethodToCall;
 53  
         private MethodInvoker renderingMethodInvoker;
 54  
 
 55  
         private String renderOutput;
 56  
 
 57  
         public GeneratedField() {
 58  0
                 super();
 59  0
         }
 60  
 
 61  
         /**
 62  
          * The following finalization is done here:
 63  
          * 
 64  
          * <ul>
 65  
          * <li>Setup the method invoker and invoke method to get the render output</li>
 66  
          * </ul>
 67  
          * 
 68  
          * @see org.kuali.rice.kns.uif.core.ComponentBase#performFinalize(org.kuali.rice.kns.uif.container.View,
 69  
          *      java.lang.Object, org.kuali.rice.kns.uif.core.Component)
 70  
          */
 71  
         @Override
 72  
         public void performFinalize(View view, Object model, Component parent) {
 73  0
                 super.performFinalize(view, model, parent);
 74  
 
 75  0
                 if (renderingMethodInvoker == null) {
 76  0
                         renderingMethodInvoker = new MethodInvoker();
 77  
                 }
 78  
 
 79  
                 // if method not set on invoker, use renderingMethodToCall
 80  0
                 if (StringUtils.isBlank(renderingMethodInvoker.getTargetMethod())) {
 81  0
                         renderingMethodInvoker.setTargetMethod(renderingMethodToCall);
 82  
                 }
 83  
 
 84  
                 // if target class or object not set, use view helper service
 85  0
                 if ((renderingMethodInvoker.getTargetClass() == null) && (renderingMethodInvoker.getTargetObject() == null)) {
 86  0
                         renderingMethodInvoker.setTargetObject(view.getViewHelperService());
 87  
                 }
 88  
 
 89  
                 // add the component instance as an argument
 90  0
                 Object[] arguments = new Object[1];
 91  0
                 arguments[0] = this;
 92  0
                 renderingMethodInvoker.setArguments(arguments);
 93  
 
 94  
                 // invoke method and get render output
 95  
                 try {
 96  0
                         LOG.debug("Invoking render method: " + renderingMethodInvoker.getTargetMethod() + " for component: "
 97  
                                         + getId());
 98  0
                         renderingMethodInvoker.prepare();
 99  
 
 100  0
                         renderOutput = (String) renderingMethodInvoker.invoke();
 101  
                 }
 102  0
                 catch (Exception e) {
 103  0
                         LOG.error("Error invoking rendering method for component: " + getId(), e);
 104  0
                         throw new RuntimeException("Error invoking rendering method for component: " + getId(), e);
 105  0
                 }
 106  0
         }
 107  
 
 108  
         /**
 109  
          * Name of the method that should be invoked for rendering the component
 110  
          * (full method name, without parameters or return type)
 111  
          * 
 112  
          * <p>
 113  
          * Note the method can also be set with the renderingMethodInvoker
 114  
          * targetMethod property. If the method is on the configured
 115  
          * <code>ViewHelperService</code>, only this property needs to be configured
 116  
          * </p>
 117  
          * 
 118  
          * @return String method name
 119  
          */
 120  
         public String getRenderingMethodToCall() {
 121  0
                 return this.renderingMethodToCall;
 122  
         }
 123  
 
 124  
         /**
 125  
          * Setter for the rendering method
 126  
          * 
 127  
          * @param renderingMethodToCall
 128  
          */
 129  
         public void setRenderingMethodToCall(String renderingMethodToCall) {
 130  0
                 this.renderingMethodToCall = renderingMethodToCall;
 131  0
         }
 132  
 
 133  
         /**
 134  
          * <code>MethodInvoker</code> instance for the method that should be invoked
 135  
          * for rendering the component
 136  
          * 
 137  
          * <p>
 138  
          * MethodInvoker can be configured to specify the class or object the method
 139  
          * should be called on. For static method invocations, the targetClass
 140  
          * property can be configured. For object invocations, that targetObject
 141  
          * property can be configured
 142  
          * </p>
 143  
          * 
 144  
          * @return MethodInvoker instance
 145  
          */
 146  
         public MethodInvoker getRenderingMethodInvoker() {
 147  0
                 return this.renderingMethodInvoker;
 148  
         }
 149  
 
 150  
         /**
 151  
          * Setter for the method invoker instance
 152  
          * 
 153  
          * @param renderingMethodInvoker
 154  
          */
 155  
         public void setRenderingMethodInvoker(MethodInvoker renderingMethodInvoker) {
 156  0
                 this.renderingMethodInvoker = renderingMethodInvoker;
 157  0
         }
 158  
 
 159  
         /**
 160  
          * Rendering output for the component that will be sent as part of the
 161  
          * response (can contain static text and HTML)
 162  
          * 
 163  
          * @return String render output
 164  
          */
 165  
         public String getRenderOutput() {
 166  0
                 return this.renderOutput;
 167  
         }
 168  
 
 169  
 }