All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bstek.urule.parse.AbstractRuleParser Maven / Gradle / Ivy

There is a newer version: 2.1.7
Show newest version
/*******************************************************************************
 * Copyright 2017 Bstek
 * 
 * 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.
 ******************************************************************************/
package com.bstek.urule.parse;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.apache.commons.lang.StringUtils;
import org.dom4j.Element;

import com.bstek.urule.Configure;
import com.bstek.urule.RuleException;
import com.bstek.urule.model.rule.Rule;

/**
 * @author Jacky.gao
 * @since 2016年5月31日
 */
public abstract class AbstractRuleParser implements Parser {
	protected LhsParser lhsParser;
	protected RhsParser rhsParser;
	private OtherParser otherParser;
	public void parseRule(Rule rule,Element element,boolean withPermission) {
		rule.setName(element.attributeValue("name"));
		String salience=element.attributeValue("salience");
		if(StringUtils.isNotEmpty(salience)){
			rule.setSalience(Integer.valueOf(salience));
		}
		String effectiveDate=element.attributeValue("effective-date");
		SimpleDateFormat sd=new SimpleDateFormat(Configure.getDateFormat());
		if(StringUtils.isNotEmpty(effectiveDate)){
			try {
				rule.setEffectiveDate(sd.parse(effectiveDate));
			} catch (ParseException e) {
				throw new RuleException(e);
			}
		}
		String expiresDate=element.attributeValue("expires-date");
		if(StringUtils.isNotEmpty(expiresDate)){
			try {
				rule.setExpiresDate(sd.parse(expiresDate));
			} catch (ParseException e) {
				throw new RuleException(e);
			}
		}
		String enabled=element.attributeValue("enabled");
		if(StringUtils.isNotEmpty(enabled)){
			rule.setEnabled(Boolean.valueOf(enabled));
		}
		String debug=element.attributeValue("debug");
		if(StringUtils.isNotEmpty(debug)){
			rule.setDebug(Boolean.valueOf(debug));
		}
		String loop=element.attributeValue("loop");
		if(StringUtils.isNotEmpty(loop)){
			rule.setLoop(Boolean.valueOf(loop));
		}
		rule.setActivationGroup(element.attributeValue("activation-group"));
		rule.setAgendaGroup(element.attributeValue("agenda-group"));
		String autoFocus=element.attributeValue("auto-focus");
		if(StringUtils.isNotEmpty(autoFocus)){
			rule.setAutoFocus(Boolean.valueOf(autoFocus));
		}
		rule.setRuleflowGroup(element.attributeValue("ruleflow-group"));
		for(Object obj:element.elements()){
			if(obj==null || !(obj instanceof Element)){
				continue;
			}
			Element ele=(Element)obj;
			if(lhsParser.support(ele.getName())){
				rule.setLhs(lhsParser.parse(ele,withPermission));				
			}else if(rhsParser.support(ele.getName())){
				rule.setRhs(rhsParser.parse(ele,withPermission));				
			}else if(otherParser.support(ele.getName())){
				rule.setOther(otherParser.parse(ele,withPermission));
			}else if(ele.getName().equals("remark")){
				rule.setRemark(ele.getText());
			}
		}
	}
	
	public void setLhsParser(LhsParser lhsParser) {
		this.lhsParser = lhsParser;
	}
	public void setRhsParser(RhsParser rhsParser) {
		this.rhsParser = rhsParser;
	}
	public void setOtherParser(OtherParser otherParser) {
		this.otherParser = otherParser;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy