1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.configuration.tree.xpath;
18
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.List;
22
23 import org.apache.commons.configuration.tree.ConfigurationNode;
24 import org.apache.commons.jxpath.ri.QName;
25 import org.apache.commons.jxpath.ri.model.NodePointer;
26
27 /**
28 * A specialized node iterator implementation that deals with attribute nodes.
29 *
30 * @author <a
31 * href="http://commons.apache.org/configuration/team-list.html">Commons
32 * Configuration team</a>
33 * @version $Id: ConfigurationNodeIteratorAttribute.java 1206492 2011-11-26 16:52:16Z oheger $
34 */
35 class ConfigurationNodeIteratorAttribute extends
36 ConfigurationNodeIteratorBase
37 {
38 /** Constant for the wildcard node name.*/
39 private static final String WILDCARD = "*";
40
41 /**
42 * Creates a new instance of {@code ConfigurationNodeIteratorAttribute}.
43 * @param parent the parent node pointer
44 * @param name the name of the selected attribute
45 */
46 public ConfigurationNodeIteratorAttribute(NodePointer parent, QName name)
47 {
48 super(parent, false);
49 initSubNodeList(createSubNodeList((ConfigurationNode) parent.getNode(),
50 name));
51 }
52
53 /**
54 * Determines which attributes are selected based on the passed in node
55 * name.
56 * @param node the current node
57 * @param name the name of the selected attribute
58 * @return a list with the selected attributes
59 */
60 protected List<ConfigurationNode> createSubNodeList(ConfigurationNode node, QName name)
61 {
62 if (name.getPrefix() != null)
63 {
64 // namespace prefixes are not supported
65 return Collections.emptyList();
66 }
67
68 List<ConfigurationNode> result = new ArrayList<ConfigurationNode>();
69 if (!WILDCARD.equals(name.getName()))
70 {
71 result.addAll(node.getAttributes(name.getName()));
72 }
73 else
74 {
75 result.addAll(node.getAttributes());
76 }
77
78 return result;
79 }
80 }