Projekt

Obecné

Profil

« Předchozí | Další » 

Revize bc1cb4b3

Přidáno uživatelem stepanekp před asi 3 roky(ů)

#14 Unused parts of code removed

Zobrazit rozdíly:

src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/controller/AppController.java
173 173
        return "result";
174 174
    }
175 175

  
176
    /**
177
     * Method for recalculating the results after a configuration change.
178
     *
179
     * @param model object for passing data to the UI
180
     * @return html file name for thymeleaf template
181
     */
182
    @GetMapping("/recalculate")
183
    public String recalculateGet(Model model) {
184
        return analyzeGet(model);
185
    }
186

  
187
    /**
188
     * Method for recalculating the results after a configuration change.
189
     *
190
     * @param model object for passing data to the UI
191
     * @return html file name for thymeleaf template
192
     */
193
    @PostMapping("/recalculate")
194
    public String resultRecalculate(Model model) {
195

  
196
        List<QueryResult> results = antiPatternManager.analyze(antiPatternService.getAnalyzedProjects(),
197
                antiPatternService.getAnalyzedAntiPatterns(), null);
198

  
199
        antiPatternService.saveResults(results);
200
        antiPatternService.setConfigurationChanged(false);
201

  
202
        model.addAttribute("queryResults", results);
203
        model.addAttribute("recalculationTime", DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalTime.now()));
204
        return "result";
205
    }
206

  
207 176
    /**
208 177
     * Method for showing about page.
209 178
     *
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/detecting/detectors/BusinessAsUsualDetectorImpl.java
29 29
    private List<String> sqlQueries;
30 30

  
31 31
    private float getDivisionOfIterationsWithRetrospective(Map<String, String> thresholds) {
32
        if(thresholds != null)
33
            return new Percentage(Float.parseFloat(thresholds.get("divisionOfIterationsWithRetrospective"))).getValue();
34

  
35
        return ((Percentage) antiPattern.getThresholds().get("divisionOfIterationsWithRetrospective").getValue()).getValue();
32
        return new Percentage(Float.parseFloat(thresholds.get("divisionOfIterationsWithRetrospective"))).getValue();
36 33
    }
37 34

  
38 35
    private List<String> getSearchSubstringsWithRetrospective(Map<String, String> thresholds) {
39
        if(thresholds != null)
40
            return Arrays.asList(thresholds.get("searchSubstringsWithRetrospective").split("\\|\\|"));
41

  
42
        return Arrays.asList(((String) antiPattern.getThresholds().get("searchSubstringsWithRetrospective").getValue()).split("\\|\\|"));
36
        return Arrays.asList(thresholds.get("searchSubstringsWithRetrospective").split("\\|\\|"));
43 37
    }
44 38

  
45 39
    @Override
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/detecting/detectors/LongOrNonExistentFeedbackLoopsDetectorImpl.java
36 36
    private List<String> sqlQueries;
37 37

  
38 38
    private float getDivisionOfIterationsWithFeedbackLoop(Map<String, String> thresholds) {
39
        if(thresholds != null)
40
            return new Percentage(Float.parseFloat(thresholds.get("divisionOfIterationsWithFeedbackLoop"))).getValue();
41

  
42
        return ((Percentage) antiPattern.getThresholds().get("divisionOfIterationsWithFeedbackLoop").getValue()).getValue();
39
        return new Percentage(Float.parseFloat(thresholds.get("divisionOfIterationsWithFeedbackLoop"))).getValue();
43 40
    }
44 41

  
45 42
    private float getMaxGapBetweenFeedbackLoopRate(Map<String, String> thresholds) {
46
        if(thresholds != null)
47
            return new PositiveFloat(Float.parseFloat(thresholds.get("maxGapBetweenFeedbackLoopRate"))).floatValue();
48

  
49
        return ((PositiveFloat) antiPattern.getThresholds().get("maxGapBetweenFeedbackLoopRate").getValue()).floatValue();
43
        return new PositiveFloat(Float.parseFloat(thresholds.get("maxGapBetweenFeedbackLoopRate"))).floatValue();
50 44
    }
51 45

  
52 46
    private List<String> getSearchSubstringsWithFeedbackLoop(Map<String, String> thresholds) {
53
        if(thresholds != null)
54
            return Arrays.asList(thresholds.get("searchSubstringsWithFeedbackLoop").split("\\|\\|"));
55

  
56
        return Arrays.asList(((String) antiPattern.getThresholds().get("searchSubstringsWithFeedbackLoop").getValue()).split("\\|\\|"));
47
        return Arrays.asList(thresholds.get("searchSubstringsWithFeedbackLoop").split("\\|\\|"));
57 48
    }
58 49

  
59 50
    @Override
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/detecting/detectors/NinetyNinetyRuleDetectorImpl.java
28 28
    private List<String> sqlQueries;
29 29

  
30 30
    private double getMaxDivisionRange(Map<String, String> thresholds) {
31
        if(thresholds != null)
32
            return new PositiveFloat(Float.parseFloat(thresholds.get("maxDivisionRange"))).floatValue();
33

  
34
        return ((PositiveFloat) antiPattern.getThresholds().get("maxDivisionRange").getValue()).doubleValue();
31
        return new PositiveFloat(Float.parseFloat(thresholds.get("maxDivisionRange"))).floatValue();
35 32
    }
36 33

  
37 34
    private int getMaxBadDivisionLimit(Map<String, String> thresholds) {
38
        if(thresholds != null)
39
            return new PositiveInteger(Integer.parseInt(thresholds.get("maxBadDivisionLimit"))).intValue();
40

  
41
        return ((PositiveInteger) antiPattern.getThresholds().get("maxBadDivisionLimit").getValue()).intValue();
35
        return new PositiveInteger(Integer.parseInt(thresholds.get("maxBadDivisionLimit"))).intValue();
42 36
    }
43 37

  
44 38
    @Override
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/detecting/detectors/RoadToNowhereDetectorImpl.java
38 38
    private List<String> sqlQueries;
39 39

  
40 40
    private int getMinNumberOfWikiPagesWithProjectPlan(Map<String, String> thresholds) {
41
        if(thresholds != null)
42
            return new PositiveInteger(Integer.parseInt(thresholds.get("minNumberOfWikiPagesWithProjectPlan"))).intValue();
43

  
44
        return ((PositiveInteger) antiPattern.getThresholds().get("minNumberOfWikiPagesWithProjectPlan").getValue()).intValue();
41
        return new PositiveInteger(Integer.parseInt(thresholds.get("minNumberOfWikiPagesWithProjectPlan"))).intValue();
45 42
    }
46 43

  
47 44
    private int getMinNumberOfActivitiesWithProjectPlan(Map<String, String> thresholds) {
48
        if(thresholds != null)
49
            return new PositiveInteger(Integer.parseInt(thresholds.get("minNumberOfActivitiesWithProjectPlan"))).intValue();
50

  
51
        return ((PositiveInteger) antiPattern.getThresholds().get("minNumberOfActivitiesWithProjectPlan").getValue()).intValue();
45
        return new PositiveInteger(Integer.parseInt(thresholds.get("minNumberOfActivitiesWithProjectPlan"))).intValue();
52 46
    }
53 47

  
54 48
    private List<String> getSearchSubstringsWithProjectPlan(Map<String, String> thresholds) {
55
        if(thresholds != null)
56
            return Arrays.asList(thresholds.get("searchSubstringsWithProjectPlan").split("\\|\\|"));
57

  
58
        return Arrays.asList(((String) antiPattern.getThresholds().get("searchSubstringsWithProjectPlan").getValue()).split("\\|\\|"));
49
        return Arrays.asList(thresholds.get("searchSubstringsWithProjectPlan").split("\\|\\|"));
59 50
    }
60 51

  
61 52
    @Override
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/detecting/detectors/SpecifyNothingDetectorImpl.java
35 35
    private List<String> sqlQueries;
36 36

  
37 37
    private int getMinNumberOfWikiPagesWithSpecification(Map<String, String> thresholds) {
38
        if(thresholds != null)
39
            return new PositiveInteger(Integer.parseInt(thresholds.get("minNumberOfWikiPagesWithSpecification"))).intValue();
40

  
41
        return ((PositiveInteger) antiPattern.getThresholds().get("minNumberOfWikiPagesWithSpecification").getValue()).intValue();
38
        return new PositiveInteger(Integer.parseInt(thresholds.get("minNumberOfWikiPagesWithSpecification"))).intValue();
42 39
    }
43 40

  
44 41
    private int getMinNumberOfActivitiesWithSpecification(Map<String, String> thresholds) {
45
        if(thresholds != null)
46
            return new PositiveInteger(Integer.parseInt(thresholds.get("minNumberOfActivitiesWithSpecification"))).intValue();
47

  
48
        return ((PositiveInteger) antiPattern.getThresholds().get("minNumberOfActivitiesWithSpecification").getValue()).intValue();
42
        return new PositiveInteger(Integer.parseInt(thresholds.get("minNumberOfActivitiesWithSpecification"))).intValue();
49 43
    }
50 44

  
51 45
    private int getMinAvgLengthOfActivityDescription(Map<String, String> thresholds) {
52
        if(thresholds != null)
53
            return new PositiveInteger(Integer.parseInt(thresholds.get("minAvgLengthOfActivityDescription"))).intValue();
54

  
55
        return ((PositiveInteger) antiPattern.getThresholds().get("minAvgLengthOfActivityDescription").getValue()).intValue();
46
        return new PositiveInteger(Integer.parseInt(thresholds.get("minAvgLengthOfActivityDescription"))).intValue();
56 47
    }
57 48

  
58 49
    private List<String> getSearchSubstringsWithProjectSpecification(Map<String, String> thresholds) {
59
        if(thresholds != null)
60
            return Arrays.asList(thresholds.get("searchSubstringsWithProjectSpecification").split("\\|\\|"));
61

  
62
        return Arrays.asList(((String) antiPattern.getThresholds().get("searchSubstringsWithProjectSpecification").getValue()).split("\\|\\|"));
50
        return Arrays.asList(thresholds.get("searchSubstringsWithProjectSpecification").split("\\|\\|"));
63 51
    }
64 52

  
65 53
    @Override
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/detecting/detectors/TooLongSprintDetectorImpl.java
54 54
    }
55 55

  
56 56
    private Integer getMaxIterationLength(Map<String, String> thresholds) {
57
        if(thresholds != null)
58
            return new PositiveInteger(Integer.parseInt(thresholds.get("maxIterationLength"))).intValue();
59

  
60
        return ((PositiveInteger) this.antiPattern.getThresholds().get("maxIterationLength").getValue()).intValue();
57
        return new PositiveInteger(Integer.parseInt(thresholds.get("maxIterationLength"))).intValue();
61 58
    }
62 59

  
63 60
    private Integer getMaxNumberOfTooLongIterations(Map<String, String> thresholds) {
64
        if(thresholds != null)
65
            return new PositiveInteger(Integer.parseInt(thresholds.get("maxNumberOfTooLongIterations"))).intValue();
66

  
67
        return ((PositiveInteger) this.antiPattern.getThresholds().get("maxNumberOfTooLongIterations").getValue()).intValue();
61
        return new PositiveInteger(Integer.parseInt(thresholds.get("maxNumberOfTooLongIterations"))).intValue();
68 62
    }
69 63

  
70 64
    /**
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/detecting/detectors/VaryingSprintLengthDetectorImpl.java
33 33
    private List<String> sqlQueries;
34 34

  
35 35
    private Integer getMaxDaysDifference(Map<String, String> thresholds) {
36
        if(thresholds != null)
37
            return new PositiveInteger(Integer.parseInt(thresholds.get("maxDaysDifference"))).intValue();
38

  
39
        return ((PositiveInteger) this.antiPattern.getThresholds().get("maxDaysDifference").getValue()).intValue();
36
        return new PositiveInteger(Integer.parseInt(thresholds.get("maxDaysDifference"))).intValue();
40 37
    }
41 38

  
42 39
    private Integer getMaxIterationChanged(Map<String, String> thresholds) {
43
        if(thresholds != null)
44
            return new PositiveInteger(Integer.parseInt(thresholds.get("maxIterationChanged"))).intValue();
45

  
46
        return ((PositiveInteger) this.antiPattern.getThresholds().get("maxIterationChanged").getValue()).intValue();
40
        return new PositiveInteger(Integer.parseInt(thresholds.get("maxIterationChanged"))).intValue();
47 41
    }
48 42

  
49 43
    @Override
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/model/Threshold.java
2 2

  
3 3
/**
4 4
 * Model class for threshold.
5
 * @param <T> threshold can have different data types
6 5
 */
7
public class Threshold<T> {
6
public class Threshold {
8 7
    private String name;
9 8
    private String printName;
10 9
    private String description;
11 10
    private String errorMessage;
11
    private String type;
12 12
    private boolean isErrorMessageShown;
13
    private T value;
14 13

  
15
    public Threshold(String name, String printName, String description, T value) {
14
    public Threshold(String name, String printName, String description) {
16 15
        this.name = name;
17 16
        this.printName = printName;
18 17
        this.description = description;
19
        this.value = value;
20 18
        this.isErrorMessageShown = false;
21 19
    }
22 20

  
23
    public Threshold(String name, String printName, String description, String errorMessage, T value) {
21
    public Threshold(String name, String printName, String description, String errorMessage, String type) {
24 22
        this.name = name;
25 23
        this.printName = printName;
26 24
        this.description = description;
27 25
        this.errorMessage = errorMessage;
28
        this.value = value;
26
        this.type = type;
29 27
        this.isErrorMessageShown = false;
30 28
    }
31 29

  
......
53 51
        this.description = description;
54 52
    }
55 53

  
56
    public T getValue() {
57
        return value;
58
    }
59

  
60
    public void setValue(T value) {
61
        this.value = value;
62
    }
63

  
64 54
    public String getErrorMessage() {
65 55
        return errorMessage;
66 56
    }
......
69 59
        this.errorMessage = errorMessage;
70 60
    }
71 61

  
62
    public String getType() {
63
        return type;
64
    }
65

  
66
    public void setType(String type) {
67
        this.type = type;
68
    }
69

  
72 70
    public boolean isErrorMessageShown() {
73 71
        return isErrorMessageShown;
74 72
    }
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/repository/AntiPatternRepository.java
168 168
        Map<String, Threshold> APMap = new HashMap<>();
169 169

  
170 170
        JsonNode array = node.get("thresholds");
171
        Threshold<?> tmpThreshold = null;
171
        Threshold tmpThreshold = null;
172 172

  
173 173
        for(int i = 0; i < array.size(); i++){
174 174
            JsonNode tmpNode = array.get(i);
......
182 182
            String tThresholdPrintName = thresholdNode.get("thresholdPrintName").asText();
183 183
            String tThresholdDescription = thresholdNode.get("thresholdDescription").asText();
184 184
            String tThresholdErrorMess = thresholdNode.get("thresholdErrorMess").asText();
185
            String tThresholdValue = thresholdNode.get("thresholdValue").asText();
186 185

  
187
            tmpThreshold = getThreshold(thresholdType, tThresholdName, tThresholdPrintName, tThresholdDescription, tThresholdErrorMess, tThresholdValue);
186
            tmpThreshold = getThreshold(thresholdType, tThresholdName, tThresholdPrintName, tThresholdDescription, tThresholdErrorMess);
188 187

  
189 188
            APMap.put(thresholdName, tmpThreshold);
190 189
        }
......
220 219
     * @param printName
221 220
     * @param description
222 221
     * @param errorMessage
223
     * @param value
224 222
     * @return
225 223
     */
226
    private Threshold<?> getThreshold(String thresholdType, String name, String printName, String description, String errorMessage, String value){
224
    private Threshold getThreshold(String thresholdType, String name, String printName, String description, String errorMessage){
227 225

  
228
        if(thresholdType.equals("Percentage")){
229
            return new Threshold<>(name, printName, description, errorMessage, new Percentage(Float.parseFloat(value)));
230
        }
231
        else if(thresholdType.equals("PositiveFloat")){
232
            return new Threshold<>(name, printName, description, errorMessage, new PositiveFloat(Float.parseFloat(value)));
233
        }
234
        else if(thresholdType.equals("PositiveInteger")){
235
            return new Threshold<>(name, printName, description, errorMessage, new PositiveInteger(Integer.parseInt(value)));
236
        }
237
        else if(thresholdType.equals("String")){
238
            return new Threshold<>(name, printName, description, errorMessage, value);
226
        if(thresholdType.equals("Percentage") || thresholdType.equals("PositiveFloat") || thresholdType.equals("PositiveInteger") || thresholdType.equals("String")){
227
            return new Threshold(name, printName, description, errorMessage, thresholdType);
239 228
        }
240 229

  
241 230
        return null;
src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/service/ConfigurationServiceImpl.java
58 58

  
59 59
            for(int i = 0; i < thresholdNames.length; i++){
60 60
                if(antiPattern.getThresholds().containsKey(thresholdNames[i])){
61
                    if(antiPattern.getThresholds().get(thresholdNames[i]).getValue().getClass() == Integer.class){
61
                    if(antiPattern.getThresholds().get(thresholdNames[i]).getType().equals("Integer")){
62 62
                        try {
63 63
                            Integer.parseInt(thresholdValues[i]);
64 64
                        }
......
66 66
                            incorrectParameters.add(thresholdNames[i]);
67 67
                        }
68 68
                    }
69
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getValue().getClass() == Percentage.class){
69
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getType().equals("Percentage")){
70 70
                        try {
71 71
                            Percentage.parsePercentage(thresholdValues[i]);
72 72
                        }
......
74 74
                            incorrectParameters.add(thresholdNames[i]);
75 75
                        }
76 76
                    }
77
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getValue().getClass() == PositiveInteger.class){
77
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getType().equals("PositiveInteger")){
78 78
                        try {
79 79
                            PositiveInteger.parsePositiveInteger(thresholdValues[i]);
80 80
                        }
......
82 82
                            incorrectParameters.add(thresholdNames[i]);
83 83
                        }
84 84
                    }
85
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getValue().getClass() == PositiveFloat.class){
85
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getType().equals("PositiveFloat")){
86 86
                        try {
87 87
                            PositiveFloat.parsePositiveFloat(thresholdValues[i]);
88 88
                        }
......
90 90
                            incorrectParameters.add(thresholdNames[i]);
91 91
                        }
92 92
                    }
93
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getValue().getClass() == Float.class){
93
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getType().equals("Float")){
94 94
                        try {
95 95
                            Float.parseFloat(thresholdValues[i]);
96 96
                        }
......
98 98
                            incorrectParameters.add(thresholdNames[i]);
99 99
                        }
100 100
                    }
101
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getValue().getClass() == Double.class){
101
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getType().equals("Double")){
102 102
                        try {
103 103
                            Double.parseDouble(thresholdValues[i]);
104 104
                        }
......
106 106
                            incorrectParameters.add(thresholdNames[i]);
107 107
                        }
108 108
                    }
109
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getValue().getClass() == String.class){
109
                    else if(antiPattern.getThresholds().get(thresholdNames[i]).getType().equals("String")){
110 110
                        if (Utils.checkStringSubstrings(thresholdValues[i]) == false) {
111 111
                            incorrectParameters.add(thresholdNames[i]);
112 112
                        }
src/main/webapp/WEB-INF/templates/result.html
17 17

  
18 18
<!-- Result table container -->
19 19
<div class="container">
20
    <!-- Container for show success message -->
21
    <div class="container">
22
        <div th:if="${isConfigurationChanged}" class="alert alert-warning" role="alert">
23
            Configuration values have changed! Would you like to
24
            <form action="#" th:action="@{/recalculate}" method="post" style="display: inline-block">
25
                <button type="submit"
26
                        style="display: inline-block;background-color: #FEF3CD; color: #167AF6; text-decoration: underline;">
27
                    recalculate
28
                </button>
29
            </form>
30
            the results?
31
        </div>
32
    </div>
33
    <!-- ./Container for show success message -->
34 20
    <h1>Results</h1>
35 21
    <table class="table table-bordered table-hover">
36 22
        <!-- Result table header -->
src/main/webapp/antipatterns/BusinessAsUsual.json
11 11
                "thresholdName": "divisionOfIterationsWithRetrospective",
12 12
                "thresholdPrintName": "Division of iterations with retrospective",
13 13
                "thresholdDescription": "Minimum percentage of the total number of iterations with a retrospective (0,100)",
14
                "thresholdErrorMess": "Percentage must be float number between 0 and 100",
15
                "thresholdValue": "66.66f"
14
                "thresholdErrorMess": "Percentage must be float number between 0 and 100"
16 15
            }
17 16
        },
18 17
        {
......
22 21
                "thresholdName": "searchSubstringsWithRetrospective",
23 22
                "thresholdPrintName": "Search substrings with retrospective",
24 23
                "thresholdDescription": "Substring that will be search in wikipages and activities",
25
                "thresholdErrorMess": "Maximum number of substrings is ten and must not starts and ends with characters || ",
26
                "thresholdValue": "%retr%||%revi%||%week%scrum%"
24
                "thresholdErrorMess": "Maximum number of substrings is ten and must not starts and ends with characters || "
27 25
            }
28 26
        }
29 27
    ],
src/main/webapp/antipatterns/LongOrNonExistentFeedbackLoops.json
11 11
                "thresholdName": "divisionOfIterationsWithFeedbackLoop",
12 12
                "thresholdPrintName": "Division of iterations with feedback loop",
13 13
                "thresholdDescription": "Minimum percentage of the total number of iterations with feedback loop (0,100)",
14
                "thresholdErrorMess": "Percentage must be float number between 0 and 100",
15
                "thresholdValue": "50.00f"
14
                "thresholdErrorMess": "Percentage must be float number between 0 and 100"
16 15
            }
17 16
        },
18 17
        {
......
22 21
                "thresholdName": "maxGapBetweenFeedbackLoopRate",
23 22
                "thresholdPrintName": "Maximum gap between feedback loop rate",
24 23
                "thresholdDescription": "Value that multiplies average iteration length for given project. Result is maximum threshold value for gap between feedback loops in days.",
25
                "thresholdErrorMess": "Maximum gap between feedback loop rate must be positive float number",
26
                "thresholdValue": "2f"
24
                "thresholdErrorMess": "Maximum gap between feedback loop rate must be positive float number"
27 25
            }
28 26
        },
29 27
        {
......
33 31
                "thresholdName": "searchSubstringsWithFeedbackLoop",
34 32
                "thresholdPrintName": "Search substrings with feedback loop",
35 33
                "thresholdDescription": "Substring that will be search in wikipages and activities",
36
                "thresholdErrorMess": "Maximum number of substrings is ten and must not starts and ends with characters ||",
37
                "thresholdValue": "%schůz%zákazník%||%předvedení%zákazník%||%zákazn%demo%||%schůz%zadavat%||%inform%schůz%||%zákazn%||%zadavatel%"
34
                "thresholdErrorMess": "Maximum number of substrings is ten and must not starts and ends with characters ||"
38 35
            }
39 36
        }
40 37
    ]
src/main/webapp/antipatterns/NinetyNinetyRule.json
11 11
                "thresholdName": "maxDivisionRange",
12 12
                "thresholdPrintName": "Maximum ration value",
13 13
                "thresholdDescription": "Maximum ratio value of spent and estimated time",
14
                "thresholdErrorMess": "Ration values must be positive float number",
15
                "thresholdValue": "1.25f"
14
                "thresholdErrorMess": "Ration values must be positive float number"
16 15
            }
17 16
        },
18 17
        {
......
22 21
                "thresholdName": "maxBadDivisionLimit",
23 22
                "thresholdPrintName": "Maximum iterations thresholds",
24 23
                "thresholdDescription": "Maximum number of consecutive iterations where the thresholds were exceeded",
25
                "thresholdErrorMess": "Maximum number of consecutive iterations must be positive integer number",
26
                "thresholdValue": "2"
24
                "thresholdErrorMess": "Maximum number of consecutive iterations must be positive integer number"
27 25
            }
28 26
        }
29 27
    ]
src/main/webapp/antipatterns/RoadToNowhere.json
11 11
                "thresholdName": "minNumberOfWikiPagesWithProjectPlan",
12 12
                "thresholdPrintName": "Minimum number of wiki pages with project plan",
13 13
                "thresholdDescription": "Number of wiki pages",
14
                "thresholdErrorMess": "Minimum number of wikipages must be positive integer number",
15
                "thresholdValue": "1"
14
                "thresholdErrorMess": "Minimum number of wikipages must be positive integer number"
16 15
            }
17 16
        },
18 17
        {
......
22 21
                "thresholdName": "minNumberOfActivitiesWithProjectPlan",
23 22
                "thresholdPrintName": "Minimum number of activities with project plan",
24 23
                "thresholdDescription": "Number of activities",
25
                "thresholdErrorMess": "Minimum number of activities must be positive integer number",
26
                "thresholdValue": "1"
24
                "thresholdErrorMess": "Minimum number of activities must be positive integer number"
27 25
            }
28 26
        },
29 27
        {
......
33 31
                "thresholdName": "searchSubstringsWithProjectPlan",
34 32
                "thresholdPrintName": "Search substrings with project plan",
35 33
                "thresholdDescription": "Substring that will be search in wikipages and activities",
36
                "thresholdErrorMess": "Maximum number of substrings is ten and must not starts and ends with characters ||",
37
                "thresholdValue": "%plán projektu%||%project plan%||%plan project%||%projektový plán%"
34
                "thresholdErrorMess": "Maximum number of substrings is ten and must not starts and ends with characters ||"
38 35
            }
39 36
        }
40 37
    ],
src/main/webapp/antipatterns/SpecifyNothing.json
11 11
                "thresholdName": "minNumberOfWikiPagesWithSpecification",
12 12
                "thresholdPrintName": "Minimum number of wiki pages with project specification",
13 13
                "thresholdDescription": "Number of wiki pages",
14
                "thresholdErrorMess": "Minimum number of wikipages must be positive integer number",
15
                "thresholdValue": "1"
14
                "thresholdErrorMess": "Minimum number of wikipages must be positive integer number"
16 15
            }
17 16
        },
18 17
        {
......
22 21
                "thresholdName": "minNumberOfActivitiesWithSpecification",
23 22
                "thresholdPrintName": "Minimum number of activities with project specification",
24 23
                "thresholdDescription": "Number of activities",
25
                "thresholdErrorMess": "Minimum number of activities with project specification must be positive integer number",
26
                "thresholdValue": "1"
24
                "thresholdErrorMess": "Minimum number of activities with project specification must be positive integer number"
27 25
            }
28 26
        },
29 27
        {
......
33 31
                "thresholdName": "minAvgLengthOfActivityDescription",
34 32
                "thresholdPrintName": "Minimum average length of activity description",
35 33
                "thresholdDescription": "Minimum average number of character of activity description",
36
                "thresholdErrorMess": "Minimum average length of activity description must be positive integer number",
37
                "thresholdValue": "150"
34
                "thresholdErrorMess": "Minimum average length of activity description must be positive integer number"
38 35
            }
39 36
        },
40 37
        {
......
44 41
                "thresholdName": "searchSubstringsWithProjectSpecification",
45 42
                "thresholdPrintName": "Search substrings with project specification",
46 43
                "thresholdDescription": "Substring that will be search in wikipages and activities",
47
                "thresholdErrorMess": "Maximum number of substrings is ten and must not starts and ends with characters ||",
48
                "thresholdValue": "%dsp%||%specifikace%||%specification%||%vize%proj%||%vize%produ%"
44
                "thresholdErrorMess": "Maximum number of substrings is ten and must not starts and ends with characters ||"
49 45
            }
50 46
        }
51 47
    ],
src/main/webapp/antipatterns/TooLongSprint.json
11 11
                "thresholdName": "maxIterationLength",
12 12
                "thresholdPrintName": "Max Iteration Length",
13 13
                "thresholdDescription": "Maximum iteration length in days",
14
                "thresholdErrorMess": "Max iteration length must be positive integer",
15
                "thresholdValue": "21"
14
                "thresholdErrorMess": "Max iteration length must be positive integer"
16 15
            }
17 16
        },
18 17
        {
......
22 21
                "thresholdName": "maxNumberOfTooLongIterations",
23 22
                "thresholdPrintName": "Max number of foo long iterations",
24 23
                "thresholdDescription": "Maximum number of too long iterations in project",
25
                "thresholdErrorMess": "Max number of too long iterations must be positive integer",
26
                "thresholdValue": "0"
24
                "thresholdErrorMess": "Max number of too long iterations must be positive integer"
27 25
            }
28 26
        }
29 27
    ]
src/main/webapp/antipatterns/VaryingSprintLength.json
11 11
                "thresholdName": "maxDaysDifference",
12 12
                "thresholdPrintName": "Max days difference",
13 13
                "thresholdDescription": "Maximum distance of two consecutive iterations in days",
14
                "thresholdErrorMess": "Maximum distance must be positive integer number",
15
                "thresholdValue": "7"
14
                "thresholdErrorMess": "Maximum distance must be positive integer number"
16 15
            }
17 16
        },
18 17
        {
......
22 21
                "thresholdName": "maxIterationChanged",
23 22
                "thresholdPrintName": "Max number of iteration changed",
24 23
                "thresholdDescription": "Maximum allowed number of significant changes in iteration lengths",
25
                "thresholdErrorMess": "Maximum number of iterations changed must be positive integer number",
26
                "thresholdValue": "1"
24
                "thresholdErrorMess": "Maximum number of iterations changed must be positive integer number"
27 25
            }
28 26
        }
29 27
    ]

Také k dispozici: Unified diff