package jnpf.bizcommon.onlyoffice.service.impl;
|
|
import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeConfigParam;
|
import jnpf.exception.DataException;
|
import org.springframework.stereotype.Component;
|
import org.springframework.util.StringUtils;
|
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
@Component
|
public class OnlyOfficeSceneConfigRegistry {
|
|
private final Map<String, OnlyOfficeSceneConfigBuilder> buildersByScene = new LinkedHashMap<>();
|
private final Map<String, OnlyOfficeSceneConfigBuilder> guardedBuildersByModule = new LinkedHashMap<>();
|
private final DefaultSceneConfigBuilder defaultBuilder;
|
|
public OnlyOfficeSceneConfigRegistry(List<OnlyOfficeSceneConfigBuilder> builders,
|
DefaultSceneConfigBuilder defaultBuilder) {
|
this.defaultBuilder = defaultBuilder;
|
for (OnlyOfficeSceneConfigBuilder builder : builders) {
|
if (StringUtils.hasText(builder.scene())) {
|
if (buildersByScene.putIfAbsent(builder.scene(), builder) != null) {
|
throw new IllegalStateException("OnlyOffice 场景 Builder 重复:" + builder.scene());
|
}
|
}
|
if (builder.guardsBusinessContext() && StringUtils.hasText(builder.bizModule())) {
|
if (guardedBuildersByModule.putIfAbsent(builder.bizModule(), builder) != null) {
|
throw new IllegalStateException("OnlyOffice 业务模块守卫重复:" + builder.bizModule());
|
}
|
}
|
}
|
}
|
|
public OnlyOfficeSceneConfigBuilder resolve(OnlyOfficeConfigParam param) {
|
OnlyOfficeSceneConfigBuilder builder = buildersByScene.get(param.getBizScene());
|
if (builder == null) {
|
return defaultBuilder;
|
}
|
if (!builder.bizModule().equals(param.getBizModule())) {
|
throw new DataException("OnlyOffice 插件场景与业务模块不匹配");
|
}
|
return builder;
|
}
|
|
public List<OnlyOfficeSceneConfigBuilder> guardedBuilders() {
|
return new java.util.ArrayList<>(guardedBuildersByModule.values());
|
}
|
|
public OnlyOfficeSceneConfigBuilder guardedBuilder(String bizModule) {
|
return guardedBuildersByModule.get(bizModule);
|
}
|
}
|