package com.qianwen.core.notify.template;
|
|
import java.util.Map;
|
import java.util.Optional;
|
import java.util.concurrent.ConcurrentHashMap;
|
import com.qianwen.core.cache.utils.CacheUtil;
|
import com.qianwen.core.notify.NotifyConstants;
|
import com.qianwen.core.notify.NotifyType;
|
import com.qianwen.core.tool.utils.Func;
|
|
/* loaded from: blade-starter-notify-9.3.0.0-SNAPSHOT.jar:org/springblade/core/notify/template/AbstractTemplateManager.class */
|
public abstract class AbstractTemplateManager implements TemplateManager {
|
protected Map<String, Map<String, TemplateProvider>> providers = new ConcurrentHashMap();
|
private Map<String, Template> templates = new ConcurrentHashMap();
|
|
protected abstract TemplateProperties getProperties(NotifyType type, String id);
|
|
protected void register(TemplateProvider provider) {
|
this.providers.computeIfAbsent(provider.getType().getId(), ignore -> {
|
return new ConcurrentHashMap();
|
}).put(provider.getProvider().getId(), provider);
|
}
|
|
@Override // com.qianwen.core.notify.template.TemplateManager
|
public Template createTemplate(NotifyType type, TemplateProperties properties) {
|
Map<String, TemplateProvider> providerMap = (Map) Optional.ofNullable(this.providers.get(type.getId())).orElseThrow(() -> {
|
return new UnsupportedOperationException("不支持的通知类型:" + properties.getType());
|
});
|
TemplateProvider templateProvider = (TemplateProvider) Optional.ofNullable(providerMap.get(properties.getProvider())).orElseThrow(() -> {
|
return new UnsupportedOperationException("不支持的服务商:" + properties.getProvider());
|
});
|
return templateProvider.createTemplate(properties);
|
}
|
|
public TemplateProperties getReallyTemplateProperties(NotifyType type, String id) {
|
TemplateProperties notifierTemplate = (TemplateProperties) CacheUtil.get(NotifyConstants.NOTIFY_CACHE, NotifyConstants.NOTIFIER_TEMPLATE_CODE, id, () -> {
|
TemplateProperties result = getProperties(type, id);
|
return result;
|
}, false);
|
return notifierTemplate;
|
}
|
|
@Override // com.qianwen.core.notify.template.TemplateManager
|
public Template getTemplate(NotifyType type, String id) {
|
Template template;
|
TemplateProperties templateProperties = getReallyTemplateProperties(type, id);
|
Template templateCached = this.templates.get(id);
|
if (Func.isEmpty(templateCached) || !Func.equals(templateProperties, templateCached)) {
|
synchronized (AbstractTemplateManager.class) {
|
template = createTemplate(type, templateProperties);
|
this.templates.put(id, template);
|
}
|
return template;
|
}
|
return this.templates.get(id);
|
}
|
|
@Override // com.qianwen.core.notify.template.TemplateManager
|
public void reload(String templateId) {
|
this.templates.remove(templateId);
|
}
|
}
|