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 buildersByScene = new LinkedHashMap<>(); private final Map guardedBuildersByModule = new LinkedHashMap<>(); private final DefaultSceneConfigBuilder defaultBuilder; public OnlyOfficeSceneConfigRegistry(List 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 guardedBuilders() { return new java.util.ArrayList<>(guardedBuildersByModule.values()); } public OnlyOfficeSceneConfigBuilder guardedBuilder(String bizModule) { return guardedBuildersByModule.get(bizModule); } }