##### Coverage Report - org.apache.commons.configuration.tree.NodeAddData

Classes in this File | Line Coverage | Branch Coverage | Complexity

NodeAddData

100% | 20/20

100% | 2/2

1.1;1,1

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;

18

19

     import java.util.Collections;

20

     import java.util.LinkedList;

21

     import java.util.List;

22

23

     /**

24

      * <p>

25

      * A simple data class used by <code>{@link ExpressionEngine}</code> to store

26

      * the results of the <code>prepareAdd()</code> operation.

27

      * </p>

28

      * <p>

29

      * If a new property is to be added to a configuration, the affected

30

      * <code>Configuration</code> object must know, where in its hierarchy of

31

      * configuration nodes new elements have to be added. This information is

32

      * obtained by an <code>ExpressionEngine</code> object that interprets the key

33

      * of the new property. This expression engine will pack all information

34

      * necessary for the configuration to perform the add operation in an instance

35

      * of this class.

36

      * </p>

37

      * <p>

38

      * Information managed by this class contains:

39

      * <ul>

40

      * <li>the configuration node, to which new elements must be added</li>

41

      * <li>the name of the new node</li>

42

      * <li>whether the new node is a child node or an attribute node</li>

43

      * <li>if a whole branch is to be added at once, the names of all nodes between

44

      * the parent node (the target of the add operation) and the new node</li>

45

      * </ul>

46

      * </p>

47

      *

48

      * @since 1.3

49

      * @author Oliver Heger

50

      */

51

     public class NodeAddData

52

     {

53

         /** Stores the parent node of the add operation. */

54

         private ConfigurationNode parent;

55

56

         /**

57

          * Stores a list with nodes that are on the path between the parent node and

58

          * the new node.

59

          */

60

         private List pathNodes;

61

62

         /** Stores the name of the new node. */

63

         private String newNodeName;

64

65

         /** Stores the attribute flag. */

66

         private boolean attribute;

67

68

         /**

69

          * Creates a new, uninitialized instance of <code>NodeAddData</code>.

70

          */

71

         public NodeAddData()

72

         {

73

1720

             this(null, null);

74

1720

         }

75

76

         /**

77

          * Creates a new instance of <code>NodeAddData</code> and sets the most

78

          * important data fields.

79

          *

80

          * @param parent the parent node

81

          * @param nodeName the name of the new node

82

          */

83

         public NodeAddData(ConfigurationNode parent, String nodeName)

84

1723

         {

85

1723

             setParent(parent);

86

1723

             setNewNodeName(nodeName);

87

1723

         }

88

89

         /**

90

          * Returns a flag if the new node to be added is an attribute.

91

          *

92

          * @return <b>true</b> for an attribute node, <b>false</b> for a child

93

          * node

94

          */

95

         public boolean isAttribute()

96

         {

97

1706

             return attribute;

98

         }

99

100

         /**

101

          * Sets the attribute flag. This flag determines whether an attribute or a

102

          * child node will be added.

103

          *

104

          * @param attribute the attribute flag

105

          */

106

         public void setAttribute(boolean attribute)

107

         {

108

1711

             this.attribute = attribute;

109

1711

         }

110

111

         /**

112

          * Returns the name of the new node.

113

          *

114

          * @return the new node's name

115

          */

116

         public String getNewNodeName()

117

         {

118

1712

             return newNodeName;

119

         }

120

121

         /**

122

          * Sets the name of the new node. A node with this name will be added to the

123

          * configuration's node hierarchy.

124

          *

125

          * @param newNodeName the name of the new node

126

          */

127

         public void setNewNodeName(String newNodeName)

128

         {

129

3434

             this.newNodeName = newNodeName;

130

3434

         }

131

132

         /**

133

          * Returns the parent node.

134

          *

135

          * @return the parent node

136

          */

137

         public ConfigurationNode getParent()

138

         {

139

1715

             return parent;

140

         }

141

142

         /**

143

          * Sets the parent node. New nodes will be added to this node.

144

          *

145

          * @param parent the parent node

146

          */

147

         public void setParent(ConfigurationNode parent)

148

         {

149

3441

             this.parent = parent;

150

3441

         }

151

152

         /**

153

          * Returns a list with further nodes that must be added. This is needed if a

154

          * complete branch is to be added at once. For instance imagine that there

155

          * exists only a node <code>database</code>. Now the key

156

          * <code>database.connection.settings.username</code> (assuming the syntax

157

          * of the default expression engine) is to be added. Then

158

          * <code>username</code> is the name of the new node, but the nodes

159

          * <code>connection</code> and <code>settings</code> must be added to

160

          * the parent node first. In this example these names would be returned by

161

          * this method.

162

          *

163

          * @return a list with the names of nodes that must be added as parents of

164

          * the new node (never <b>null</b>)

165

          */

166

         public List getPathNodes()

167

         {

168

1715

             return (pathNodes != null) ? Collections.unmodifiableList(pathNodes)

169

                     : Collections.EMPTY_LIST;

170

         }

171

172

         /**

173

          * Adds the name of a path node. With this method an additional node to be

174

          * added can be defined.

175

          *

176

          * @param nodeName the name of the node

177

          * @see #getPathNodes()

178

          */

179

         public void addPathNode(String nodeName)

180

         {

181

821

             if (pathNodes == null)

182

             {

183

648

                 pathNodes = new LinkedList();

184

             }

185

821

             pathNodes.add(nodeName);

186

821

         }

187

     }