1 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 31 public class AbstractPropertyWorker implements EnhancementWorker 32 { 33 private ErrorLog _errorLog; 34 35 public void performEnhancement(EnhancementOperation op, IComponentSpecification spec) 36 { 37 Iterator i = op.findUnclaimedAbstractProperties().iterator(); 38 39 while (i.hasNext()) 40 { 41 String name = (String ) i.next(); 42 43 try 44 { 45 createProperty(op, name); 46 } 47 catch (Exception ex) 48 { 49 _errorLog.error( 50 EnhanceMessages.errorAddingProperty(name, op.getBaseClass(), ex), 51 spec.getLocation(), 52 ex); 53 } 54 } 55 } 56 57 private void createProperty(EnhancementOperation op, String name) 58 { 59 61 Class propertyType = op.getPropertyType(name); 62 63 String fieldName = "_$" + name; 64 String defaultFieldName = fieldName + "$defaultValue"; 65 66 op.addField(fieldName, propertyType); 67 op.addField(defaultFieldName, propertyType); 68 69 EnhanceUtils.createSimpleAccessor(op, fieldName, name, propertyType); 70 EnhanceUtils.createSimpleMutator(op, fieldName, name, propertyType); 71 72 75 op.extendMethodImplementation( 76 IComponent.class, 77 EnhanceUtils.FINISH_LOAD_SIGNATURE, 78 defaultFieldName + " = " + fieldName + ";"); 79 80 82 op.extendMethodImplementation( 83 PageDetachListener.class, 84 EnhanceUtils.PAGE_DETACHED_SIGNATURE, 85 fieldName + " = " + defaultFieldName + ";"); 86 87 89 op.claimProperty(name); 90 } 91 92 public void setErrorLog(ErrorLog errorLog) 93 { 94 _errorLog = errorLog; 95 } 96 } | Popular Tags |