1 15 package org.apache.hivemind.schema.rules; 16 17 import org.apache.commons.logging.Log; 18 import org.apache.commons.logging.LogFactory; 19 import org.apache.hivemind.Element; 20 import org.apache.hivemind.ErrorHandler; 21 import org.apache.hivemind.Location; 22 import org.apache.hivemind.schema.SchemaProcessor; 23 import org.apache.hivemind.schema.Translator; 24 import org.apache.hivemind.util.PropertyUtils; 25 26 32 public class ReadAttributeRule extends BaseRule 33 { 34 35 private static final Log LOG = LogFactory.getLog(ReadAttributeRule.class); 36 37 private String _attributeName; 38 39 private String _propertyName; 40 41 private boolean _skipIfNull = true; 42 43 private String _translator; 44 45 public ReadAttributeRule() 46 { 47 } 48 49 public ReadAttributeRule(String attributeName, String propertyName, String translator, 50 Location location) 51 { 52 setLocation(location); 53 54 _attributeName = attributeName; 55 _propertyName = propertyName; 56 _translator = translator; 57 } 58 59 public void begin(SchemaProcessor processor, Element element) 60 { 61 String value = getAttributeValue(processor, element); 62 63 if (value == null && _skipIfNull) 64 return; 65 66 value = RuleUtils.processText(processor, element, value); 67 68 Object target = processor.peek(); 69 70 try 71 { 72 Translator t = _translator == null ? processor.getAttributeTranslator(_attributeName) 73 : processor.getTranslator(_translator); 74 75 Class propertyType = PropertyUtils.getPropertyType(target, _propertyName); 76 77 Object finalValue = t.translate( 78 processor.getContributingModule(), 79 propertyType, 80 value, 81 element.getLocation()); 82 83 PropertyUtils.write(target, _propertyName, finalValue); 84 85 } 86 catch (Exception ex) 87 { 88 ErrorHandler eh = processor.getContributingModule().getErrorHandler(); 89 90 eh.error(LOG, RulesMessages 91 .readAttributeFailure(_attributeName, element, processor, ex), element 92 .getLocation(), ex); 93 } 94 95 } 96 97 private String getAttributeValue(SchemaProcessor processor, Element element) 98 { 99 final String rawValue = element.getAttributeValue(_attributeName); 100 101 return rawValue == null ? processor.getAttributeDefault(_attributeName) : rawValue; 102 } 103 104 public String getAttributeName() 105 { 106 return _attributeName; 107 } 108 109 public String getPropertyName() 110 { 111 return _propertyName; 112 } 113 114 public boolean getSkipIfNull() 115 { 116 return _skipIfNull; 117 } 118 119 122 public String getTranslator() 123 { 124 return _translator; 125 } 126 127 public void setAttributeName(String string) 128 { 129 _attributeName = string; 130 } 131 132 public void setPropertyName(String string) 133 { 134 _propertyName = string; 135 } 136 137 public void setSkipIfNull(boolean b) 138 { 139 _skipIfNull = b; 140 } 141 142 public void setTranslator(String string) 143 { 144 _translator = string; 145 } 146 147 } | Popular Tags |