View Javadoc

1   /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10   * software distributed under the License is distributed on an "AS IS"
11   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12   * or implied. See the License for the specific language governing
13   * permissions and limitations under the License.
14   */
15  
16  /**
17   * 
18   */
19  package org.kuali.student.common.assembly.data;
20  
21  import java.util.Iterator;
22  
23  import org.kuali.student.common.assembly.data.Data.Key;
24  /**
25   * @author wilj
26   *
27   */
28  public class DefaultPathParser implements PathParser {
29  
30      private static final String PATH_SEPARATOR = "/";
31      
32  	@Override
33  	public String format(final QueryPath path) {
34  		final StringBuilder sb = new StringBuilder();
35  		for (final Iterator<Key> itr = path.iterator(); itr.hasNext();) {
36  			final Key key = itr.next();
37  			if (key == null) {
38  				// note, this branch should ideally never be hit
39  				// but if we throw an exception here, it breaks the eclipse debugger when trying to introspect
40  				sb.append("null");
41  			} else {
42  				sb.append(key.toString());
43  			}
44  			if (itr.hasNext()) {
45  				sb.append(PATH_SEPARATOR);
46  			}
47  		}
48  		return sb.toString();
49  	}
50  
51  	@Override
52  	public String getWildCard() {
53  		return "*";
54  	}
55  	
56  	@Override
57  	public QueryPath parse(final String path) {
58  		final QueryPath result = new QueryPath();
59  		final String[] elements = path.split(PATH_SEPARATOR);
60  		for (String element : elements) {
61  			element = element.trim();
62  			if (!element.isEmpty()) {
63  				Integer index = null;
64  				try {
65  					index = Integer.valueOf(element);
66  				} catch (final Exception e) {
67  					// do nothing
68  				}
69  				if (index == null) {
70  					result.add(new Data.StringKey(element));
71  				} else {
72  					result.add(new Data.IntegerKey(index));
73  				}
74  			}
75  		}
76  		return result;
77  	}
78  
79      @Override
80      public String getPathSeparator() {
81          return PATH_SEPARATOR;
82      }
83  }