Clover coverage report - Code Coverage for tapestry release 4.0-beta-2
Coverage timestamp: Sat Jul 9 2005 22:02:17 EDT
file stats: LOC: 96   Methods: 3
NCLOC: 51   Classes: 1
30 day Evaluation License registered to hlship@comcast.net Your 30 day evaluation period has expired. Please visit http://www.cenqua.com to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
AbstractPropertyWorker.java 100% 100% 100% 100%
coverage
 1    // Copyright 2004, 2005 The Apache Software Foundation
 2    //
 3    // Licensed under the Apache License, Version 2.0 (the "License");
 4    // you may not use this file except in compliance with the License.
 5    // You may obtain a copy of the License at
 6    //
 7    // http://www.apache.org/licenses/LICENSE-2.0
 8    //
 9    // Unless required by applicable law or agreed to in writing, software
 10    // distributed under the License is distributed on an "AS IS" BASIS,
 11    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12    // See the License for the specific language governing permissions and
 13    // limitations under the License.
 14   
 15    package org.apache.tapestry.enhance;
 16   
 17    import java.util.Iterator;
 18   
 19    import org.apache.hivemind.ErrorLog;
 20    import org.apache.tapestry.IComponent;
 21    import org.apache.tapestry.event.PageDetachListener;
 22    import org.apache.tapestry.spec.IComponentSpecification;
 23   
 24    /**
 25    * No, this class isn't abstract ... this worker locates abstract properties in the base component
 26    * class and provides a concrete implementation for them in the enhanced class.
 27    *
 28    * @author Howard M. Lewis Ship
 29    * @since 4.0
 30    */
 31    public class AbstractPropertyWorker implements EnhancementWorker
 32    {
 33    private ErrorLog _errorLog;
 34   
 35  551 public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
 36    {
 37  551 Iterator i = op.findUnclaimedAbstractProperties().iterator();
 38   
 39  551 while (i.hasNext())
 40    {
 41  1081 String name = (String) i.next();
 42   
 43  1081 try
 44    {
 45  1081 createProperty(op, name);
 46    }
 47    catch (Exception ex)
 48    {
 49  1 _errorLog.error(
 50    EnhanceMessages.errorAddingProperty(name, op.getBaseClass(), ex),
 51    spec.getLocation(),
 52    ex);
 53    }
 54    }
 55    }
 56   
 57  1081 private void createProperty(EnhancementOperation op, String name)
 58    {
 59    // This won't be null because its always for existing properties.
 60   
 61  1081 Class propertyType = op.getPropertyType(name);
 62   
 63  1080 String fieldName = "_$" + name;
 64  1080 String defaultFieldName = fieldName + "$defaultValue";
 65   
 66  1080 op.addField(fieldName, propertyType);
 67  1080 op.addField(defaultFieldName, propertyType);
 68   
 69  1080 EnhanceUtils.createSimpleAccessor(op, fieldName, name, propertyType);
 70  1080 EnhanceUtils.createSimpleMutator(op, fieldName, name, propertyType);
 71   
 72    // Copy the real attribute into the default attribute inside finish load
 73    // (allowing a default value to be set inside finishLoad()).
 74   
 75  1080 op.extendMethodImplementation(
 76    IComponent.class,
 77    EnhanceUtils.FINISH_LOAD_SIGNATURE,
 78    defaultFieldName + " = " + fieldName + ";");
 79   
 80    // On page detach, restore the attribute to its default value.
 81   
 82  1080 op.extendMethodImplementation(
 83    PageDetachListener.class,
 84    EnhanceUtils.PAGE_DETACHED_SIGNATURE,
 85    fieldName + " = " + defaultFieldName + ";");
 86   
 87    // This is not all that necessary, but is proper.
 88   
 89  1080 op.claimProperty(name);
 90    }
 91   
 92  42 public void setErrorLog(ErrorLog errorLog)
 93    {
 94  42 _errorLog = errorLog;
 95    }
 96    }