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> providers = new ConcurrentHashMap(); private Map 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 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); } }