/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.publication.uri;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 实现uri模版规则解析
*
* @author wangwei
*/
public class RuleParse implements RuleParseable {
private static final Logger logger = LoggerFactory.getLogger(RuleParse.class);
private static final String VARIABLE_START="${";
private static final String VARIABLE_END="}";
private static final String VARIABLE_FORMAT= "?";
private final String patter;
private final Map<String, String> variables;
public RuleParse(String patter) {
this.patter = patter;
this.variables = parseVariables(patter);
}
@Override
public String getPatter() {
return this.patter;
}
@Override
public Map<String,String> getVariables(){
return this.variables;
}
/**
* 解析uri规则模版得到模版设置的变量
*
* @param patter
* uri规则模版
* @return 函数 key:函数名称 value:格式
*/
private static Map<String, String> parseVariables(String patter) {
Map<String, String> variables = new HashMap<String, String>();
if(!StringUtils.contains(patter, VARIABLE_START)){
return variables;
}
String[] tokens = StringUtils.splitByWholeSeparator(patter, VARIABLE_START);
for (String token : tokens) {
logger.debug("Token with ${{}", token);
if (!StringUtils.contains(token, "}")) {
logger.warn("\"{}\" is not closed", token);
continue;
}
String value = StringUtils.split(token, VARIABLE_END)[0];
if(StringUtils.isBlank(value)){
logger.warn("Variable's nam is null");
continue;
}
logger.debug("variable is {}", value);
String[] s = StringUtils.splitByWholeSeparator(value,VARIABLE_FORMAT);
if (s.length == 1) {
variables.put(s[0], null);
} else {
variables.put(s[0], s[1]);
}
}
return variables;
}
}