in tapestry-framework/src/org/apache/tapestry/parse/SpecificationParser.java [882:973]
protected void configureLibraryCommon(SpecificationDigester digester, String rootElementName)
{
String pattern = rootElementName + "/page";
// <page>
digester.addValidate(
pattern,
"name",
PAGE_NAME_PATTERN,
"SpecificationParser.invalid-page-name");
digester.addCallMethod(pattern, "setPageSpecificationPath", 2);
digester.addCallParam(pattern, 0, "name");
digester.addCallParam(pattern, 1, "specification-path");
// <component-type>
pattern = rootElementName + "/component-type";
digester.addValidate(
pattern,
"type",
COMPONENT_ALIAS_PATTERN,
"SpecificationParser.invalid-component-type");
digester.addCallMethod(pattern, "setComponentSpecificationPath", 2);
digester.addCallParam(pattern, 0, "type");
digester.addCallParam(pattern, 1, "specification-path");
// <component-alias>
// From 1.3 DTD, replaced with <component-type> in 3.0 DTD
pattern = rootElementName + "/component-alias";
digester.addValidate(
pattern,
"type",
COMPONENT_ALIAS_PATTERN,
"SpecificationParser.invalid-component-type");
digester.addCallMethod(pattern, "setComponentSpecificationPath", 2);
digester.addCallParam(pattern, 0, "type");
digester.addCallParam(pattern, 1, "specification-path");
// <service>
pattern = rootElementName + "/service";
digester.addValidate(
pattern,
"name",
SERVICE_NAME_PATTERN,
"SpecificationParser.invalid-service-name");
digester.addCallMethod(pattern, "setServiceClassName", 2);
digester.addCallParam(pattern, 0, "name");
digester.addCallParam(pattern, 1, "class");
// <library>
pattern = rootElementName + "/library";
digester.addValidate(
pattern,
"id",
LIBRARY_ID_PATTERN,
"SpecificationParser.invalid-library-id");
digester.addRule(pattern, new DisallowFrameworkNamespaceRule());
digester.addCallMethod(pattern, "setLibrarySpecificationPath", 2);
digester.addCallParam(pattern, 0, "id");
digester.addCallParam(pattern, 1, "specification-path");
// <extension>
pattern = rootElementName + "/extension";
digester.addRule(pattern, new CreateExtensionSpecificationRule());
digester.addValidate(
pattern,
"name",
EXTENSION_NAME_PATTERN,
"SpecificationParser.invalid-extension-name");
digester.addSetBooleanProperty(pattern, "immediate", "immediate");
digester.addSetLimitedProperties(pattern, "class", "className");
digester.addConnectChild(pattern, "addExtensionSpecification", "name");
// <configure> within <extension>
pattern = rootElementName + "/extension/configure";
digester.addValidate(
pattern,
"property-name",
PROPERTY_NAME_PATTERN,
"SpecificationParser.invalid-property-name");
digester.addRule(pattern, new ProcessExtensionConfigurationRule());
}