001    /**
002     * Copyright 2011 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    package org.kuali.common.impex.data.impl;
017    
018    import org.apache.commons.lang3.StringUtils;
019    
020    /**
021     * This class parses a .mpx file and creates an in-memory representation of the data
022     * 
023     * @author andrewlubbers
024     */
025    public class MpxParser {
026    
027            private static final String QUOTE = "\"";
028            private static final String TOKEN_DELIMITER = QUOTE + "," + QUOTE;
029    
030            /**
031             * Split the line up into individual values and remove any .mpx related formatting
032             */
033            public static String[] parseMpxLine(String line) {
034                    // Remove trailing/leading quotes
035                    String trimmed = trimQuotes(line);
036    
037                    // Split the line up into individual values
038                    String[] values = StringUtils.splitByWholeSeparator(trimmed, TOKEN_DELIMITER);
039    
040                    // Convert mpx special values (i.e. ${mpx.lf} -> \n )
041                    for (int i = 0; i < values.length; i++) {
042                            values[i] = ParseUtils.parse(values[i]);
043                    }
044    
045                    // These are the original string values with all of the .mpx related
046                    // formatting removed
047                    return values;
048            }
049    
050            /**
051             * Remove leading and trailing quotes (if any)
052             */
053            public static String trimQuotes(String line) {
054                    if (StringUtils.startsWith(line, QUOTE)) {
055                            line = StringUtils.substring(line, QUOTE.length());
056                    }
057                    int length = line.length();
058                    if (StringUtils.endsWith(line, QUOTE)) {
059                            line = StringUtils.substring(line, 0, length - QUOTE.length());
060                    }
061                    return line;
062            }
063    
064    }