package jnpf.bizcommon.onlyoffice.service.impl; import jnpf.base.UserInfo; import org.springframework.stereotype.Component; import java.util.LinkedHashMap; import java.util.Map; /** Dedicated ephemeral comparison scene. It cannot grant editing through the normal /config endpoint. */ @Component public class DmsDocumentCompareConfigBuilder implements OnlyOfficeSceneConfigBuilder { public static final String SCENE = "dms-document-compare"; public static final String KEY_PREFIX = "dms-compare-"; @Override public String scene() { return SCENE; } @Override public String bizModule() { return SCENE; } @Override public boolean guardsBusinessContext() { return false; } @Override public OnlyOfficeSceneBuildPlan build(OnlyOfficeSceneBuildContext context) { return OnlyOfficeSceneBuildPlan.builder().editAdmission(() -> false).build(); } @SuppressWarnings("unchecked") public Map comparisonConfig(String key, String title, String sourceUrl, String callbackUrl, UserInfo user) { Map permissions = OnlyOfficeUiConfig.previewPermissions(); Map document = new LinkedHashMap<>(); document.put("fileType", "docx"); document.put("key", key); document.put("title", title); document.put("url", sourceUrl); document.put("permissions", permissions); // Inherit the current-file preview policy, then apply comparison-only overrides. Map customization = OnlyOfficeUiConfig.previewCustomization(); customization.put("forcesave", false); Map review = (Map) customization.get("review"); review.put("reviewDisplay", "markup"); review.put("showReviewChanges", true); customization.put("close", Map.of("visible", false)); Map editor = new LinkedHashMap<>(); editor.put("mode", "view"); editor.put("lang", "zh-CN"); editor.put("user", Map.of("id", user.getUserId(), "name", user.getUserName() == null ? user.getUserId() : user.getUserName())); editor.put("callbackUrl", callbackUrl); editor.put("customization", customization); Map config = new LinkedHashMap<>(); config.put("document", document); config.put("editorConfig", editor); config.put("documentType", "word"); config.put("type", "desktop"); config.put("width", "100%"); config.put("height", "100%"); return config; } }