package jnpf.dmsEntity.preview.model; import jnpf.dmsEntity.preview.enums.DmsPreviewFormat; import jnpf.dmsEntity.storage.model.DmsPersistentPdfSource; import jnpf.util.JsonUtil; import lombok.Data; import java.util.ArrayList; import java.util.List; import java.util.UUID; @Data public class DmsFilePreviewTicket { public static final String SCOPE = "dms:onlyoffice:preview"; public static final String PRINT_SCOPE = "dms:onlyoffice:print"; public static final String PRINT_BASE_SCOPE = "dms:onlyoffice:print-base"; private String scope; private String tenantId; private String userId; private UUID fileVersionId; private String fileName; private String mimeType; private Long sizeBytes; private String storagePlatform; private String bucketName; private String basePath; private String objectPath; private String objectName; private DmsPersistentPdfSource pdfSource; private DmsPreviewFormat previewFormat; /** Original physical pages requested for printing, for example 1-3,5. */ private String printPages; private List watermarks = new ArrayList<>(); /** Set only by a permission-checked historical issuance; absent legacy value means current use. */ private boolean historicalAccess; private long expiresAt; public static DmsFilePreviewTicket fromRaw(Object raw) { if (!(raw instanceof String) || isBlank((String) raw)) { throw new IllegalArgumentException("DMS 预览票据无效"); } DmsFilePreviewTicket payload; try { payload = JsonUtil.getJsonToBean((String) raw, DmsFilePreviewTicket.class); } catch (RuntimeException exception) { throw new IllegalArgumentException("DMS 预览票据无效", exception); } if (payload == null || !isSupportedScope(payload.getScope()) || isBlank(payload.getTenantId()) || isBlank(payload.getUserId()) || payload.getFileVersionId() == null || isBlank(payload.getFileName()) || isBlank(payload.getStoragePlatform()) || isBlank(payload.getBucketName()) || isBlank(payload.getObjectPath()) || isBlank(payload.getObjectName()) || payload.getExpiresAt() <= System.currentTimeMillis()) { throw new IllegalArgumentException("DMS 预览票据无效或已过期"); } return payload; } private static boolean isSupportedScope(String scope) { return SCOPE.equals(scope) || PRINT_SCOPE.equals(scope) || PRINT_BASE_SCOPE.equals(scope); } private static boolean isBlank(String value) { return value == null || value.trim().isEmpty(); } }