in tapestry-framework/src/org/apache/tapestry/parse/SpecificationParser.java [1082:1289]
protected void configureCommon(SpecificationDigester digester, String rootElementName)
{
// <bean>
String pattern = rootElementName + "/bean";
digester.addRule(pattern, new CreateBeanSpecificationRule());
digester.addValidate(
pattern,
"name",
BEAN_NAME_PATTERN,
"SpecificationParser.invalid-bean-name");
digester.addSetConvertedProperty(pattern, CONVERSION_MAP, "lifecycle", "lifecycle");
digester.addSetLimitedProperties(pattern, "class", "className");
digester.addConnectChild(pattern, "addBeanSpecification", "name");
// <set-property> inside <bean>
pattern = rootElementName + "/bean/set-property";
digester.addRule(pattern, new CreateExpressionBeanInitializerRule());
digester.addSetLimitedProperties(pattern, "name", "propertyName");
digester.addSetExtendedProperty(pattern, "expression", "expression", true);
digester.addSetNext(pattern, "addInitializer");
// <set-string-property> inside <bean>
// This is for compatibility with the 1.3 DTD
pattern = rootElementName + "/bean/set-string-property";
digester.addRule(pattern, new CreateStringBeanInitializerRule());
digester.addSetLimitedProperties(
pattern,
new String[] { "name", "key" },
new String[] { "propertyName", "key" });
digester.addSetNext(pattern, "addInitializer");
// It's now set-message-property in the 3.0 DTD
pattern = rootElementName + "/bean/set-message-property";
digester.addRule(pattern, new CreateStringBeanInitializerRule());
digester.addSetLimitedProperties(
pattern,
new String[] { "name", "key" },
new String[] { "propertyName", "key" });
digester.addSetNext(pattern, "addInitializer");
// <component>
pattern = rootElementName + "/component";
digester.addRule(pattern, new CreateContainedComponentRule());
digester.addValidate(
pattern,
"id",
COMPONENT_ID_PATTERN,
"SpecificationParser.invalid-component-id");
digester.addValidate(
pattern,
"type",
COMPONENT_TYPE_PATTERN,
"SpecificationParser.invalid-component-type");
digester.addSetLimitedProperties(pattern, "type", "type");
digester.addRule(pattern, new ComponentCopyOfRule());
digester.addConnectChild(pattern, "addComponent", "id");
digester.addSetBooleanProperty(
pattern,
"inherit-informal-parameters",
"inheritInformalParameters");
// <binding> inside <component>
pattern = rootElementName + "/component/binding";
Rule createBindingSpecificationRule = new CreateBindingSpecificationRule();
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.DYNAMIC);
digester.addSetExtendedProperty(pattern, "expression", "value", true);
digester.addConnectChild(pattern, "setBinding", "name");
// <field-binding> inside <component>
// For compatibility with 1.3 DTD only, removed in 3.0 DTD
pattern = rootElementName + "/component/field-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.FIELD);
digester.addSetExtendedProperty(pattern, "field-name", "value", true);
digester.addConnectChild(pattern, "setBinding", "name");
// <inherited-binding> inside <component>
pattern = rootElementName + "/component/inherited-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.INHERITED);
digester.addSetLimitedProperties(pattern, "parameter-name", "value");
digester.addConnectChild(pattern, "setBinding", "name");
// <static-binding> inside <component>
pattern = rootElementName + "/component/static-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.STATIC);
digester.addSetExtendedProperty(pattern, "value", "value", true);
digester.addConnectChild(pattern, "setBinding", "name");
// <string-binding> inside <component>
// Maintained just for 1.3 DTD compatibility
pattern = rootElementName + "/component/string-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.STRING);
digester.addSetLimitedProperties(pattern, "key", "value");
digester.addConnectChild(pattern, "setBinding", "name");
// Renamed to <message-binding> in the 3.0 DTD
pattern = rootElementName + "/component/message-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.STRING);
digester.addSetLimitedProperties(pattern, "key", "value");
digester.addConnectChild(pattern, "setBinding", "name");
// <listener-binding> inside <component>
pattern = rootElementName + "/component/listener-binding";
digester.addRule(pattern, new CreateListenerBindingSpecificationRule());
digester.addSetLimitedProperties(pattern, "language", "language");
digester.addBody(pattern, "value");
digester.addConnectChild(pattern, "setBinding", "name");
// <external-asset>
pattern = rootElementName + "/external-asset";
Rule createAssetSpecificationRule = new CreateAssetSpecificationRule();
digester.addRule(pattern, createAssetSpecificationRule);
digester.addInitializeProperty(pattern, "type", AssetType.EXTERNAL);
digester.addValidate(
pattern,
"name",
ASSET_NAME_PATTERN,
"SpecificationParser.invalid-asset-name");
digester.addSetLimitedProperties(pattern, "URL", "path");
digester.addConnectChild(pattern, "addAsset", "name");
// <context-asset>
pattern = rootElementName + "/context-asset";
digester.addRule(pattern, createAssetSpecificationRule);
digester.addInitializeProperty(pattern, "type", AssetType.CONTEXT);
digester.addValidate(
pattern,
"name",
ASSET_NAME_PATTERN,
"SpecificationParser.invalid-asset-name");
// TODO: $template$
digester.addSetLimitedProperties(pattern, "path", "path");
digester.addConnectChild(pattern, "addAsset", "name");
// <private-asset>
pattern = rootElementName + "/private-asset";
digester.addRule(pattern, createAssetSpecificationRule);
digester.addInitializeProperty(pattern, "type", AssetType.PRIVATE);
digester.addValidate(
pattern,
"name",
ASSET_NAME_PATTERN,
"SpecificationParser.invalid-asset-name");
// TODO: $template$
digester.addSetLimitedProperties(pattern, "resource-path", "path");
digester.addConnectChild(pattern, "addAsset", "name");
// <property-specification>
pattern = rootElementName + "/property-specification";
digester.addRule(pattern, new CreatePropertySpecificationRule());
digester.addValidate(
pattern,
"name",
PROPERTY_NAME_PATTERN,
"SpecificationParser.invalid-property-name");
digester.addSetLimitedProperties(
pattern,
new String[] { "name", "type" },
new String[] { "name", "type" });
digester.addSetBooleanProperty(pattern, "persistent", "persistent");
digester.addSetExtendedProperty(pattern, "initial-value", "initialValue", false);
digester.addSetNext(pattern, "addPropertySpecification");
}