001/*-------------------------------------------------------------------------+
002|                                                                          |
003| Copyright (c) 2005-2017 The ConQAT Project                               |
004|                                                                          |
005| Licensed under the Apache License, Version 2.0 (the "License");          |
006| you may not use this file except in compliance with the License.         |
007| You may obtain a copy of the License at                                  |
008|                                                                          |
009|    http://www.apache.org/licenses/LICENSE-2.0                            |
010|                                                                          |
011| Unless required by applicable law or agreed to in writing, software      |
012| distributed under the License is distributed on an "AS IS" BASIS,        |
013| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
014| See the License for the specific language governing permissions and      |
015| limitations under the License.                                           |
016|                                                                          |
017+-------------------------------------------------------------------------*/
018package org.conqat.engine.index.shared;
019
020import java.io.Serializable;
021import java.util.ArrayList;
022import java.util.Collection;
023import java.util.List;
024
025import org.conqat.lib.commons.js_export.ExportToJavaScript;
026
027import com.fasterxml.jackson.annotation.JsonCreator;
028import com.fasterxml.jackson.annotation.JsonProperty;
029
030/** Result object that wraps a list of added and removed findings */
031@ExportToJavaScript
032public class FindingDelta implements Serializable {
033
034        /** Version used for serialization. */
035        private static final long serialVersionUID = 1;
036
037        /** The name of the JSON property name for {@link #addedFindings}. */
038        private static final String ADDED_FINDINGS_PROPERTY = "addedFindings";
039
040        /** The name of the JSON property name for {@link #findingsInChangedCode}. */
041        private static final String FINDINGS_IN_CHANGED_CODE_PROPERTY = "findingsInChangedCode";
042
043        /** The name of the JSON property name for {@link #removedFindings}. */
044        private static final String REMOVED_FINDINGS_PROPERTY = "removedFindings";
045
046        /** The name of the JSON property name for {@link #findingSummary}. */
047        private static final String FINDING_SUMMARY_PROPERTY = "findingSummary";
048
049        /** The name of the JSON property name for {@link #numberOfAddedFindings}. */
050        private static final String NUMBER_OF_ADDED_FINDINGS_PROPERTY = "numberOfAddedFindings";
051
052        /**
053         * The name of the JSON property name for
054         * {@link #numberOfFindingsInChangedCode}.
055         */
056        private static final String NUMBER_OF_FINDINGS_IN_CHANGED_CODE_PROPERTY = "numberOfFindingsInChangedCode";
057
058        /** The name of the JSON property name for {@link #numberOfRemovedFindings}. */
059        private static final String NUMBER_OF_REMOVED_FINDINGS_PROPERTY = "numberOfRemovedFindings";
060
061        /** The added findings. */
062        @JsonProperty(ADDED_FINDINGS_PROPERTY)
063        private final List<TrackedFinding> addedFindings;
064
065        /** The findings in changed code. */
066        @JsonProperty(FINDINGS_IN_CHANGED_CODE_PROPERTY)
067        private final List<TrackedFinding> findingsInChangedCode;
068
069        /** The removed findings. */
070        @JsonProperty(REMOVED_FINDINGS_PROPERTY)
071        private final List<TrackedFinding> removedFindings;
072
073        /** The summary of the finding churn. */
074        @JsonProperty(FINDING_SUMMARY_PROPERTY)
075        private final List<FindingsSummaryCategoryInfo> findingSummary;
076
077        /**
078         * The number of added findings in the delta, regardless of any applied filters.
079         */
080        @JsonProperty(NUMBER_OF_ADDED_FINDINGS_PROPERTY)
081        private final int numberOfAddedFindings;
082
083        /** The number of findings in code changed since the delta, */
084        @JsonProperty(NUMBER_OF_FINDINGS_IN_CHANGED_CODE_PROPERTY)
085        private final int numberOfFindingsInChangedCode;
086
087        /**
088         * The number of removed findings in the delta, regardless of any applied
089         * filters.
090         */
091        @JsonProperty(NUMBER_OF_REMOVED_FINDINGS_PROPERTY)
092        private final int numberOfRemovedFindings;
093
094        public FindingDelta(Collection<TrackedFinding> addedFindings, Collection<TrackedFinding> findingsInChangedCode,
095                        Collection<TrackedFinding> removedFindings) {
096                this(addedFindings, findingsInChangedCode, removedFindings, addedFindings.size(), findingsInChangedCode.size(),
097                                removedFindings.size(), null);
098        }
099
100        @JsonCreator
101        public FindingDelta(@JsonProperty(ADDED_FINDINGS_PROPERTY) Collection<TrackedFinding> addedFindings,
102                        @JsonProperty(FINDINGS_IN_CHANGED_CODE_PROPERTY) Collection<TrackedFinding> findingsInChangedCode,
103                        @JsonProperty(REMOVED_FINDINGS_PROPERTY) Collection<TrackedFinding> removedFindings,
104                        @JsonProperty(NUMBER_OF_ADDED_FINDINGS_PROPERTY) int numberOfAddedFindings,
105                        @JsonProperty(NUMBER_OF_FINDINGS_IN_CHANGED_CODE_PROPERTY) int numberOfFindingsInChangedCode,
106                        @JsonProperty(NUMBER_OF_REMOVED_FINDINGS_PROPERTY) int numberOfRemovedFindings,
107                        @JsonProperty(FINDING_SUMMARY_PROPERTY) List<FindingsSummaryCategoryInfo> findingSummary) {
108                this.numberOfAddedFindings = numberOfAddedFindings;
109                this.numberOfFindingsInChangedCode = numberOfFindingsInChangedCode;
110                this.numberOfRemovedFindings = numberOfRemovedFindings;
111                this.addedFindings = new ArrayList<>(addedFindings);
112                this.findingsInChangedCode = new ArrayList<>(findingsInChangedCode);
113                this.removedFindings = new ArrayList<>(removedFindings);
114                this.findingSummary = findingSummary;
115        }
116
117        /** Returns addedFindings. */
118        public List<TrackedFinding> getAddedFindings() {
119                return addedFindings;
120        }
121
122        /** Returns findingsInChangedCode. */
123        public List<TrackedFinding> getFindingsInChangedCode() {
124                return findingsInChangedCode;
125        }
126
127        /** Returns removedFindings. */
128        public List<TrackedFinding> getRemovedFindings() {
129                return removedFindings;
130        }
131
132        /** Returns findingSummary. */
133        public List<FindingsSummaryCategoryInfo> getFindingSummary() {
134                return findingSummary;
135        }
136
137        /** Returns numberOfAddedFindings. */
138        public int getNumberOfAddedFindings() {
139                return numberOfAddedFindings;
140        }
141
142        /** Returns numberOfFindingsInChangedCode. */
143        public int getNumberOfFindingsInChangedCode() {
144                return numberOfFindingsInChangedCode;
145        }
146
147        /** Returns numberOfRemovedFindings. */
148        public int getNumberOfRemovedFindings() {
149                return numberOfRemovedFindings;
150        }
151}