OSDN Git Service

imported from subversion repository
[xerial/xerial-core.git] / src / main / java / org / xerial / util / xml / SinglePathBuilder.java
1 /*--------------------------------------------------------------------------\r
2  *  Copyright 2008 Taro L. Saito\r
3  *\r
4  *  Licensed under the Apache License, Version 2.0 (the "License");\r
5  *  you may not use this file except in compliance with the License.\r
6  *  You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  *  Unless required by applicable law or agreed to in writing, software\r
11  *  distributed under the License is distributed on an "AS IS" BASIS,\r
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  *  See the License for the specific language governing permissions and\r
14  *  limitations under the License.\r
15  *--------------------------------------------------------------------------*/\r
16 //--------------------------------------\r
17 // XerialJ\r
18 //\r
19 // SinglePathBuilder.java\r
20 // Since: Oct 27, 2008 2:14:57 PM\r
21 //\r
22 // $URL: http://www.xerial.org/svn/project/XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/xml/SinglePathBuilder.java $\r
23 // $Author: leo $\r
24 //--------------------------------------\r
25 package org.xerial.util.xml;\r
26 \r
27 import java.util.ArrayList;\r
28 import java.util.Iterator;\r
29 import java.util.NoSuchElementException;\r
30 \r
31 import org.xerial.util.xml.SinglePath.PathType;\r
32 \r
33 /**\r
34  * A builder class for generating {@link SinglePath} instance\r
35  * \r
36  * @author leo\r
37  * \r
38  */\r
39 public class SinglePathBuilder implements Iterable<String>\r
40 {\r
41     private ArrayList<String> _path = new ArrayList<String>();\r
42     private PathType _pathType = PathType.AbsolutePath;\r
43 \r
44     public SinglePathBuilder()\r
45     {}\r
46 \r
47     public static SinglePathBuilder relativePathBuilder()\r
48     {\r
49         SinglePathBuilder builder = new SinglePathBuilder();\r
50         builder.setPathType(PathType.RelativePath);\r
51         return builder;\r
52     }\r
53 \r
54     public SinglePathBuilder setPathType(PathType pathType)\r
55     {\r
56         this._pathType = pathType;\r
57         return this;\r
58     }\r
59 \r
60     public SinglePathBuilder addChild(String tagName)\r
61     {\r
62         _path.add(tagName);\r
63         return this;\r
64     }\r
65 \r
66     public SinglePathBuilder removeLeaf()\r
67     {\r
68         if (_path.size() <= 0)\r
69             throw new NoSuchElementException("no leaf to remove");\r
70         _path.remove(_path.size() - 1);\r
71         return this;\r
72     }\r
73 \r
74     public int size()\r
75     {\r
76         return _path.size();\r
77     }\r
78 \r
79     public SinglePath build()\r
80     {\r
81         return new SinglePath(_pathType, _path);\r
82     }\r
83 \r
84     public Iterator<String> iterator()\r
85     {\r
86         return _path.iterator();\r
87     }\r
88 }\r