1 package org.apache.commons.digester3.xmlrules;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static java.lang.String.format;
23
24 import org.apache.commons.digester3.binder.LinkedRuleBuilder;
25 import org.apache.commons.digester3.binder.NodeCreateRuleProvider;
26 import org.apache.commons.digester3.binder.NodeCreateRuleProvider.NodeType;
27 import org.apache.commons.digester3.binder.RulesBinder;
28 import org.xml.sax.Attributes;
29
30
31
32
33 final class NodeCreateRule
34 extends AbstractXmlRule
35 {
36
37 public NodeCreateRule( RulesBinder targetRulesBinder, PatternStack patternStack )
38 {
39 super( targetRulesBinder, patternStack );
40 }
41
42
43
44
45 @Override
46 protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
47 throws Exception
48 {
49 NodeCreateRuleProvider nodeProvider = linkedRuleBuilder.createNode();
50
51 String nodeType = attributes.getValue( "type" );
52 if ( nodeType != null && nodeType.length() > 0 )
53 {
54 if ( "element".equals( nodeType ) )
55 {
56 nodeProvider.ofType( NodeType.ELEMENT );
57 }
58 else if ( "fragment".equals( nodeType ) )
59 {
60 nodeProvider.ofType( NodeType.DOCUMENT_FRAGMENT );
61 }
62 else
63 {
64 throw new RuntimeException( format(
65 "Unrecognized node type: %s. This attribute is optional or can have a value of element|fragment.",
66 nodeType ) );
67 }
68 }
69 }
70
71 }