View Javadoc

1   /*
2    * Copyright (c) 2004, RV Test Team
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions are met:
7    *
8    * Redistributions of source code must retain the above copyright notice, this
9    * list of conditions and the following disclaimer.
10   *
11   * Redistributions in binary form must reproduce the above copyright notice,
12   * this list of conditions and the following disclaimer in the documentation
13   * and/or other materials provided with the distribution.
14   *
15   * Neither the name of the "RV Test Team" nor the names of its contributors may
16   * be used to endorse or promote products derived from this software without
17   * specific prior written permission.
18   *
19   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29   * THE POSSIBILITY OF SUCH DAMAGE.
30   *
31   */
32  package com.reuters.msgtest.digester;
33  
34  import com.reuters.msgtest.TibrvMsgFieldComparer;
35  import com.tibco.tibrv.TibrvMsg;
36  import org.apache.commons.digester.AbstractObjectCreationFactory;
37  import org.apache.commons.digester.Digester;
38  import org.xml.sax.Attributes;
39  
40  
41  /***
42   * @author Michael Ward
43   */
44  public abstract class AbstractDigester {
45      public void handleMessageNodes(Digester digester) {
46          // TibrvMsg (applies to Stimulus and Response objects)
47          digester.addObjectCreate("*/message", RvMessage.class);
48          digester.addCallMethod("*/subject", "setSubject", 0);
49          digester.addCallMethod("*/uri", "setUri", 0);
50  
51          // rvfields (applies to Stimulus and Response objects)
52          digester.addFactoryCreate("*/rvfield", new RvFieldCreationFactory());
53          digester.addSetNext("*/rvfield", "addField");
54      }
55  
56      public class RvFieldCreationFactory extends AbstractObjectCreationFactory {
57          public Object createObject(Attributes attributes)
58              throws Exception {
59              String name = attributes.getValue("name");
60              String value = attributes.getValue("value");
61              short type = TibrvMsgFieldComparer.stringToType(attributes.getValue(
62                          "type"));
63              RvField rvField = null;
64  
65              if (type == TibrvMsg.MSG) {
66                  rvField = new RvFieldParent();
67              } else {
68                  rvField = new RvFieldChild();
69              }
70  
71              rvField.setName(name);
72              rvField.setValue(value);
73              rvField.setType(type);
74  
75              return rvField;
76          }
77      }
78  }