From c7a4aeef1606c97d50e40711da9479494e015d2f Mon Sep 17 00:00:00 2001 From: elchananarb Date: Thu, 20 Mar 2025 14:53:46 +0200 Subject: [PATCH 1/4] Prevent creation of new branches by validating branch selection --- .../eclipse/views/CheckmarxView.java | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java b/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java index 186ced70..7a9b47f1 100644 --- a/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java +++ b/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java @@ -869,22 +869,29 @@ public void selectionChanged(SelectionChangedEvent event) { if (selection.size() > 0) { String selectedBranch = ((String) selection.getFirstElement()); + // Check if selected branch exists in currentBranches + if (!currentBranches.contains(selectedBranch)) { + // Invalid branch - reset to default text and disable scan button + PluginUtils.setTextForComboViewer(branchComboViewer, BRANCH_COMBO_VIEWER_TEXT); + updateStartScanButton(false); + return; + } + // Avoid non-sense trigger changed when opening the combo if (selectedBranch.equals(currentBranch) && !scansCleanedByProject) { CxLogger.info(PluginConstants.INFO_CHANGE_BRANCH_EVENT_NOT_TRIGGERED); - return; } onBranchChangePluginLoading(selectedBranch); List scanList = DataProvider.getInstance().getScansForProject(selectedBranch); - if(!scanList.isEmpty()) { + if (!scanList.isEmpty()) { latestScanId = getLatestScanFromScanList(scanList).getId(); } - scanIdComboViewer.setInput(scanList); + scanIdComboViewer.setInput(scanList); loadLatestScanByDefault(scanList); - + sync.asyncExec(new Runnable() { public void run() { PluginUtils.enableComboViewer(projectComboViewer, true); @@ -892,15 +899,28 @@ public void run() { PluginUtils.updateFiltersEnabledAndCheckedState(toolBarActions.getFilterActions()); toolBarActions.getStateFilterAction().setEnabled(true); updateStartScanButton(true); - } + } }); - + PluginUtils.updateFiltersEnabledAndCheckedState(toolBarActions.getFilterActions()); } } }); + + // Add ModifyListener to handle manual text input + branchComboViewer.getCombo().addModifyListener(e -> { + String enteredBranch = branchComboViewer.getCombo().getText(); + + // If text was modified and branch doesn't exist + if (!currentBranches.contains(enteredBranch)) { + updateStartScanButton(false); // Disable scan button + } else { + updateStartScanButton(true); // Enable scan button if branch is valid + } + }); } - + + private void loadLatestScanByDefault(List scanList) { if(scanList.isEmpty()) { PluginUtils.setTextForComboViewer(scanIdComboViewer, PluginConstants.COMBOBOX_SCAND_ID_NO_SCANS_AVAILABLE); From b20e91c96ba9db0c9e0377d2e8d82b33519f2680 Mon Sep 17 00:00:00 2001 From: elchananarb Date: Thu, 20 Mar 2025 15:38:02 +0200 Subject: [PATCH 2/4] Update CheckmarxView.java --- .../src/com/checkmarx/eclipse/views/CheckmarxView.java | 1 - 1 file changed, 1 deletion(-) diff --git a/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java b/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java index 7a9b47f1..919c4d7c 100644 --- a/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java +++ b/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java @@ -920,7 +920,6 @@ public void run() { }); } - private void loadLatestScanByDefault(List scanList) { if(scanList.isEmpty()) { PluginUtils.setTextForComboViewer(scanIdComboViewer, PluginConstants.COMBOBOX_SCAND_ID_NO_SCANS_AVAILABLE); From 47bdb5237d9c7aaae0db4dd760578801d1f006bc Mon Sep 17 00:00:00 2001 From: elchananarb Date: Thu, 20 Mar 2025 18:07:41 +0200 Subject: [PATCH 3/4] update also in project --- .../eclipse/views/CheckmarxView.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java b/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java index 919c4d7c..1b2d4045 100644 --- a/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java +++ b/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java @@ -183,6 +183,8 @@ public class CheckmarxView extends ViewPart implements EventHandler { private String latestScanId = PluginConstants.EMPTY_STRING; private static String currentScanIdFormmated = PluginConstants.EMPTY_STRING; private List currentBranches = new ArrayList<>(); + private List currentProjects = new ArrayList<>(); + private boolean scansCleanedByProject = false; private boolean firstTimeTriggered = false; @@ -375,10 +377,10 @@ private void loadComboboxes() { @Override protected IStatus run(IProgressMonitor arg0) { - List projectList = getProjects(); + currentProjects = getProjects(); sync.asyncExec(() -> { - projectComboViewer.setInput(projectList); - if (currentProjectId.isEmpty() || projectList.isEmpty()) { + projectComboViewer.setInput(currentProjects); + if (currentProjectId.isEmpty() || currentProjects.isEmpty()) { PluginUtils.setTextForComboViewer(projectComboViewer, PROJECT_COMBO_VIEWER_TEXT); PluginUtils.setTextForComboViewer(branchComboViewer, BRANCH_COMBO_VIEWER_TEXT); PluginUtils.setTextForComboViewer(scanIdComboViewer, PluginConstants.COMBOBOX_SCAND_ID_PLACEHOLDER); @@ -389,7 +391,7 @@ protected IStatus run(IProgressMonitor arg0) { }); // set project ID - String currentProjectName = getProjectFromId(projectList, currentProjectId); + String currentProjectName = getProjectFromId(currentProjects, currentProjectId); sync.asyncExec(() -> { PluginUtils.setTextForComboViewer(projectComboViewer, currentProjectName); }); @@ -763,6 +765,15 @@ public void selectionChanged(SelectionChangedEvent event) { Project selectedProject = ((Project) selection.getFirstElement()); + + // Check if selected branch exists in currentBranches + if (!currentProjects.contains(selectedProject)) { + // Invalid branch - reset to default text and disable scan button + PluginUtils.setTextForComboViewer(projectComboViewer, PROJECT_COMBO_VIEWER_TEXT); + updateStartScanButton(false); + return; + } + // Avoid non-sense trigger changed when opening the combo if (selectedProject.getId().equals(currentProjectId)) { CxLogger.info(PluginConstants.INFO_CHANGE_PROJECT_EVENT_NOT_TRIGGERED); From 7100eca275e093fa93c98ad0039e360391687043 Mon Sep 17 00:00:00 2001 From: elchananarb Date: Sun, 23 Mar 2025 09:29:02 +0200 Subject: [PATCH 4/4] update also in project 2 --- .../eclipse/views/CheckmarxView.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java b/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java index 1b2d4045..4a0bef2b 100644 --- a/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java +++ b/checkmarx-ast-eclipse-plugin/src/com/checkmarx/eclipse/views/CheckmarxView.java @@ -762,13 +762,11 @@ public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); if (selection.size() > 0) { - Project selectedProject = ((Project) selection.getFirstElement()); - - // Check if selected branch exists in currentBranches + // Check if selected project exists in currentProjects if (!currentProjects.contains(selectedProject)) { - // Invalid branch - reset to default text and disable scan button + // Invalid project - reset to default text and disable scan button PluginUtils.setTextForComboViewer(projectComboViewer, PROJECT_COMBO_VIEWER_TEXT); updateStartScanButton(false); return; @@ -777,14 +775,12 @@ public void selectionChanged(SelectionChangedEvent event) { // Avoid non-sense trigger changed when opening the combo if (selectedProject.getId().equals(currentProjectId)) { CxLogger.info(PluginConstants.INFO_CHANGE_PROJECT_EVENT_NOT_TRIGGERED); - return; } onProjectChangePluginLoading(selectedProject.getId()); Job job = new Job("Checkmarx: Loading branches...") { - @Override protected IStatus run(IProgressMonitor arg0) { currentBranches = DataProvider.getInstance().getBranchesForProject(selectedProject.getId()); @@ -801,15 +797,29 @@ protected IStatus run(IProgressMonitor arg0) { }); return Status.OK_STATUS; } - }; job.schedule(); - } } }); - } + // Add ModifyListener to handle manual text input for projects + projectComboViewer.getCombo().addModifyListener(e -> { + String enteredProject = projectComboViewer.getCombo().getText(); + + // Check if text was modified and project doesn't exist + boolean projectExists = currentProjects.stream() + .anyMatch(p -> p.getName().equals(enteredProject)); + + if (!projectExists) { + updateStartScanButton(false); // Disable scan button + } else { + // Only enable if we also have a valid branch + boolean validBranch = !currentBranch.isEmpty() && currentBranches.contains(currentBranch); + updateStartScanButton(validBranch); + } + }); + } /** * Update state variables and make plugin fields loading when project changes *