Mercurial > repos > pfrommolt > ngsrich
comparison NGSrich_0.5.5/src/org/jdom/filter/ElementFilter.java @ 0:89ad0a9cca52 default tip
Uploaded
author | pfrommolt |
---|---|
date | Mon, 21 Nov 2011 08:12:19 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:89ad0a9cca52 |
---|---|
1 /*-- | |
2 | |
3 $Id: ElementFilter.java,v 1.20 2007/11/10 05:29:00 jhunter Exp $ | |
4 | |
5 Copyright (C) 2000-2007 Jason Hunter & Brett McLaughlin. | |
6 All rights reserved. | |
7 | |
8 Redistribution and use in source and binary forms, with or without | |
9 modification, are permitted provided that the following conditions | |
10 are met: | |
11 | |
12 1. Redistributions of source code must retain the above copyright | |
13 notice, this list of conditions, and the following disclaimer. | |
14 | |
15 2. Redistributions in binary form must reproduce the above copyright | |
16 notice, this list of conditions, and the disclaimer that follows | |
17 these conditions in the documentation and/or other materials | |
18 provided with the distribution. | |
19 | |
20 3. The name "JDOM" must not be used to endorse or promote products | |
21 derived from this software without prior written permission. For | |
22 written permission, please contact <request_AT_jdom_DOT_org>. | |
23 | |
24 4. Products derived from this software may not be called "JDOM", nor | |
25 may "JDOM" appear in their name, without prior written permission | |
26 from the JDOM Project Management <request_AT_jdom_DOT_org>. | |
27 | |
28 In addition, we request (but do not require) that you include in the | |
29 end-user documentation provided with the redistribution and/or in the | |
30 software itself an acknowledgement equivalent to the following: | |
31 "This product includes software developed by the | |
32 JDOM Project (http://www.jdom.org/)." | |
33 Alternatively, the acknowledgment may be graphical using the logos | |
34 available at http://www.jdom.org/images/logos. | |
35 | |
36 THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |
37 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
38 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
39 DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT | |
40 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
41 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
42 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |
43 USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
44 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
45 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |
46 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
47 SUCH DAMAGE. | |
48 | |
49 This software consists of voluntary contributions made by many | |
50 individuals on behalf of the JDOM Project and was originally | |
51 created by Jason Hunter <jhunter_AT_jdom_DOT_org> and | |
52 Brett McLaughlin <brett_AT_jdom_DOT_org>. For more information | |
53 on the JDOM Project, please see <http://www.jdom.org/>. | |
54 | |
55 */ | |
56 | |
57 package org.jdom.filter; | |
58 | |
59 import java.io.*; | |
60 import org.jdom.*; | |
61 | |
62 /** | |
63 * A Filter that only matches {@link org.jdom.Element} objects. | |
64 * | |
65 * @version $Revision: 1.20 $, $Date: 2007/11/10 05:29:00 $ | |
66 * @author Jools Enticknap | |
67 * @author Bradley S. Huffman | |
68 */ | |
69 public class ElementFilter extends AbstractFilter { | |
70 | |
71 private static final String CVS_ID = | |
72 "@(#) $RCSfile: ElementFilter.java,v $ $Revision: 1.20 $ $Date: 2007/11/10 05:29:00 $ $Name: jdom_1_1_1 $"; | |
73 | |
74 /** The element name */ | |
75 private String name; | |
76 | |
77 /** The element namespace */ | |
78 private transient Namespace namespace; | |
79 | |
80 /** | |
81 * Select only the Elements. | |
82 */ | |
83 public ElementFilter() {} | |
84 | |
85 /** | |
86 * Select only the Elements with the supplied name in any Namespace. | |
87 * | |
88 * @param name The name of the Element. | |
89 */ | |
90 public ElementFilter(String name) { | |
91 this.name = name; | |
92 } | |
93 | |
94 /** | |
95 * Select only the Elements with the supplied Namespace. | |
96 * | |
97 * @param namespace The namespace the Element lives in. | |
98 */ | |
99 public ElementFilter(Namespace namespace) { | |
100 this.namespace = namespace; | |
101 } | |
102 | |
103 /** | |
104 * Select only the Elements with the supplied name and Namespace. | |
105 * | |
106 * @param name The name of the Element. | |
107 * @param namespace The namespace the Element lives in. | |
108 */ | |
109 public ElementFilter(String name, Namespace namespace) { | |
110 this.name = name; | |
111 this.namespace = namespace; | |
112 } | |
113 | |
114 /** | |
115 * Check to see if the object matches a predefined set of rules. | |
116 * | |
117 * @param obj The object to verify. | |
118 * @return <code>true</code> if the objected matched a predfined | |
119 * set of rules. | |
120 */ | |
121 public boolean matches(Object obj) { | |
122 if (obj instanceof Element) { | |
123 Element el = (Element) obj; | |
124 return | |
125 (this.name == null || this.name.equals(el.getName())) && | |
126 (this.namespace == null || this.namespace.equals(el.getNamespace())); | |
127 } | |
128 return false; | |
129 } | |
130 | |
131 /** | |
132 * Returns whether the two filters are equivalent (i.e. the | |
133 * matching names and namespace are equivalent). | |
134 * | |
135 * @param obj the object to compare against | |
136 * @return whether the two filters are equal | |
137 */ | |
138 public boolean equals(Object obj) { | |
139 // Generated by IntelliJ | |
140 if (this == obj) return true; | |
141 if (!(obj instanceof ElementFilter)) return false; | |
142 | |
143 final ElementFilter filter = (ElementFilter) obj; | |
144 | |
145 if (name != null ? !name.equals(filter.name) : filter.name != null) return false; | |
146 if (namespace != null ? !namespace.equals(filter.namespace) : filter.namespace != null) return false; | |
147 | |
148 return true; | |
149 } | |
150 | |
151 public int hashCode() { | |
152 // Generated by IntelliJ | |
153 int result; | |
154 result = (name != null ? name.hashCode() : 0); | |
155 result = 29 * result + (namespace != null ? namespace.hashCode() : 0); | |
156 return result; | |
157 } | |
158 | |
159 // Support a custom Namespace serialization so no two namespace | |
160 // object instances may exist for the same prefix/uri pair | |
161 private void writeObject(ObjectOutputStream out) throws IOException { | |
162 | |
163 out.defaultWriteObject(); | |
164 | |
165 // We use writeObject() and not writeUTF() to minimize space | |
166 // This allows for writing pointers to already written strings | |
167 if (namespace != null) { | |
168 out.writeObject(namespace.getPrefix()); | |
169 out.writeObject(namespace.getURI()); | |
170 } | |
171 else { | |
172 out.writeObject(null); | |
173 out.writeObject(null); | |
174 } | |
175 } | |
176 | |
177 private void readObject(ObjectInputStream in) | |
178 throws IOException, ClassNotFoundException { | |
179 | |
180 in.defaultReadObject(); | |
181 | |
182 Object prefix = in.readObject(); | |
183 Object uri = in.readObject(); | |
184 | |
185 if (prefix != null) { // else leave namespace null here | |
186 namespace = Namespace.getNamespace((String) prefix, (String) uri); | |
187 } | |
188 } | |
189 } |