1 package org.apache.commons.digester3.examples.api.documentmarkup;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one or more
5 * contributor license agreements. See the NOTICE file distributed with
6 * this work for additional information regarding copyright ownership.
7 * The ASF licenses this file to You under the Apache License, Version 2.0
8 * (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
20 import java.io.StringReader;
21
22 /**
23 * A simple "test harness" which demonstrates how the MarkupDigester class
24 * (plus the supporting interface/rule classes) can process "document-markup"
25 * style xml data.
26 * <p>
27 * See the readme file included with this example for more information.
28 */
29 public class Main
30 {
31
32 /** The input xml to be parsed by this example. */
33 String in = "<p>Hi, this is an <i>example</i> of some <b>bold</b> text.</p>";
34
35 /** Invoked when a text segment is present in the parsed input. */
36 public void addSegment( String text )
37 {
38 System.out.println( "Text segment: [" + text + "]" );
39 }
40
41 /** Invoked when an <i> node is found in the parsed input. */
42 public void addItalic( String text )
43 {
44 System.out.println( "Italic: [" + text + "]" );
45 }
46
47 /** Invoked when an <b> node is found in the parsed input. */
48 public void addBold( String text )
49 {
50 System.out.println( "Bold: [" + text + "]" );
51 }
52
53 /**
54 * Invoked via a standard Digester CallMethodRule, passing the
55 * "body text" of the top-level xml element. This demonstrates
56 * the default behaviour of Digester (which is not suitable for
57 * processing markup-style xml).
58 */
59 public void addAllText( String text )
60 {
61 System.out.println( "And the merged text for the p element is [" + text + "]" );
62 }
63
64 /**
65 * Main method of this test harness. Set up some digester rules,
66 * then parse the input xml contained in the "in" member variable.
67 * The rules cause methods on this object to be invoked, which just
68 * dump information to standard output, to show the callbacks that
69 * a real program could arrange to get when parsing markup input.
70 */
71 public void run()
72 throws Exception
73 {
74 System.out.println( "Started." );
75 MarkupDigester d = new MarkupDigester();
76
77 d.push( this );
78
79 SetTextSegmentRule r = new SetTextSegmentRule( "addSegment" );
80 d.addRule( "p", r );
81 d.addCallMethod( "p", "addAllText", 0 );
82
83 d.addCallMethod( "p/i", "addItalic", 0 );
84 d.addCallMethod( "p/b", "addBold", 0 );
85
86 d.parse( new StringReader( in ) );
87
88 System.out.println( "Finished." );
89 }
90
91 /** See the run method. */
92 public static void main( String[] args )
93 throws Exception
94 {
95 new Main().run();
96 }
97
98 }