001    /**
002     * Copyright 2010 The Kuali Foundation Licensed under the
003     * Educational Community License, Version 2.0 (the "License"); you may
004     * not use this file except in compliance with the License. You may
005     * obtain a copy of the License at
006     *
007     * http://www.osedu.org/licenses/ECL-2.0
008     *
009     * Unless required by applicable law or agreed to in writing,
010     * software distributed under the License is distributed on an "AS IS"
011     * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
012     * or implied. See the License for the specific language governing
013     * permissions and limitations under the License.
014     */
015    
016    /**
017     * 
018     */
019    package org.kuali.student.common.assembly.data;
020    
021    import java.util.Iterator;
022    
023    import org.kuali.student.common.assembly.data.Data.Key;
024    /**
025     * @author wilj
026     *
027     */
028    public class DefaultPathParser implements PathParser {
029    
030        private static final String PATH_SEPARATOR = "/";
031        
032            @Override
033            public String format(final QueryPath path) {
034                    final StringBuilder sb = new StringBuilder();
035                    for (final Iterator<Key> itr = path.iterator(); itr.hasNext();) {
036                            final Key key = itr.next();
037                            if (key == null) {
038                                    // note, this branch should ideally never be hit
039                                    // but if we throw an exception here, it breaks the eclipse debugger when trying to introspect
040                                    sb.append("null");
041                            } else {
042                                    sb.append(key.toString());
043                            }
044                            if (itr.hasNext()) {
045                                    sb.append(PATH_SEPARATOR);
046                            }
047                    }
048                    return sb.toString();
049            }
050    
051            @Override
052            public String getWildCard() {
053                    return "*";
054            }
055            
056            @Override
057            public QueryPath parse(final String path) {
058                    final QueryPath result = new QueryPath();
059                    final String[] elements = path.split(PATH_SEPARATOR);
060                    for (String element : elements) {
061                            element = element.trim();
062                            if (!element.isEmpty()) {
063                                    Integer index = null;
064                                    try {
065                                            index = Integer.valueOf(element);
066                                    } catch (final Exception e) {
067                                            // do nothing
068                                    }
069                                    if (index == null) {
070                                            result.add(new Data.StringKey(element));
071                                    } else {
072                                            result.add(new Data.IntegerKey(index));
073                                    }
074                            }
075                    }
076                    return result;
077            }
078    
079        @Override
080        public String getPathSeparator() {
081            return PATH_SEPARATOR;
082        }
083    }