From e6b423e4ad769947da70b335aa0a9dd0fb61c36a Mon Sep 17 00:00:00 2001 From: angel.avila2 Date: Wed, 5 Sep 2018 23:32:31 -0700 Subject: feature[ats_TW8428]: Add 'Analyze' state for certain resolution types Change-Id: I63c336e0a8622ce64ee06ff75604498161e9d6fa --- .../disposition/model/DispoAnnotationData.java | 9 ++++ .../osee/disposition/model/DispoStrings.java | 5 ++ .../DispositionTestSuite.launch | 4 +- .../disposition/rest/internal/DispoApiTest.java | 6 +-- .../rest/internal/DispoConnectorTest.java | 42 +++++++++++++++++ .../internal/DispoResolutionValidatorTest.java | 55 ++++++++++++++++++++++ .../rest/internal/InternalTestSuite.java | 6 ++- .../disposition/rest/internal/DispoApiImpl.java | 13 ++--- .../disposition/rest/internal/DispoConnector.java | 35 ++++++++++---- .../rest/internal/DispoResolutionValidator.java | 21 +++++++-- .../osee/disposition/rest/util/DispoUtil.java | 3 ++ 11 files changed, 170 insertions(+), 29 deletions(-) create mode 100644 plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoResolutionValidatorTest.java diff --git a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoAnnotationData.java b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoAnnotationData.java index 626a91d617e..24074077ca2 100644 --- a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoAnnotationData.java +++ b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoAnnotationData.java @@ -34,6 +34,7 @@ public class DispoAnnotationData implements Identifiable { private boolean isResolutionValid; private String resolutionType; private boolean isDefault; + private boolean isAnalyze; public DispoAnnotationData() { @@ -93,6 +94,10 @@ public class DispoAnnotationData implements Identifiable { return isDefault; } + public boolean getIsAnalyze() { + return isAnalyze; + } + public void setLocationRefs(String locationRefs) { this.locationRefs = locationRefs; } @@ -137,6 +142,10 @@ public class DispoAnnotationData implements Identifiable { this.isDefault = isDefault; } + public void setIsAnalyze(boolean isAnalyzed) { + this.isAnalyze = isAnalyzed; + } + public boolean isValid() { return (isConnected || isDefault) && isResolutionValid && isResolutionTypeValid(); } diff --git a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoStrings.java b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoStrings.java index 66cfa748de5..de07946094f 100644 --- a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoStrings.java +++ b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoStrings.java @@ -43,6 +43,7 @@ public class DispoStrings { public static final String Item_Pass = "PASS"; public static final String Item_Complete = "COMPLETE"; public static final String Item_InComplete = "INCOMPLETE"; + public static final String Item_Analyzed = "ANALYZED"; public static final String Operation_Import = "Import"; public static final String Operation_MassSendStatus = "MassSendDispoItemStatus"; @@ -64,4 +65,8 @@ public class DispoStrings { public static final String SCRIPT_NAME = "\t\t\t%s\n"; public static final String SCRIPT_PATH = "\t\t\t%s\n"; + public static final String ANALYZE_CODE = "Modify_Code"; + public static final String ANALYZE_TEST = "Modify_Test"; + public static final String ANALYZE_REQT = "Modify_Reqt"; + } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/DispositionTestSuite.launch b/plugins/org.eclipse.osee.disposition.rest.test/DispositionTestSuite.launch index 2e959376f9a..eda50fca5d3 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/DispositionTestSuite.launch +++ b/plugins/org.eclipse.osee.disposition.rest.test/DispositionTestSuite.launch @@ -1,8 +1,8 @@ - - + + diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoApiTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoApiTest.java index d62b94981a7..823f405901d 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoApiTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoApiTest.java @@ -45,7 +45,6 @@ import org.json.JSONArray; import org.json.JSONObject; import org.junit.Before; import org.junit.Test; -import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; @@ -297,7 +296,6 @@ public class DispoApiTest { // Only need to createUpdatedItem with updateStatus = True when annotation is valid and current status is INCOMPLETE annotationToCreate.setResolution("VALID"); when(dispoItem.getStatus()).thenReturn("COMPLETE"); - when(validator.validate(Matchers.any(DispoAnnotationData.class))).thenReturn(true); String acutal = dispoApi.createDispoAnnotation(branch, itemId.getGuid(), annotationToCreate, "name", false); assertEquals(expectedId, acutal); @@ -372,24 +370,22 @@ public class DispoApiTest { annotations.set(0, origAnnotation); // Now change Location Refs, disconnector should be called newAnnotation.setLocationRefs("1-10"); - when(validator.validate(Matchers.any(DispoAnnotationData.class))).thenReturn(false); actual = dispoApi.editDispoAnnotation(branch, itemId.getGuid(), expectedId, newAnnotation, "name", false); assertTrue(actual); annotations.set(0, origAnnotation); // reset the resolution and change just the resolution type, disconnector and should be called newAnnotation.setLocationRefs("5-10"); newAnnotation.setResolutionType("TEST"); - when(validator.validate(Matchers.any(DispoAnnotationData.class))).thenReturn(true); actual = dispoApi.editDispoAnnotation(branch, itemId.getGuid(), expectedId, newAnnotation, "name", false); assertTrue(actual); annotations.set(0, origAnnotation); // Reset resolution type, only change to resolution, disconnector is called newAnnotation.setResolutionType("CODE"); newAnnotation.setResolution("NEW"); - when(validator.validate(Matchers.any(DispoAnnotationData.class))).thenReturn(true); actual = dispoApi.editDispoAnnotation(branch, itemId.getGuid(), expectedId, newAnnotation, "name", false); assertTrue(actual); + verify(validator, times(2)).validate(newAnnotation); verify(dispoConnector, times(3)).connectAnnotation(any(DispoAnnotationData.class), eq(mockDiscrepancies)); } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoConnectorTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoConnectorTest.java index e14f6c01065..9cefe224edc 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoConnectorTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoConnectorTest.java @@ -113,6 +113,48 @@ public class DispoConnectorTest { assertEquals(DispoStrings.Item_Complete, actual); } + @Test + public void testConnectAnnotationsStringAnalyze() { + // Convert Location Refs to have characters + for (Discrepancy discrepancy : dispoItem.getDiscrepanciesList().values()) { + discrepancy.setLocation(discrepancy.getLocation() + "zzz"); + } + + int idsSize = 13; + // Create one annotation with every discrepancy covered + DispoAnnotationData annotationOne = new DispoAnnotationData(); + annotationOne.setLocationRefs("1zzz, 2zzz, 3zzz,4zzz,5zzz,12zzz,13zzz,14zzz,15zzz,16zzz,17zzz,18zzz,20zzz"); + annotationOne.setIsResolutionValid(true); + annotationOne.setResolutionType("Modify_Code"); + annotationOne.setIsAnalyze(true); + annotationOne.setId(annotIdOne); + List idsOfCoveredDisc = new ArrayList(); + annotationOne.setIdsOfCoveredDiscrepancies(idsOfCoveredDisc); + + dispoConnector.connectAnnotation(annotationOne, dispoItem.getDiscrepanciesList()); + List annotationsList = new ArrayList(); + annotationsList.add(annotationOne); + dispoItem.setAnnotationsList(annotationsList); + + // annotation 1 should be connected to all Discrepancies + List idsOfCoveredDiscrepancies = annotationOne.getIdsOfCoveredDiscrepancies(); + Assert.assertTrue(idsOfCoveredDiscrepancies.size() == idsSize); + for (int i = 0; i < idsOfCoveredDiscrepancies.size(); i++) { + if (i < 5) {//first 5 discrepancies are from ids array 1-5 + assertEquals(idsOfCoveredDiscrepancies.get(i), idsForDiscrepancies1_5[i]); + } else if (i < 12) { + assertEquals(idsOfCoveredDiscrepancies.get(i), idsForDiscrepancies12_18[i - 5]); + } else { + assertEquals(idsOfCoveredDiscrepancies.get(i), id20); + } + } + + assertTrue(annotationOne.getIsConnected()); + + String actual = dispoConnector.getItemStatus(dispoItem); + assertEquals(DispoStrings.Item_Analyzed, actual); + } + @Test public void testConnectAnnotationsStringIncomplete() { // Convert Location Refs to have characters diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoResolutionValidatorTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoResolutionValidatorTest.java new file mode 100644 index 00000000000..5aec7563aca --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoResolutionValidatorTest.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2018 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.disposition.rest.internal; + +import static org.eclipse.osee.disposition.model.DispoStrings.ANALYZE_CODE; +import org.eclipse.osee.disposition.model.DispoAnnotationData; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Angel Avila + */ +public class DispoResolutionValidatorTest { + + @Before + public void setUp() { + } + + @Test + public void testValidate() { + DispoAnnotationData annotation = new DispoAnnotationData(); + annotation.setResolutionType(ANALYZE_CODE); + annotation.setResolution(""); + + DispoResolutionValidator validator = new DispoResolutionValidator(); + + validator.validate(annotation); + + Assert.assertTrue(annotation.getIsAnalyze()); + Assert.assertTrue(!annotation.getIsResolutionValid()); + + annotation.setResolution("something"); + validator.validate(annotation); + + Assert.assertTrue(annotation.getIsAnalyze()); + Assert.assertTrue(annotation.getIsResolutionValid()); + + annotation.setResolutionType("non-essense"); + validator.validate(annotation); + + Assert.assertTrue(!annotation.getIsAnalyze()); + Assert.assertTrue(annotation.getIsResolutionValid()); + + } + +} diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/InternalTestSuite.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/InternalTestSuite.java index e77d285b22b..90ee653b4b4 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/InternalTestSuite.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/InternalTestSuite.java @@ -17,7 +17,11 @@ import org.junit.runners.Suite; * @author Angel Avila */ @RunWith(Suite.class) -@Suite.SuiteClasses({DispoApiTest.class, DispoConnectorTest.class, LocationRangesCompressorTest.class}) +@Suite.SuiteClasses({ + DispoApiTest.class, + DispoConnectorTest.class, + LocationRangesCompressorTest.class, + DispoResolutionValidatorTest.class}) public class InternalTestSuite { // Test Suite } diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoApiImpl.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoApiImpl.java index 2ee9e2b2df1..832272a1ff4 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoApiImpl.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoApiImpl.java @@ -343,10 +343,12 @@ public class DispoApiImpl implements DispoApi { String newResolution = newAnnotation.getResolution(); String newResolutionType = newAnnotation.getResolutionType(); - if (!origAnnotation.getResolutionType().equals(newResolutionType) || !origAnnotation.getResolution().equals( - newResolution)) { - newAnnotation.setIsResolutionValid(validateResolution(newAnnotation)); + boolean isTypeChange = !origAnnotation.getResolutionType().equals(newResolutionType); + boolean isResolutionChange = !origAnnotation.getResolution().equals(newResolution); + + if (isTypeChange || isResolutionChange) { needToReconnect = true; + resolutionValidator.validate(newAnnotation); } if (!origAnnotation.getLocationRefs().equals(newLocationRefs)) { needToReconnect = true; @@ -357,7 +359,6 @@ public class DispoApiImpl implements DispoApi { dispoConnector.connectAnnotation(newAnnotation, discrepanciesList); } annotationsList.set(indexOfAnnotation, newAnnotation); - dispoItem.getAnnotationsList().get(0); ArtifactReadable author = getQuery().findUser(); DispoItemData modifiedDispoItem = DispoUtil.itemArtToItemData(getDispoItemById(branch, itemId), true); @@ -594,10 +595,6 @@ public class DispoApiImpl implements DispoApi { return newList; } - private boolean validateResolution(DispoAnnotationData annotation) { - return resolutionValidator.validate(annotation); - } - @Override public void copyDispoSetCoverage(BranchId sourceBranch, Long sourceCoverageUuid, BranchId destBranch, String destSetId, CopySetParams params) { Map coverageUnits = getQuery().getCoverageUnits(sourceBranch, sourceCoverageUuid); diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoConnector.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoConnector.java index 0091a0258c3..f58df801577 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoConnector.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoConnector.java @@ -12,6 +12,7 @@ package org.eclipse.osee.disposition.rest.internal; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -68,24 +69,38 @@ public class DispoConnector { if (item.getDiscrepanciesList().size() == 0) { toReturn = DispoStrings.Item_Pass; - } else if (allAnnotationsValid(annotations) && allUncoveredDiscprepancies.isEmpty()) { - toReturn = DispoStrings.Item_Complete; } else { - toReturn = DispoStrings.Item_InComplete; + Collection defaultAnnotations = new HashSet<>(); + Collection invalidAnotations = new HashSet<>(); + Collection analyzeAnnotations = new HashSet<>(); + parseThroughAnnotations(annotations, defaultAnnotations, invalidAnotations, analyzeAnnotations); + + if (invalidAnotations.isEmpty() && allUncoveredDiscprepancies.isEmpty()) { + if (analyzeAnnotations.isEmpty()) { + toReturn = DispoStrings.Item_Complete; + } else { + toReturn = DispoStrings.Item_Analyzed; + } + } else { + toReturn = DispoStrings.Item_InComplete; + } } return toReturn; } - private boolean allAnnotationsValid(List annotations) { - if (annotations != null) { - for (DispoAnnotationData annotation : annotations) { - if (!annotation.getIsDefault() && !annotation.isValid()) { - return false; - } + private void parseThroughAnnotations(Collection annotations, Collection defaultAnnotations, Collection invalidAnnotations, Collection analyzeAnnotations) { + for (DispoAnnotationData annotation : annotations) { + if (annotation.getIsDefault()) { + defaultAnnotations.add(annotation); + } + if (!annotation.isValid()) { + invalidAnnotations.add(annotation); + } + if (annotation.getIsAnalyze()) { + analyzeAnnotations.add(annotation); } } - return true; } private ArrayList createDiscrepanciesList(Map discrepancies) { diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoResolutionValidator.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoResolutionValidator.java index 11476e73034..a546b5e2496 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoResolutionValidator.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoResolutionValidator.java @@ -10,6 +10,9 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest.internal; +import static org.eclipse.osee.disposition.model.DispoStrings.ANALYZE_CODE; +import static org.eclipse.osee.disposition.model.DispoStrings.ANALYZE_REQT; +import static org.eclipse.osee.disposition.model.DispoStrings.ANALYZE_TEST; import java.util.Map; import org.eclipse.osee.disposition.model.DispoAnnotationData; import org.eclipse.osee.framework.jdk.core.util.Strings; @@ -21,14 +24,12 @@ import org.eclipse.osee.logger.Log; public class DispoResolutionValidator { private Log logger; - private String resolutionRegex; public void setLogger(Log logger) { this.logger = logger; } public void start(Map properties) { - resolutionRegex = (String) properties.get("TestScriptResolution"); logger.trace("Starting ResolutionValidator..."); } @@ -36,7 +37,21 @@ public class DispoResolutionValidator { logger.trace("Stopping ResolutionValidator..."); } - public boolean validate(DispoAnnotationData annotation) { + public void validate(DispoAnnotationData annotation) { + annotation.setIsResolutionValid(isValid(annotation)); + annotation.setIsAnalyze(isAnalyze(annotation)); + } + + private boolean isAnalyze(DispoAnnotationData annotation) { + String type = annotation.getResolutionType(); + boolean toReturn = false; + if (type.equals(ANALYZE_CODE) || type.equals(ANALYZE_TEST) || type.equals(ANALYZE_REQT)) { + toReturn = true; + } + return toReturn; + } + + private boolean isValid(DispoAnnotationData annotation) { String pcr = annotation.getResolution().toUpperCase().trim(); boolean isValid = false; if (Strings.isValid(pcr)) { diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DispoUtil.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DispoUtil.java index 3b7d2eb690e..59c79c7d3ec 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DispoUtil.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DispoUtil.java @@ -403,6 +403,9 @@ public final class DispoUtil { if (object.has("isValid")) { dispoAnnotation.setIsConnected(object.getBoolean("isValid")); } + if (object.has("isAnalyze")) { + dispoAnnotation.setIsAnalyze(object.getBoolean("isAnalyze")); + } if (object.has("developerNotes")) { dispoAnnotation.setDeveloperNotes(object.getString("developerNotes")); } -- cgit v1.2.3