1   /*
2    * Copyright (c) 2003 Scott Howlett & Paul Libbrecht.
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
7    * are met:
8    *
9    * 1. Redistributions of source code must retain the above copyright
10   *    notice, this list of conditions and the following disclaimer.
11   *
12   * 2. Redistributions in binary form must reproduce the above copyright
13   *    notice, this list of conditions and the following disclaimer in
14   *    the documentation and/or other materials provided with the
15   *    distribution.
16   *
17   * 3. The end-user documentation included with the redistribution,
18   *    if any, must include the following acknowledgment:
19   *       "This product includes software developed by the Xwing
20   *       Project ( http://xwing.sourceforge.net/ )."
21   *    Alternately, this acknowledgment may appear in the software itself,
22   *    if and wherever such third-party acknowledgments normally appear.
23   *
24   * 4. The name "Xwing" must not be used to endorse or promote products
25   *    derived from this software without prior written permission. For
26   *    written permission, please contact the project authors via
27   *    the Xwing project site, http://xwing.sourceforge.net/ .
28   *
29   * 5. Products derived from this software may not be called "Xwing",
30   *    nor may "Xwing" appear in their name, without prior written
31   *    permission of the Xwing project.
32   *
33   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
34   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
35   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36   * DISCLAIMED.  IN NO EVENT SHALL THE XWING AUTHORS OR THE PROJECT
37   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
38   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
39   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
40   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
41   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
42   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
43   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44   * SUCH DAMAGE.
45   *
46   * For more information on Xwing, please see
47   * < http://xwing.sourceforge.net/ >.
48   */
49  
50  package net.sourceforge.xwing.dom;
51  
52  import net.sourceforge.xwing.AbstractSourceSink;
53  
54  import org.apache.commons.logging.LogFactory;
55  import org.jaxen.JaxenException;
56  import org.jaxen.dom.DOMXPath;
57  import org.w3c.dom.Node;
58  import org.w3c.dom.events.Event;
59  
60  public class NodeSourceSink extends AbstractSourceSink {
61  
62      private NodeListener listener;
63      private DOMXPath select;
64  
65      public NodeSourceSink() throws Exception {
66          this(null, null);
67      }
68  
69      public NodeSourceSink(Node node) throws Exception {
70          this(node, null);
71      }
72  
73      public NodeSourceSink(DOMXPath sel) throws Exception {
74          this(null, sel);
75      }
76  
77      public NodeSourceSink(Node node, DOMXPath sel) throws Exception {
78          listener = new NodeListener(node) {
79              protected void nodeChanged(Event evt) {
80                  fireStateChanged();
81              }
82          };
83  
84          select = sel;
85  
86      }
87  
88      public Object get() {
89          if (select == null) {
90              return listener.getNode();
91          } else {
92              try {
93                  return select.selectSingleNode(listener.getNode());
94              } catch (JaxenException exc) {
95                  LogFactory.getLog(getClass()).error("Error in get", exc);
96                  return null;
97              }
98          }
99      }
100 
101     public void set(Object value) {
102         if (select != null) {
103             throw new IllegalStateException(
104                 "Cannot set node " + "if select is not null.");
105         }
106 
107         listener.setNode((Node) value);
108     }
109 }
This page was automatically generated by Maven