docs: 完善通知模板管理器文档
This commit is contained in:
parent
2d48623733
commit
e8c4f1594e
@ -1,63 +1,78 @@
|
||||
package com.cicdi.notify.template;
|
||||
|
||||
import com.cicdi.notify.DefaultNotifyType;
|
||||
import com.cicdi.notify.NotifyType;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 模板管理器
|
||||
* 通知模板管理器抽象实现
|
||||
* <p>在SpringBoot框架中,可以实现BeanPostProcessor接口实现服务商的自动注册</p>
|
||||
*
|
||||
* @author xueye
|
||||
* @see Template
|
||||
* @see TemplateProvider
|
||||
*/
|
||||
public abstract class AbstractTemplateManager implements TemplateManager {
|
||||
|
||||
/**
|
||||
* 所有注册支持的服务商
|
||||
* <p>使用{@link #register(TemplateProvider)}方法进行注册</p>
|
||||
*/
|
||||
protected Map<String, Map<String, TemplateProvider>> providers = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 通知模板
|
||||
*/
|
||||
protected Map<String, Template> templates = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 根据ID获取通知模板配置属性
|
||||
*
|
||||
* @param type 通知类型 {@link DefaultNotifyType}
|
||||
* @param id 通知模板属性ID
|
||||
* @return 通知模板属性
|
||||
* @see DefaultNotifyType
|
||||
*/
|
||||
protected abstract TemplateProperties getProperties(NotifyType type, String id);
|
||||
|
||||
/**
|
||||
* 注册模板提供商
|
||||
*
|
||||
* @param provider 模板提供商
|
||||
*/
|
||||
@Override
|
||||
public void register(TemplateProvider provider) {
|
||||
providers.computeIfAbsent(provider.getType().getId(), ignore -> new ConcurrentHashMap<>()).put(provider.getProvider().getId(), provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Template createTemplate(NotifyType type, TemplateProperties prop) {
|
||||
Map<String, TemplateProvider> providerMap = providers.get(type.getId());
|
||||
if (null == providerMap) {
|
||||
throw new UnsupportedOperationException("不支持的通知类型: " + prop.getType());
|
||||
}
|
||||
TemplateProvider templateProvider = providerMap.get(prop.getProvider());
|
||||
if (null == templateProvider) {
|
||||
throw new UnsupportedOperationException("不支持的提供商: " + prop.getProvider());
|
||||
}
|
||||
return templateProvider.createTemplate(prop);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Template getTemplate(NotifyType type, String id) {
|
||||
Template template = templates.get(id);
|
||||
if (null == template) {
|
||||
TemplateProperties properties = this.getProperties(type, id);
|
||||
template = this.createTemplate(type, properties);
|
||||
public Template getTemplate(NotifyType type, String templateId) {
|
||||
Template template;
|
||||
if (null != templates.get(templateId)) {
|
||||
template = templates.get(templateId);
|
||||
} else {
|
||||
template = createTemplate(type, getProperties(type, templateId));
|
||||
if (null == template) {
|
||||
throw new UnsupportedOperationException("通知类型不支持: " + type.getId());
|
||||
throw new UnsupportedOperationException("不支持的通知类型: " + type.getId());
|
||||
}
|
||||
templates.put(id, template);
|
||||
templates.put(templateId, template);
|
||||
}
|
||||
return template;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Template createTemplate(NotifyType type, TemplateProperties properties) {
|
||||
Map<String, TemplateProvider> providerTypes = providers.get(type.getId());
|
||||
if (null == providerTypes) {
|
||||
throw new UnsupportedOperationException("不支持的通知类型: " + properties.getType());
|
||||
}
|
||||
TemplateProvider templateProvider = providerTypes.get(properties.getProvider());
|
||||
if (null == templateProvider) {
|
||||
throw new UnsupportedOperationException("不支持的服务商: " + properties.getProvider());
|
||||
}
|
||||
return templateProvider.createTemplate(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload(String templateId) {
|
||||
templates.remove(templateId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(TemplateProvider provider) {
|
||||
providers.computeIfAbsent(provider.getType().getId(), ignore -> new ConcurrentHashMap<>()).put(provider.getProvider().getId(), provider);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,33 +2,54 @@ package com.cicdi.notify.template;
|
||||
|
||||
import com.cicdi.notify.NotifyType;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 通知模板管理器,用于模板的转换
|
||||
* 通知模板管理器
|
||||
* <p>通知模板的转换在不同的通知服务商{@link TemplateProvider}中实现</p>
|
||||
*
|
||||
* @author xueye
|
||||
* @see Template
|
||||
* @see TemplateProvider
|
||||
*/
|
||||
public interface TemplateManager {
|
||||
|
||||
/**
|
||||
* @param type 模板类型
|
||||
* @param id 模板ID
|
||||
* @return 模板
|
||||
* 根据ID获取通知模板
|
||||
* <p>使用容器缓存模板,如果不存在调用{@link #createTemplate(NotifyType, TemplateProperties)}方法创建,
|
||||
* 并添加到容器中,容器建议使用线程安全的{@link ConcurrentHashMap}集合</p>
|
||||
*
|
||||
* @param type 通知类型
|
||||
* @param templateId 通知模板ID
|
||||
* @return 通知模板
|
||||
*/
|
||||
Template getTemplate(NotifyType type, String id);
|
||||
Template getTemplate(NotifyType type, String templateId);
|
||||
|
||||
/**
|
||||
* @param type 模板类型
|
||||
* @param properties 模板属性
|
||||
* @return 模板
|
||||
* 使用提供的模板配置属性创建通知模板
|
||||
* <p>根据不同的通知类型处理对应的模板</p>
|
||||
*
|
||||
* @param type 通知类型
|
||||
* @param properties 通知模板属性
|
||||
* @return 通知模板
|
||||
*/
|
||||
Template createTemplate(NotifyType type, TemplateProperties properties);
|
||||
|
||||
/**
|
||||
* 重新加载模板
|
||||
* 注册通知服务商
|
||||
* <p>服务商经过注册之后才可以使用, 如果通知模板配置的服务商不在已注册集合中, 将会抛出{@link UnsupportedOperationException}</p>
|
||||
*
|
||||
* @param id 模板ID
|
||||
* @param provider 通知服务商
|
||||
* @see UnsupportedOperationException
|
||||
*/
|
||||
void reload(String id);
|
||||
|
||||
void register(TemplateProvider provider);
|
||||
|
||||
/**
|
||||
* 重新加载通知模板
|
||||
* <p>如果通知模板属性有变更,调用此方法更新容器缓存中的通知模板</p>
|
||||
*
|
||||
* @param templateId 通知模板ID
|
||||
*/
|
||||
void reload(String templateId);
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user