1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.student.common.assembly.data;
20
21 import java.util.ArrayList;
22 import java.util.Collection;
23
24 import org.kuali.student.common.assembly.data.Data.Key;
25
26
27
28
29
30
31
32 public class QueryPath extends ArrayList<Key> {
33
34 private static final PathParser parser = new DefaultPathParser();
35
36 private static final long serialVersionUID = 1L;
37
38 public static String getWildCard() {
39 return parser.getWildCard();
40 }
41
42 public static String getPathSeparator(){
43 return parser.getPathSeparator();
44 }
45
46 public static QueryPath parse(final String path) {
47 return parser.parse(path);
48 }
49
50 private String stringPath = null;
51
52
53
54
55 @Override
56 public void add(final int index, final Key element) {
57 stringPath = null;
58 super.add(index, element);
59 }
60
61
62
63
64 @Override
65 public boolean add(final Key e) {
66 stringPath = null;
67 return super.add(e);
68 }
69
70
71
72
73 @Override
74 public boolean addAll(final Collection<? extends Key> c) {
75 stringPath = null;
76 return super.addAll(c);
77 }
78
79
80
81
82 @Override
83 public boolean addAll(final int index, final Collection<? extends Key> c) {
84 stringPath = null;
85 return super.addAll(index, c);
86 }
87
88
89
90
91 @Override
92 public void clear() {
93 stringPath = null;
94 super.clear();
95 }
96
97
98
99
100 @Override
101 public Key remove(final int index) {
102 stringPath = null;
103 return super.remove(index);
104 }
105
106
107
108
109 @Override
110 public boolean remove(final Object o) {
111 stringPath = null;
112 return super.remove(o);
113 }
114
115
116
117
118 @Override
119 public boolean removeAll(final Collection<?> c) {
120 stringPath = null;
121 return super.removeAll(c);
122 }
123
124
125
126
127 @Override
128 protected void removeRange(final int fromIndex, final int toIndex) {
129 stringPath = null;
130 super.removeRange(fromIndex, toIndex);
131 }
132
133
134
135
136 @Override
137 public boolean retainAll(final Collection<?> c) {
138 stringPath = null;
139 return super.retainAll(c);
140 }
141
142
143
144
145 @Override
146 public Key set(final int index, final Key element) {
147 stringPath = null;
148 return super.set(index, element);
149 }
150
151 public QueryPath subPath(final int fromIndex, final int toIndex) {
152
153 final QueryPath result = new QueryPath();
154 for (int i = fromIndex; i < toIndex; i++) {
155 result.add(this.get(i));
156 }
157 return result;
158 }
159
160 @Override
161 public String toString() {
162 if (stringPath == null) {
163 stringPath = parser.format(this);
164 }
165 return stringPath;
166 }
167
168 public static QueryPath concat(String... paths) {
169 QueryPath result = new QueryPath();
170 for (String path : paths) {
171 if (path != null) {
172 result.addAll(QueryPath.parse(path));
173 }
174 }
175 return result;
176 }
177 }