Clover coverage report - Code Coverage for tapestry release 4.0.2
Coverage timestamp: Thu Apr 13 2006 10:52:06 EDT
file stats: LOC: 86   Methods: 3
NCLOC: 46   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
InjectStateFlagWorker.java 100% 100% 100% 100%
coverage
 1    // Copyright 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.lang.reflect.Modifier;
 18   
 19    import org.apache.hivemind.ApplicationRuntimeException;
 20    import org.apache.hivemind.Location;
 21    import org.apache.hivemind.service.BodyBuilder;
 22    import org.apache.hivemind.service.MethodSignature;
 23    import org.apache.hivemind.util.Defense;
 24    import org.apache.tapestry.engine.state.ApplicationStateManager;
 25    import org.apache.tapestry.spec.InjectSpecification;
 26   
 27    /**
 28    * Injects a boolean property that indicates if a particular application state object already
 29    * exists. This is useful in situations where you are trying to prevent the creation of the ASO (and
 30    * thus, prevent the creation of the HttpSession).
 31    *
 32    * @author Howard M. Lewis Ship
 33    * @since 4.0
 34    */
 35    public class InjectStateFlagWorker implements InjectEnhancementWorker
 36    {
 37    private ApplicationStateManager _applicationStateManager;
 38   
 39  3 public void performEnhancement(EnhancementOperation op, InjectSpecification spec)
 40    {
 41  3 injectStateFlag(op, spec.getObject(), spec.getProperty(), spec.getLocation());
 42    }
 43   
 44  3 void injectStateFlag(EnhancementOperation op, String objectName, String propertyName,
 45    Location location)
 46    {
 47  3 Defense.notNull(op, "op");
 48  3 Defense.notNull(objectName, "objectName");
 49  3 Defense.notNull(propertyName, "propertyName");
 50   
 51  3 Class propertyType = op.getPropertyType(propertyName);
 52   
 53    // null means no property at all; it's just in the XML
 54    // which is ok. Otherwise, make sure it is exactly boolean.
 55   
 56  3 if (propertyType != null && propertyType != boolean.class)
 57  1 throw new ApplicationRuntimeException(EnhanceMessages.mustBeBoolean(propertyName),
 58    location, null);
 59   
 60  2 op.claimReadonlyProperty(propertyName);
 61   
 62  2 String managerField = op.addInjectedField(
 63    "_$applicationStateManager",
 64    ApplicationStateManager.class,
 65    _applicationStateManager);
 66   
 67  2 BodyBuilder builder = new BodyBuilder();
 68  2 builder.begin();
 69  2 builder.add("return {0}.exists(", managerField);
 70  2 builder.addQuoted(objectName);
 71  2 builder.addln(");");
 72  2 builder.end();
 73   
 74  2 String methodName = op.getAccessorMethodName(propertyName);
 75   
 76  2 MethodSignature sig = new MethodSignature(boolean.class, methodName, null, null);
 77   
 78  2 op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
 79    }
 80   
 81  3 public void setApplicationStateManager(ApplicationStateManager applicationStateManager)
 82    {
 83  3 _applicationStateManager = applicationStateManager;
 84    }
 85   
 86    }