package com.dalab.policyengine.dto; import java.util.List; import java.util.Map; import jakarta.validation.constraints.NotBlank; /** * DTO for requesting policy impact analysis preview. * This allows users to see what assets would be affected by policy changes before implementation. */ public class PolicyImpactRequestDTO { /** * The policy rules content to analyze for impact (JSON format). * Required field containing the policy rules that need impact analysis. */ @NotBlank(message = "Policy rules content is required") private String rulesContent; /** * Type of analysis to perform: FULL, QUICK, or TARGETED. * - FULL: Comprehensive analysis across all assets * - QUICK: Fast analysis with sampling * - TARGETED: Analysis for specific asset types/groups */ @NotBlank(message = "Analysis type is required") private String analysisType; /** * Optional scope limitations for targeted analysis. * Can include asset types, data sources, or specific asset IDs. */ private PolicyImpactScopeDTO scope; /** * Include estimated performance impact in the analysis. * When true, includes estimates for processing time and resource usage. */ private Boolean includePerformanceEstimate = false; /** * Include cost impact analysis in the preview. * When true, estimates potential costs of policy enforcement. */ private Boolean includeCostImpact = false; /** * Include compliance impact analysis. * When true, shows how this policy affects compliance with other policies. */ private Boolean includeComplianceImpact = false; /** * Additional context parameters for policy evaluation. * Flexible map for custom analysis parameters. */ private Map contextParameters; // Constructors public PolicyImpactRequestDTO() {} public PolicyImpactRequestDTO(String rulesContent, String analysisType) { this.rulesContent = rulesContent; this.analysisType = analysisType; } // Getters and Setters public String getRulesContent() { return rulesContent; } public void setRulesContent(String rulesContent) { this.rulesContent = rulesContent; } public String getAnalysisType() { return analysisType; } public void setAnalysisType(String analysisType) { this.analysisType = analysisType; } public PolicyImpactScopeDTO getScope() { return scope; } public void setScope(PolicyImpactScopeDTO scope) { this.scope = scope; } public Boolean getIncludePerformanceEstimate() { return includePerformanceEstimate; } public void setIncludePerformanceEstimate(Boolean includePerformanceEstimate) { this.includePerformanceEstimate = includePerformanceEstimate; } public Boolean getIncludeCostImpact() { return includeCostImpact; } public void setIncludeCostImpact(Boolean includeCostImpact) { this.includeCostImpact = includeCostImpact; } public Boolean getIncludeComplianceImpact() { return includeComplianceImpact; } public void setIncludeComplianceImpact(Boolean includeComplianceImpact) { this.includeComplianceImpact = includeComplianceImpact; } public Map getContextParameters() { return contextParameters; } public void setContextParameters(Map contextParameters) { this.contextParameters = contextParameters; } /** * Nested DTO for defining analysis scope limitations. */ public static class PolicyImpactScopeDTO { /** * Specific asset types to include in analysis (e.g., "database", "file", "api"). */ private List assetTypes; /** * Specific data sources to include (e.g., connection IDs or source names). */ private List dataSources; /** * Specific asset IDs to analyze (for targeted analysis). */ private List assetIds; /** * Include only assets with specific labels. */ private List requiredLabels; /** * Exclude assets with specific labels. */ private List excludedLabels; /** * Maximum number of assets to analyze (for performance control). */ private Integer maxAssets; // Constructors public PolicyImpactScopeDTO() {} // Getters and Setters public List getAssetTypes() { return assetTypes; } public void setAssetTypes(List assetTypes) { this.assetTypes = assetTypes; } public List getDataSources() { return dataSources; } public void setDataSources(List dataSources) { this.dataSources = dataSources; } public List getAssetIds() { return assetIds; } public void setAssetIds(List assetIds) { this.assetIds = assetIds; } public List getRequiredLabels() { return requiredLabels; } public void setRequiredLabels(List requiredLabels) { this.requiredLabels = requiredLabels; } public List getExcludedLabels() { return excludedLabels; } public void setExcludedLabels(List excludedLabels) { this.excludedLabels = excludedLabels; } public Integer getMaxAssets() { return maxAssets; } public void setMaxAssets(Integer maxAssets) { this.maxAssets = maxAssets; } } }