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 }