diff --git a/notify-core/src/main/java/com/cicdi/notify/template/AbstractTemplateManager.java b/notify-core/src/main/java/com/cicdi/notify/template/AbstractTemplateManager.java
index a18af76..fd9f7f8 100644
--- a/notify-core/src/main/java/com/cicdi/notify/template/AbstractTemplateManager.java
+++ b/notify-core/src/main/java/com/cicdi/notify/template/AbstractTemplateManager.java
@@ -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;
/**
- * 模板管理器
+ * 通知模板管理器抽象实现
+ *
在SpringBoot框架中,可以实现BeanPostProcessor接口实现服务商的自动注册
*
* @author xueye
+ * @see Template
+ * @see TemplateProvider
*/
public abstract class AbstractTemplateManager implements TemplateManager {
+ /**
+ * 所有注册支持的服务商
+ * 使用{@link #register(TemplateProvider)}方法进行注册
+ */
protected Map> providers = new ConcurrentHashMap<>();
+ /**
+ * 通知模板
+ */
protected Map 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 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 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);
+ }
+
}
diff --git a/notify-core/src/main/java/com/cicdi/notify/template/TemplateManager.java b/notify-core/src/main/java/com/cicdi/notify/template/TemplateManager.java
index b7067c9..2ade4ce 100644
--- a/notify-core/src/main/java/com/cicdi/notify/template/TemplateManager.java
+++ b/notify-core/src/main/java/com/cicdi/notify/template/TemplateManager.java
@@ -2,33 +2,54 @@ package com.cicdi.notify.template;
import com.cicdi.notify.NotifyType;
+import java.util.concurrent.ConcurrentHashMap;
+
/**
- * 通知模板管理器,用于模板的转换
+ * 通知模板管理器
+ * 通知模板的转换在不同的通知服务商{@link TemplateProvider}中实现
*
* @author xueye
+ * @see Template
+ * @see TemplateProvider
*/
public interface TemplateManager {
/**
- * @param type 模板类型
- * @param id 模板ID
- * @return 模板
+ * 根据ID获取通知模板
+ * 使用容器缓存模板,如果不存在调用{@link #createTemplate(NotifyType, TemplateProperties)}方法创建,
+ * 并添加到容器中,容器建议使用线程安全的{@link ConcurrentHashMap}集合
+ *
+ * @param type 通知类型
+ * @param templateId 通知模板ID
+ * @return 通知模板
*/
- Template getTemplate(NotifyType type, String id);
+ Template getTemplate(NotifyType type, String templateId);
/**
- * @param type 模板类型
- * @param properties 模板属性
- * @return 模板
+ * 使用提供的模板配置属性创建通知模板
+ * 根据不同的通知类型处理对应的模板
+ *
+ * @param type 通知类型
+ * @param properties 通知模板属性
+ * @return 通知模板
*/
Template createTemplate(NotifyType type, TemplateProperties properties);
/**
- * 重新加载模板
+ * 注册通知服务商
+ * 服务商经过注册之后才可以使用, 如果通知模板配置的服务商不在已注册集合中, 将会抛出{@link UnsupportedOperationException}
*
- * @param id 模板ID
+ * @param provider 通知服务商
+ * @see UnsupportedOperationException
*/
- void reload(String id);
-
void register(TemplateProvider provider);
+
+ /**
+ * 重新加载通知模板
+ * 如果通知模板属性有变更,调用此方法更新容器缓存中的通知模板
+ *
+ * @param templateId 通知模板ID
+ */
+ void reload(String templateId);
+
}