Package org.springmodules.cache.util

Source Code of org.springmodules.cache.util.SemicolonSeparatedPropertiesParser

/*
* Created on Jan 18, 2005
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
* Copyright @2005 the original author or authors.
*/

package org.springmodules.cache.util;

import java.util.Properties;

import org.springframework.util.StringUtils;

import org.springmodules.cache.regex.Match;
import org.springmodules.cache.regex.Perl5Regex;
import org.springmodules.cache.regex.Regex;

/**
* <p>
* Parses a String of form <code>key1=value1;key2=value2;keyN=valueN</code>,
* and creates a <code>java.util.Properties</code>.
* </p>
*
* @author Alex Ruiz
*/
public abstract class SemicolonSeparatedPropertiesParser {

  /**
   * Compiled representation of the regular expression pattern used to parse a
   * String of form "key=value".
   */
  private static final Regex KEY_VALUE_REGEX = new Perl5Regex(
      "([\\w]+)=([\\w /,\\*.:=&?]+)");

  private static final String PROPERTY_DELIMITER = ";";

  /**
   * Creates a <code>java.util.Properties</code> from the specified String.
   *
   * @param text
   *          the String to parse.
   * @throws IllegalArgumentException
   *           if the specified property does not match the regular expression
   *           pattern defined in <code>KEY_VALUE_REGEX</code>.
   * @throws IllegalArgumentException
   *           if the set of properties already contains the property specified
   *           by the given String.
   * @return a new instance of <code>java.util.Properties</code> created from
   *         the given text.
   */
  public static Properties parseProperties(String text)
      throws IllegalArgumentException {
    String newText = text;

    if (!StringUtils.hasText(newText)) {
      return null;
    }

    if (newText.endsWith(PROPERTY_DELIMITER)) {
      // remove ';' at the end of the text (if applicable)
      newText = newText.substring(0, newText.length()
          - PROPERTY_DELIMITER.length());

      if (!StringUtils.hasText(newText)) {
        return null;
      }
    }

    Properties properties = new Properties();
    String[] propertiesAsText = StringUtils.delimitedListToStringArray(newText,
        PROPERTY_DELIMITER);

    int propertyCount = propertiesAsText.length;
    for (int i = 0; i < propertyCount; i++) {
      String property = propertiesAsText[i];
      Match match = KEY_VALUE_REGEX.match(property);

      if (!match.isSuccessful()) {
        String message = "The String " + StringUtils.quote(property)
            + " should match the regular expression pattern "
            + StringUtils.quote(KEY_VALUE_REGEX.getPattern());
        throw new IllegalArgumentException(message);
      }

      String[] groups = match.getGroups();
      String key = groups[1].trim();
      String value = groups[2].trim();

      if (properties.containsKey(key)) {
        throw new IllegalArgumentException("The property "
            + StringUtils.quote(key) + " is specified more than once");
      }
      properties.setProperty(key, value);
    }
    return properties;
  }

}
TOP

Related Classes of org.springmodules.cache.util.SemicolonSeparatedPropertiesParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.