package jnpf.bizcommon.onlyoffice.service.impl; import lombok.Builder; import java.util.Map; import java.util.function.BooleanSupplier; @Builder public class OnlyOfficeSceneBuildPlan { @FunctionalInterface public interface PluginContextCustomizer { void customize(String pluginCode, String pluginGuid, Map context, boolean writable); } private final BooleanSupplier editAdmission; /** Server-verified lease forbids untracked full editing. */ private final boolean reviewOnly; public boolean reviewOnly() { return reviewOnly; } /** 仅由已授权的场景构造器设置;允许会话身份与物理来源分离。 */ private final String sourceFileId; /** 上传编辑专属权限;null 表示其他场景,保持原兼容行为。 */ private final Boolean uploadFileAllowDownload; private final boolean uploadQianpiyeAnnotatorEnabled; public Boolean uploadFileAllowDownload() { return uploadFileAllowDownload; } public boolean uploadQianpiyeAnnotatorEnabled() { return uploadQianpiyeAnnotatorEnabled; } public String sourceFileId() { return sourceFileId; } private final boolean allowSameUserLockReopen; private final boolean hideCommentsWhenWritable; private final String pluginHiddenInReadOnly; private final boolean keepHiddenPluginForLocate; private final PluginContextCustomizer pluginContextCustomizer; public boolean canEdit() { return editAdmission != null && editAdmission.getAsBoolean(); } public boolean allowSameUserLockReopen() { return allowSameUserLockReopen; } public boolean hideCommentsWhenWritable() { return hideCommentsWhenWritable; } public boolean keepPluginInReadOnly(String pluginCode, boolean locatingControl) { return pluginHiddenInReadOnly == null || !pluginHiddenInReadOnly.equals(pluginCode) || keepHiddenPluginForLocate && locatingControl; } public void customizePluginContext(String pluginCode, String pluginGuid, Map context, boolean writable) { if (pluginContextCustomizer != null) { pluginContextCustomizer.customize(pluginCode, pluginGuid, context, writable); } } }