1 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.tapestry.IPage; 24 import org.apache.tapestry.spec.InjectSpecification; 25 26 32 public class InjectPageWorker implements InjectEnhancementWorker 33 { 34 public void performEnhancement(EnhancementOperation op, InjectSpecification spec) 35 { 36 performEnhancement(op, spec.getObject(), spec.getProperty(), spec.getLocation()); 37 } 38 39 public void performEnhancement(EnhancementOperation op, String pageName, String propertyName, 40 Location location) 41 { 42 Class propertyType = op.getPropertyType(propertyName); 43 44 if (propertyType == null) 45 propertyType = Object .class; 46 else if (propertyType.isPrimitive()) 47 throw new ApplicationRuntimeException(EnhanceMessages.wrongTypeForPageInjection( 48 propertyName, 49 propertyType), null, location, null); 50 51 op.claimProperty(propertyName); 52 53 MethodSignature sig = new MethodSignature(propertyType, op 54 .getAccessorMethodName(propertyName), null, null); 55 56 BodyBuilder builder = new BodyBuilder(); 57 58 builder.add("return "); 59 60 63 if (!propertyType.isAssignableFrom(IPage.class)) 64 builder.add("({0})", propertyType.getName()); 65 66 builder.add("getPage().getRequestCycle().getPage(\"{0}\");", pageName); 67 68 op.addMethod(Modifier.PUBLIC, sig, builder.toString()); 69 } 70 } 71 | Popular Tags |