Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

67 add control strategy recommendations #88

Merged
merged 205 commits into from
Apr 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
205 commits
Select commit Hold shift + click to select a range
e02e3c7
#67 initial logical expressions fix
panositi Aug 21, 2023
c07ea54
#67 fixing logical expressions test RC
panositi Aug 30, 2023
4005ac8
#67 enable risk calculation from options loop
panositi Sep 4, 2023
0a46811
#67 update test models
panositi Nov 6, 2023
9a196d3
Merge branch 'dev' into 67-add-control-strategy-recommendations
panositi Nov 6, 2023
0452f21
#67 adjust DM and system model for recommendations
panositi Nov 7, 2023
6ff07d6
Merge branch 'dev' into 67-add-control-strategy-recommendations
panositi Nov 7, 2023
7008951
#67 risk vector adaptations
panositi Nov 22, 2023
49556e4
#67 adding recommendation DTO models
panositi Nov 22, 2023
bf719a8
Merge branch 'dev' into 67-add-control-strategy-recommendations
panositi Nov 22, 2023
fd373c5
#67 updaging DataFlow test model
panositi Nov 28, 2023
2034efc
Merge branch 'dev' into 67-add-control-strategy-recommendations
panositi Nov 28, 2023
bfa8101
#67 algorithm initial full run
panositi Nov 30, 2023
78dfd79
#67 basic algorithm working, no output
panositi Dec 15, 2023
d6f3798
67 updated controller api
panositi Dec 16, 2023
52e56f5
67 adding async controller
panositi Dec 23, 2023
b3ec4c3
#67 basic async call for recommendation
panositi Jan 9, 2024
cec44d7
#67: Set cache mode to true for querierDB in calculateRecommendations…
kenmeacham Jan 10, 2024
64ec0b2
#67 block comments update controlSets map
panositi Jan 11, 2024
292ece7
#67: Validation and risk calc not required in testRecommendations, so…
kenmeacham Jan 11, 2024
75db2c7
Merge branch '67-add-control-strategy-recommendations' of github.com:…
panositi Jan 11, 2024
a7f0e89
#67: Add test domain/system models for recommendations
kenmeacham Jan 11, 2024
961b9e2
#67: Create basic unit test for /recommendations endpoint
kenmeacham Jan 11, 2024
3f20606
#67 update datasets after risk calculation
panositi Jan 11, 2024
99d1d95
Merge branch '67-add-control-strategy-recommendations' of github.com:…
panositi Jan 11, 2024
ddffde6
67 refactor methods
panositi Jan 11, 2024
0441335
#67 remove allPaths param from recommendations method
panositi Jan 12, 2024
329efcb
#67: Various fixes to ensure that model name and description, etc are…
kenmeacham Jan 13, 2024
d4a487d
Merge branch '67-add-control-strategy-recommendations' of https://git…
kenmeacham Jan 14, 2024
eec808b
#67 fix attack path graph unit test
panositi Jan 15, 2024
0e6b91d
#67 in applyCSGs skip csgOptions with empty set of CS
panositi Jan 15, 2024
afae8b7
#67 add risk calculation after undoing CS
panositi Jan 15, 2024
0a22601
Merge branch 'dev' into 67-add-control-strategy-recommendations
panositi Jan 15, 2024
672b4f8
#67 change test model to support CURRENT mode in recommendations
panositi Jan 15, 2024
eba55c1
#67 make default risk mode for recommendations CURRENT
panositi Jan 15, 2024
242078f
#67: Update system model used by ModelControllerTest.testRecommendations
kenmeacham Jan 15, 2024
c785e4e
#67 fill CS fields in recommendation report, no metadata yet
panositi Jan 16, 2024
f0111b8
#67 adjust report format filling in category, action
panositi Jan 16, 2024
7ef2d75
#67 update changing CS, remove init from calculateRisk
panositi Jan 16, 2024
d0b4400
#67: Remove workaround for fixing model name/desc after recommendatio…
kenmeacham Jan 17, 2024
dc674fd
#67: Add synchronized block to calculateRecommendations, to be consis…
kenmeacham Jan 17, 2024
9ca98b4
#67: Fix some security issues
kenmeacham Jan 17, 2024
26acdc9
#67: Fix security vulnerabilities
kenmeacham Jan 17, 2024
a676135
#67: Fix reliability issue in performRecommendationCalculation
kenmeacham Jan 17, 2024
1bf37bc
#67: Tidied code
kenmeacham Jan 17, 2024
f670762
#67: Remove unused code in AttackNode
kenmeacham Jan 17, 2024
7f9b4ce
#67: Remove unused methods from AsyncController
kenmeacham Jan 17, 2024
e9d3e15
#67: Remove unused method: calculateAttack
kenmeacham Jan 17, 2024
d6d143e
#67 CSG classification revisited not fully implemented
panositi Jan 17, 2024
5aa95ff
Merge branch '67-add-control-strategy-recommendations' of github.com:…
panositi Jan 17, 2024
e3b9f45
Update AttackPathDataset.java
mike1813 Jan 18, 2024
5c14674
#67 disabling checks for contingency plans
panositi Jan 18, 2024
4c4ea78
#67: Fix logger class for RecommendationTester
kenmeacham Jan 18, 2024
7b23170
#67: Extract common querier methods into new utility class. Modify ch…
kenmeacham Jan 18, 2024
f08122c
#67 add 202 async recommendations method
panositi Jan 19, 2024
6812c15
Merge branch '67-add-control-strategy-recommendations' of github.com:…
panositi Jan 19, 2024
7f5791d
#128: Initial support for running recommendations via GUI. Add menu o…
kenmeacham Jan 22, 2024
63981ca
#128: Create prototype RecommendationsExplorer to display recommendat…
kenmeacham Jan 23, 2024
ef749c6
#67 update makeRecommendations update path
panositi Jan 24, 2024
ad16607
#128: Add react-json-view-lite package for displaying JSON in panel. …
kenmeacham Jan 24, 2024
8eeb418
#128: Updates to webpack config files to allow react-json-view-lite/d…
kenmeacham Jan 24, 2024
ff6da90
#128: Update RecommendationsExplorer to use JsonView to improve forma…
kenmeacham Jan 24, 2024
29ebee2
#67 tidying up makeRecommendations applyCSGs
panositi Jan 24, 2024
f3d4855
#128: Code improvements
kenmeacham Jan 24, 2024
e53958c
#128: Remove this.rnd refs in RecommendationsExplorer
kenmeacham Jan 24, 2024
71c88e4
#128: Improve autowiring in AsyncController
kenmeacham Jan 24, 2024
27ef9e2
#128: Remove code duplication
kenmeacham Jan 24, 2024
1cab129
#67 enabling second pass of attack path tree, improve LE display
panositi Jan 25, 2024
7fd81c6
#67 tidy up logs
panositi Jan 25, 2024
57b1842
#128: Improve RecommendationsExplorer styling. Ensure that DOM elemen…
kenmeacham Jan 26, 2024
5f50544
#128: Minor fix
kenmeacham Jan 26, 2024
3b2fd7c
#128: Remove unused props
kenmeacham Jan 26, 2024
e98c4ee
#128: Refactor updateProgress methods in modeller.js to remove duplic…
kenmeacham Jan 26, 2024
0fdd5a3
#128: Tidy code
kenmeacham Jan 26, 2024
fe3b21d
#128: Ensure that recommendations explorer is displayed on top, when …
kenmeacham Jan 29, 2024
702d8e4
#128: Refactor RecommendationsExplorer to use common Explorer compone…
kenmeacham Jan 29, 2024
94a1d95
#128: Refactor ControlExplorer and ControlStrategyExplorer to use com…
kenmeacham Jan 29, 2024
581b47a
#128: Fix minor issues
kenmeacham Jan 29, 2024
aa65aae
#128: Remove unnecessary code
kenmeacham Jan 29, 2024
3c7853b
#128: Comment out isAvtive for control explorer (not sure this is rea…
kenmeacham Jan 29, 2024
0e64e96
#128: Tidied code
kenmeacham Jan 29, 2024
0f93860
#128: Reorder rules in webpack.test.config.js to avoid code duplicati…
kenmeacham Jan 30, 2024
200895d
Merge branch '67-add-control-strategy-recommendations' into 128-add-u…
kenmeacham Jan 30, 2024
1a78a60
#128: Fix minor issues with AsyncController after merge with 67 branch
kenmeacham Jan 30, 2024
2631ca6
Merge pull request #130 from Spyderisk/128-add-ui-support-for-control…
kenmeacham Jan 30, 2024
5ce2b01
#67: Tidy imports
kenmeacham Jan 31, 2024
4541384
#67: Use PostMapping instead of RequestMapping
kenmeacham Jan 31, 2024
8540828
#67 addressing some smelly code issues
panositi Jan 31, 2024
c5c8b53
Merge branch '67-add-control-strategy-recommendations' of github.com:…
panositi Jan 31, 2024
17f1172
#67 address more smelly code issues
panositi Jan 31, 2024
5c33f2b
#67 address few more smelly code issues
panositi Jan 31, 2024
caf9020
#67 improve attack path and recommendations code
panositi Jan 31, 2024
d1ed49c
#67: Use GET instead of POST for async recommendations endpoint
kenmeacham Jan 31, 2024
9b29d20
Merge branch '67-add-control-strategy-recommendations' of https://git…
kenmeacham Jan 31, 2024
f8d5827
#67: Rename endpoint to recommendations_blocking and some additional …
kenmeacham Jan 31, 2024
f45a34a
#67: Improve startRecommendationsTaskRed (async) to make consistent w…
kenmeacham Jan 31, 2024
b27a7bf
#67: Create new getRecommendations method to call async recommendatio…
kenmeacham Jan 31, 2024
34cc49b
Added update of cached objects for CS and TWAS property update method…
mike1813 Feb 2, 2024
1788ecf
Merge branch '67-add-control-strategy-recommendations' of https://git…
kenmeacham Feb 2, 2024
4e5c409
#67 update javadoc
panositi Feb 2, 2024
de84853
Merge branch '67-add-control-strategy-recommendations' of github.com:…
panositi Feb 2, 2024
8e41214
#67: Moved startRecommendationsTaskRed method from AsyncController to…
kenmeacham Feb 2, 2024
6c96340
#67: Removed redundant method (moved to ModelController)
kenmeacham Feb 2, 2024
a3bad42
#67: Rename method
kenmeacham Feb 2, 2024
d18f858
#67, #128: Add UI support for async recommendations
kenmeacham Feb 2, 2024
1e24a81
#67: Fix testRecommendations
kenmeacham Feb 5, 2024
9d68c42
#67: Tidy warning messages
kenmeacham Feb 5, 2024
701e3c3
#67: Various improvements
kenmeacham Feb 5, 2024
605cec8
#67: Improve exception handling for riskMode
kenmeacham Feb 5, 2024
b63fc67
#67: Remove unnecessary logging calls
kenmeacham Feb 5, 2024
6b98ba8
#67: Exception handling
kenmeacham Feb 5, 2024
f4a87d6
#67: Exception handling
kenmeacham Feb 5, 2024
6460a45
#67: Improve code around task execution
kenmeacham Feb 5, 2024
7141f9f
#67: Minor improvement
kenmeacham Feb 5, 2024
6e967fa
#67: Refactor getTaskProgressOfModel to make more readable
kenmeacham Feb 5, 2024
3c2f914
#67: Remove AsyncControllerTest, as this seems to be just a direct co…
kenmeacham Feb 6, 2024
d23b48a
#67 use updated proposed status method
panositi Feb 6, 2024
eea3412
#67: Remove redundant methods from AsyncController and moved some to …
kenmeacham Feb 7, 2024
9f48c9a
#67: Relocated JobResponseDTO
kenmeacham Feb 7, 2024
9b12b54
#67: Remove AsyncController which is now redundant
kenmeacham Feb 7, 2024
61668ab
#67: Remove unused code
kenmeacham Feb 7, 2024
c2f6998
#67: Rename AsyncService to RecommendationsService
kenmeacham Feb 7, 2024
9315131
#67: Relocated DTO classes from attackpath to rest/dto/recommendation…
kenmeacham Feb 8, 2024
1330d7e
Merge pull request #132 from Spyderisk/67-async-recommendations
kenmeacham Feb 8, 2024
0ce4fba
#67 fix recommendation consequences and format of risk vector
panositi Feb 12, 2024
42549d9
#67 fixing empty fields for assets in recommendation report
panositi Feb 12, 2024
14dc651
#67 convert risk vector to a map
panositi Feb 13, 2024
c715e6a
#128: Add URI_PREFIX as constant
kenmeacham Feb 16, 2024
2d560c9
#128: Add csgAssets to state model, and getCsgAssets which gets a map…
kenmeacham Feb 16, 2024
47897e8
#128: Initial display of recommendations in the UI, showing overall r…
kenmeacham Feb 16, 2024
af1899c
#128: Handle case when there are no recommendations (returned value i…
kenmeacham Feb 16, 2024
4001abe
#128: Add authz to RecommendationsExplorer
kenmeacham Feb 16, 2024
867a345
#128: Improve sort for CSGs
kenmeacham Feb 16, 2024
1913746
#128: Make recommendation panels expanded by default
kenmeacham Feb 19, 2024
89cd7e1
#67 revert reste.on.start true
panositi Feb 20, 2024
eed3c64
#128: Sort recommendations by risk vector (summarized risk vector is …
kenmeacham Feb 20, 2024
01d0e66
#128: Recommendations style improvements
kenmeacham Feb 21, 2024
ce24190
#128: Refactor renderControlStrategy to extract out renderControlSet,…
kenmeacham Feb 23, 2024
3e6432d
#128: Minor improvements
kenmeacham Feb 23, 2024
b4cd4f1
#128: Modify updateControls method to allow setting of workInProgress…
kenmeacham Feb 27, 2024
28ec683
#128: Fix updateControls call
kenmeacham Feb 27, 2024
6057b6d
#128: Add checkbox to select all controls for a recommendation
kenmeacham Feb 27, 2024
b6f567c
#128: Fix ambiguous spacing
kenmeacham Feb 27, 2024
7f7fd43
#128: Fix sorting of recommendations so lowest risk vector is at the …
kenmeacham Feb 28, 2024
16fb9ea
#128: Fix numbering of recommendations
kenmeacham Feb 28, 2024
0083ad3
#67 updates on algorthim, refactoring
panositi Feb 28, 2024
e04601b
Made Validator class add isFutureRisk and isCurrentRisk properties to…
mike1813 Feb 28, 2024
045a742
#67 fix modelController recommendation endpoint changes
panositi Feb 28, 2024
28257e1
Merge branch '67-add-control-strategy-recommendations' of github.com:…
panositi Feb 28, 2024
94a5eb4
Primarily adjusts the success/failure conditions in the recommendatio…
scp93ch Feb 29, 2024
dba778c
#128: Remove shortened risk vector text. Replace with tooltip display…
kenmeacham Feb 29, 2024
efbe5de
#128: Remove "Current risk", as this can become out-of-date
kenmeacham Feb 29, 2024
4975495
#67 fix unit tests, update checkMisbehaviourList
panositi Feb 29, 2024
79b9e57
#128: Remove risk vector as tooltip and display inline instead
kenmeacham Feb 29, 2024
d8eed44
#128: Remove redundant code
kenmeacham Feb 29, 2024
3cb0669
#128: Add "(beta)" to title
kenmeacham Feb 29, 2024
9a9a261
#128: Update text for controls and CSGs
kenmeacham Feb 29, 2024
65381d6
#128: Add Apply button for recommendation
kenmeacham Feb 29, 2024
6c9586c
#128: Set the updating controls in the state, to enable spinners to w…
kenmeacham Mar 4, 2024
de9c83e
#128: Add tooltip to Apply button
kenmeacham Mar 5, 2024
200ec84
Merge pull request #135 from Spyderisk/128-adv-recommendations-display
kenmeacham Mar 5, 2024
d89d5f6
#128: Quick fix to set acceptableRiskLevel in recommendations call
kenmeacham Mar 5, 2024
23319d7
#67 fixing a bug not checking empty targetMS
panositi Mar 5, 2024
e088f18
#67 fixing targetMS == null issue at RecommendationsAlgorithConfig co…
panositi Mar 5, 2024
1e1ddca
#128: Configure ACCEPTABLE_RISK_LEVEL in constants.js
kenmeacham Mar 5, 2024
a939e82
#128, Fix sorting of CSGs in recommendation
kenmeacham Mar 6, 2024
f3f91c8
#128: Remove unnecessary return statement
kenmeacham Mar 6, 2024
0cf2b85
#128: Restrict display to a max number of recommendations (configurable)
kenmeacham Mar 7, 2024
8866e0a
#128: Add recommendations button in Attack Path Threats section of Co…
kenmeacham Mar 7, 2024
4deff40
#128: Add "work in progress" to title and put disclaimer at top of th…
kenmeacham Mar 7, 2024
2ac9267
#128: Add summary of number of returned recommendations at top
kenmeacham Mar 7, 2024
eca4ffc
Fixes error caused by there being a button inside a button (#128)
scp93ch Mar 11, 2024
39863d6
Simplifies code (#128)
scp93ch Mar 11, 2024
15c75f9
Fixes bug whereby recommendations button was wrongly disabled (#128)
scp93ch Mar 11, 2024
b6b45e8
#128: Add abortRecommendations method / endpoint. TODO: modify when A…
kenmeacham Mar 12, 2024
b53dff7
#128: Add AbortRecommendationsModal which pops up after Esc key is pr…
kenmeacham Mar 12, 2024
a4d0102
#128: Minor fix
kenmeacham Mar 12, 2024
0c6cde5
#128: Small improvement to close abort dialog automatically if recomm…
kenmeacham Mar 12, 2024
fdc9526
implement basic recommendation task cancelling mechanism
panositi Mar 13, 2024
bc5afb6
Merge branch 'interrupt-task' into 145-recommendation-task-cancelling
panositi Mar 13, 2024
4089b6e
#145 simple task signaling via job status
panositi Mar 13, 2024
a634cc6
Merge pull request #144 from Spyderisk/128-ui-cancel-recommendations
kenmeacham Mar 13, 2024
ea7a807
Merge branch '67-add-control-strategy-recommendations' into 145-recom…
kenmeacham Mar 13, 2024
e571f6a
#145: Fix endpoint for cancel recommendations and made it POST
kenmeacham Mar 13, 2024
6018d19
#145: Comment out code that prevents final result being downloaded af…
kenmeacham Mar 13, 2024
7d3cac2
#145: Add jobId to abortRecommendations
kenmeacham Mar 13, 2024
5e73b94
#145: Update progress to "Cancelling" when /cancel is called
kenmeacham Mar 13, 2024
6e91a90
#145: Call pollRecommendationsProgress immediately after abort, to ge…
kenmeacham Mar 13, 2024
2171ffd
#145 fixing interrupted exceptions
panositi Mar 14, 2024
23cfdce
#145 fix merge
panositi Mar 14, 2024
4353bfe
#145: Fix bug in checkRecJobStatus that was setting status to ABORTED
kenmeacham Mar 14, 2024
5fb8abd
#145: Remove cancelTask, which was unused
kenmeacham Mar 14, 2024
127ce59
#145: Remove redundant calculateRecommendationsBlocking method and as…
kenmeacham Mar 14, 2024
b4a20a1
#145: Fix async recommendations test. Should use POST for /cancel and…
kenmeacham Mar 14, 2024
325717c
#145 refactor job state and status
panositi Mar 15, 2024
93b32ce
#145 change RecommendationJobDTO to return state and message
panositi Mar 15, 2024
ad543de
#145 fix previously merged issues for ModelController
panositi Mar 15, 2024
a7d51e4
#145 allow recommendaitons algorithm to run also without jobId
panositi Mar 15, 2024
3a3762f
#145: Set systemmodeller logging level to debug
kenmeacham Mar 15, 2024
d9c8e79
#145: Add extra text "Esc to cancel" during recommendations
kenmeacham Mar 26, 2024
fbd5648
#145: Set recommendations.timeout.secs=900 (15 mins) in application.p…
kenmeacham Mar 28, 2024
08cdcb0
#145: Implement recommendations timeout
kenmeacham Mar 28, 2024
9e28779
Merge pull request #155 from Spyderisk/145-recomm-timeout
kenmeacham Apr 15, 2024
87b5d8b
Merge pull request #146 from Spyderisk/145-recommendation-task-cancel…
kenmeacham Apr 15, 2024
67349bf
#67: Fix bug in applyCSGs; compareTo should not check specific value
kenmeacham Apr 15, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,15 @@
/////////////////////////////////////////////////////////////////////////
package uk.ac.soton.itinnovation.security.model.system;

import java.util.Objects;
import uk.ac.soton.itinnovation.security.model.Level;

public class RiskLevelCount {
public class RiskLevelCount implements Comparable<RiskLevelCount> {

private Level level;

private int count;

public RiskLevelCount() {
}

Expand All @@ -50,6 +51,30 @@ public int getCount() {
public void setCount(int count) {
this.count = count;
}



@Override
public int compareTo(RiskLevelCount other) {
// Compare levels first
int levelComparison = this.level.compareTo(other.level);
if (levelComparison != 0) {
return levelComparison;
}

// If levels are equal, compare counts
return Integer.compare(this.count, other.count);
}

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
RiskLevelCount that = (RiskLevelCount) obj;
return count == that.count && Objects.equals(level, that.level);
}

@Override
public int hashCode() {
return Objects.hash(level, count);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,55 +25,127 @@
package uk.ac.soton.itinnovation.security.model.system;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

import uk.ac.soton.itinnovation.security.model.Level;

public class RiskVector {

private Map<String, RiskLevelCount> riskVector;

public RiskVector(Collection<Level> riskLevels, Map<String, Integer> riskLevelCounts) {
riskVector = new HashMap<>();

//For each defined risk level, get the count of misbehaviours at this level
for (Level riskLevel : riskLevels) {
RiskLevelCount riskLevelCount = new RiskLevelCount();
riskLevelCount.setLevel(riskLevel);
Integer count = riskLevelCounts.get(riskLevel.getUri());
riskLevelCount.setCount(count);
riskVector.put(riskLevel.getUri(), riskLevelCount);
}
}

public Map<String, RiskLevelCount> getRiskVector() {
return riskVector;
}

public void setRiskVector(Map<String, RiskLevelCount> riskVector) {
this.riskVector = riskVector;
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();

sb.append("(");

Collection<RiskLevelCount> riskLevelCounts = riskVector.values();

for (RiskLevelCount riskLevelCount : riskLevelCounts) {
sb.append(riskLevelCount.getLevel().getLabel());
sb.append(": ");
sb.append(riskLevelCount.getCount());
sb.append(", ");
}

sb.setLength(sb.length() -2); //remove last comma

sb.append(")");

return sb.toString();
}
public class RiskVector implements Comparable<RiskVector> {

private Map<String, RiskLevelCount> riskV;
private Map<Integer, String> levelValueMap; // aux map for comparison

public RiskVector(Collection<Level> riskLevels, Map<String, Integer> riskLevelCounts) {
this.riskV = new HashMap<>();
this.levelValueMap = new HashMap<>();

//For each defined risk level, get the count of misbehaviours at this level
for (Level riskLevel : riskLevels) {
RiskLevelCount riskLevelCount = new RiskLevelCount();
riskLevelCount.setLevel(riskLevel);
Integer count = riskLevelCounts.get(riskLevel.getUri());
riskLevelCount.setCount(count);
riskV.put(riskLevel.getUri(), riskLevelCount);
levelValueMap.put(riskLevel.getValue(), riskLevel.getUri());
}
}

public Map<String, RiskLevelCount> getRiskVector() {
return riskV;
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();

sb.append("(");

// put the items from riskLevelCounts in a list
List<RiskLevelCount> riskLevelCounts = new ArrayList<>(riskV.values());

// sort the riskLevelCounts entries by the RiskLevelCount object's default sort
Collections.sort(riskLevelCounts);

for (RiskLevelCount riskLevelCount : riskLevelCounts) {
sb.append(riskLevelCount.getLevel().getLabel());
sb.append(": ");
sb.append(riskLevelCount.getCount());
sb.append(", ");
}

sb.setLength(sb.length() - 2); //remove last comma

sb.append(")");

return sb.toString();
}

public String getOverall() {
int overall = 0;
String uri = "";
for (Map.Entry<String, RiskLevelCount> entry : riskV.entrySet()) {
String riskLevelUri = entry.getValue().getLevel().getUri();
int riskLevelValue = entry.getValue().getLevel().getValue();
int riskCount = entry.getValue().getCount();
if (riskCount > 0 && riskLevelValue >= overall) {
overall = riskLevelValue;
uri = riskLevelUri;
}
}
return uri;
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
RiskVector other = (RiskVector) obj;
return Objects.equals(riskV, other.riskV);
}

@Override
public int hashCode() {
return Objects.hashCode(riskV);
}

@Override
public int compareTo(RiskVector other) {

List<Integer> sortedKeys = new ArrayList<>(levelValueMap.keySet());
Collections.sort(sortedKeys, Collections.reverseOrder());

// iterate based on the sorted keys
for (Integer key : sortedKeys) {
String riskLevelUri = levelValueMap.get(key);
RiskLevelCount thisRiskLevelCount = riskV.get(riskLevelUri);
RiskLevelCount otherRiskLevelCount = other.riskV.get(riskLevelUri);

if (thisRiskLevelCount == null && otherRiskLevelCount == null) {
continue; // Both are missing
}
if (thisRiskLevelCount == null) {
return -1; // This object is considered "less"
}
if (otherRiskLevelCount == null) {
return 1; // This object is considered "greater"
}

// Compare RiskLevelCount objects
int result = thisRiskLevelCount.compareTo(otherRiskLevelCount);
if (result != 0) {
return result;
}
}

// If all compared RiskLevelCount objects are equal, consider the RiskVectors equal
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,11 @@ public interface IQuerierDB {
*/
void repairAssertedAssetPopulations();
void repairCardinalityConstraints();
boolean updateAssertedLevel(LevelDB level, String twasURI, String model);
boolean updateAssertedLevel(LevelDB level, TrustworthinessAttributeSetDB twas, String model);
boolean updateCoverageLevel(LevelDB level, String csURI, String model);
boolean updateCoverageLevel(LevelDB level, ControlSetDB cs, String model);
boolean updateProposedStatus(Boolean status, String csURI, String model);
boolean updateProposedStatus(Boolean status, ControlSetDB cs, String model);

/**
Expand Down
Loading
Loading