刘光辉
3 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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);
    }
}