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

com.yomahub.liteflow.parser.etcd.EtcdXmlELParser Maven / Gradle / Ivy

package com.yomahub.liteflow.parser.etcd;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.core.FlowInitHook;
import com.yomahub.liteflow.parser.el.ClassXmlFlowELParser;
import com.yomahub.liteflow.parser.etcd.exception.EtcdException;
import com.yomahub.liteflow.parser.etcd.util.EtcdParserHelper;
import com.yomahub.liteflow.parser.etcd.vo.EtcdParserVO;
import com.yomahub.liteflow.property.LiteflowConfig;
import com.yomahub.liteflow.property.LiteflowConfigGetter;
import com.yomahub.liteflow.util.JsonUtil;

import java.util.Objects;

/**
 * Etcd解析器实现,只支持EL形式的XML,不支持其他的形式
 *
 * @author zendwang
 * @since 2.9.0
 */
public class EtcdXmlELParser extends ClassXmlFlowELParser {

	private final EtcdParserHelper etcdParserHelper;

	public EtcdXmlELParser() {
		LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();

		try {
			EtcdParserVO etcdParserVO = null;
			if (MapUtil.isNotEmpty((liteflowConfig.getRuleSourceExtDataMap()))) {
				etcdParserVO = BeanUtil.toBean(liteflowConfig.getRuleSourceExtDataMap(), EtcdParserVO.class,
						CopyOptions.create());
			}
			else if (StrUtil.isNotBlank(liteflowConfig.getRuleSourceExtData())) {
				etcdParserVO = JsonUtil.parseObject(liteflowConfig.getRuleSourceExtData(), EtcdParserVO.class);
			}

			if (Objects.isNull(etcdParserVO)) {
				throw new EtcdException("rule-source-ext-data is empty");
			}

			if (StrUtil.isBlank(etcdParserVO.getChainPath())) {
				throw new EtcdException("You must configure the chainPath property");
			}
			if (StrUtil.isBlank(etcdParserVO.getEndpoints())) {
				throw new EtcdException("etcd endpoints is empty");
			}

			etcdParserHelper = new EtcdParserHelper(etcdParserVO);
		}
		catch (Exception e) {
			throw new EtcdException(e);
		}
	}

	@Override
	public String parseCustom() {

		try {
			String content = etcdParserHelper.getContent();

			FlowInitHook.addHook(() -> {
				etcdParserHelper.listen();
				return true;
			});

			return content;
		}
		catch (Exception e) {
			throw new EtcdException(e);
		}
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy