diff options
author | Angel Avila | 2014-04-08 18:11:08 +0000 |
---|---|---|
committer | Angel Avila | 2014-04-10 02:10:11 +0000 |
commit | 5ddfa7ebe2f06ea2c213eb2834de1b8d0b691eab (patch) | |
tree | 27a6a298fb97297a71dbdfc6c85801ef38e7640f /plugins | |
parent | 720b641a40ae4b692076f3d24e594038198fbb13 (diff) | |
download | org.eclipse.osee-5ddfa7ebe2f06ea2c213eb2834de1b8d0b691eab.tar.gz org.eclipse.osee-5ddfa7ebe2f06ea2c213eb2834de1b8d0b691eab.tar.xz org.eclipse.osee-5ddfa7ebe2f06ea2c213eb2834de1b8d0b691eab.zip |
refactor[ats_ZSWF7]: Update Dispo Model
Change-Id: I563fd684b57fcecf45083eac4a02a4a1d3938993
Diffstat (limited to 'plugins')
51 files changed, 1587 insertions, 1318 deletions
diff --git a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/Discrepancy.java b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/Discrepancy.java index d7f0b2b1aac..564bac5861a 100644 --- a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/Discrepancy.java +++ b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/Discrepancy.java @@ -11,22 +11,20 @@ package org.eclipse.osee.disposition.model; import javax.xml.bind.annotation.XmlRootElement; -import org.json.JSONArray; /** * @author Angel Avila */ @XmlRootElement public class Discrepancy { - private int id; + private String id; private String text; - private LocationRange locationRange; - private JSONArray idsOfCoveringAnnotations; + private int location; public Discrepancy() { } - public int getId() { + public String getId() { return id; } @@ -34,16 +32,12 @@ public class Discrepancy { return text; } - public LocationRange getLocationRange() { - return locationRange; - } - - public JSONArray getIdsOfCoveringAnnotations() { - return idsOfCoveringAnnotations; + public int getLocation() { + return location; } // Setters - public void setId(int id) { + public void setId(String id) { this.id = id; } @@ -51,17 +45,8 @@ public class Discrepancy { this.text = text; } - public void setLocationRange(LocationRange locationRange) { - this.locationRange = locationRange; - } - - public void setIdsOfCoveringAnnotations(JSONArray idsOfCoveringAnnotations) { - this.idsOfCoveringAnnotations = idsOfCoveringAnnotations; - } - - // Utils - public void addCoveringAnnotation(DispoAnnotationData annotation) { - idsOfCoveringAnnotations.put(annotation.getId()); + public void setLocation(int location) { + this.location = location; } } 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 3580d5cd93e..8a8cacc31f5 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 @@ -24,7 +24,8 @@ import org.json.JSONArray; public class DispoAnnotationData implements Identifiable<String> { private String id; - private JSONArray notesList; + private int index; + private String notes; private String locationRefs; private boolean isConnected; private JSONArray idsOfCoveredDiscrepancies; @@ -37,7 +38,7 @@ public class DispoAnnotationData implements Identifiable<String> { @Override public String getGuid() { - return id; + return String.valueOf(id); } @Override @@ -49,8 +50,12 @@ public class DispoAnnotationData implements Identifiable<String> { return id; } - public JSONArray getNotesList() { - return notesList; + public int getIndex() { + return index; + } + + public String getNotes() { + return notes; } public String getLocationRefs() { @@ -77,14 +82,18 @@ public class DispoAnnotationData implements Identifiable<String> { this.locationRefs = locationRefs; } - public void setNotesList(JSONArray notesList) { - this.notesList = notesList; + public void setNotes(String notes) { + this.notes = notes; } public void setId(String id) { this.id = id; } + public void setIndex(int index) { + this.index = index; + } + public void setIsConnected(boolean isConnected) { this.isConnected = isConnected; } @@ -109,6 +118,11 @@ public class DispoAnnotationData implements Identifiable<String> { return isConnected && isResolutionValid; } + public void disconnect() { + this.isConnected = false; + this.idsOfCoveredDiscrepancies = new JSONArray(); + } + @Override public boolean matches(Identity<?>... identities) { for (Identity<?> identity : identities) { diff --git a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoItem.java b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoItem.java index bfe532cc2bd..550d8fc9102 100644 --- a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoItem.java +++ b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoItem.java @@ -30,7 +30,9 @@ public interface DispoItem extends Identifiable<String> { String getStatus(); - JSONArray getDiscrepanciesList(); + String getVersion(); - JSONObject getAnnotationsList(); + JSONObject getDiscrepanciesList(); + + JSONArray getAnnotationsList(); } diff --git a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoItemData.java b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoItemData.java index 5dd77eede0e..a4c4f2b1def 100644 --- a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoItemData.java +++ b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoItemData.java @@ -29,8 +29,9 @@ public class DispoItemData implements DispoItem { private Date creationDate; private Date lastUpdate; private String status; - private JSONArray discrepanciesList; - private JSONObject annotationsList; + private String version; + private JSONObject discrepanciesList; + private JSONArray annotationsList; public DispoItemData() { @@ -67,12 +68,17 @@ public class DispoItemData implements DispoItem { } @Override - public JSONArray getDiscrepanciesList() { + public String getVersion() { + return version; + } + + @Override + public JSONObject getDiscrepanciesList() { return discrepanciesList; } @Override - public JSONObject getAnnotationsList() { + public JSONArray getAnnotationsList() { return annotationsList; } @@ -80,11 +86,11 @@ public class DispoItemData implements DispoItem { this.name = name; } - public void setDiscrepanciesList(JSONArray discrepanciesList) { + public void setDiscrepanciesList(JSONObject discrepanciesList) { this.discrepanciesList = discrepanciesList; } - public void setAnnotationsList(JSONObject annotationsList) { + public void setAnnotationsList(JSONArray annotationsList) { this.annotationsList = annotationsList; } @@ -92,6 +98,10 @@ public class DispoItemData implements DispoItem { this.status = status; } + public void setVersion(String version) { + this.version = version; + } + public void setLastUpdate(Date lastUpdate) { this.lastUpdate = lastUpdate; } diff --git a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoSet.java b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoSet.java index 6f77bb24e4f..995e0933f3a 100644 --- a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoSet.java +++ b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoSet.java @@ -22,10 +22,7 @@ public interface DispoSet extends Identifiable<String> { String getImportPath(); - String getStatusCount(); - JSONArray getNotesList(); String getImportState(); - } diff --git a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoSetData.java b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoSetData.java index d13463aff4d..2a7b923c2e0 100644 --- a/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoSetData.java +++ b/plugins/org.eclipse.osee.disposition.rest.model/src/org/eclipse/osee/disposition/model/DispoSetData.java @@ -22,16 +22,10 @@ import org.json.JSONArray; @XmlRootElement(name = "DispoSetData") public class DispoSetData extends DispoSetDescriptorData implements DispoSet { - public enum DispositionOperationsEnum { - NEW_IMPORT, - RE_IMPORT - } - private String guid; - private DispositionOperationsEnum operation; + private String operation; private JSONArray notesList; private String importState; - private String statusCount; public DispoSetData() { @@ -46,11 +40,11 @@ public class DispoSetData extends DispoSetDescriptorData implements DispoSet { this.guid = guid; } - public DispositionOperationsEnum getOperation() { + public String getOperation() { return operation; } - public void setOperation(DispositionOperationsEnum operation) { + public void setOperation(String operation) { this.operation = operation; } @@ -73,15 +67,6 @@ public class DispoSetData extends DispoSetDescriptorData implements DispoSet { } @Override - public String getStatusCount() { - return statusCount; - } - - public void setStatusCount(String statusCount) { - this.statusCount = statusCount; - } - - @Override public boolean matches(Identity<?>... identities) { for (Identity<?> identity : identities) { if (equals(identity)) { 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 b49e3103b47..78ab8f3dddf 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 @@ -44,5 +44,10 @@ public class DispoStrings { public static final String Item_Complete = "COMPLETE"; public static final String Item_InComplete = "INCOMPLETE"; + public static final String Operation_NewImport = "New_Import"; + public static final String Operation_ReImport = "Re_Import"; + + public static final String DeletedDiscrepancy = "Deleted Discrepancy"; + public static final String Dispo_Config_Art = "Dispo_Config"; } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/DispositionOsgiTestSuite.launch b/plugins/org.eclipse.osee.disposition.rest.test/DispositionTestSuite.launch index a0a8c87eb3a..4d855520b41 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/DispositionOsgiTestSuite.launch +++ b/plugins/org.eclipse.osee.disposition.rest.test/DispositionTestSuite.launch @@ -25,7 +25,7 @@ <booleanAttribute key="includeOptional" value="false"/> <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/DispositionOsgiTestSuite.java"/> +<listEntry value="/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/DispositionTestSuite.java"/> </listAttribute> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> <listEntry value="1"/> @@ -35,7 +35,7 @@ <stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/> <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> -<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.osee.disposition.rest.integration.DispositionOsgiTestSuite"/> +<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.osee.disposition.rest.DispositionTestSuite"/> <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osee.disposition.rest.test"/> <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/DispositionTestSuite.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/DispositionTestSuite.java index 57ebb5dfa90..1106b44506e 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/DispositionTestSuite.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/DispositionTestSuite.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest; -import org.eclipse.osee.disposition.rest.integration.DispositionOsgiTestSuite; import org.eclipse.osee.disposition.rest.internal.InternalTestSuite; import org.eclipse.osee.disposition.rest.resources.ResourcesTestSuite; import org.junit.runner.RunWith; @@ -20,7 +19,7 @@ import org.junit.runners.Suite; * @author Angel Avila */ @RunWith(Suite.class) -@Suite.SuiteClasses({ResourcesTestSuite.class, InternalTestSuite.class, DispositionOsgiTestSuite.class}) +@Suite.SuiteClasses({ResourcesTestSuite.class, InternalTestSuite.class,}) public class DispositionTestSuite { - // Test Suite + // Test Suite } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/DispositionApiTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/DispositionIntegrationTest.java index bcce504109c..48e4044d058 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/DispositionApiTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/DispositionIntegrationTest.java @@ -10,19 +10,18 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest.integration; -import static org.eclipse.osee.disposition.rest.integration.util.DispositionTestUtil.SAW_Bld_1; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import java.util.List; import org.eclipse.osee.disposition.model.DispoAnnotationData; -import org.eclipse.osee.disposition.model.DispoItemData; +import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoProgram; -import org.eclipse.osee.disposition.model.DispoSetData; +import org.eclipse.osee.disposition.model.DispoSet; import org.eclipse.osee.disposition.model.DispoStrings; import org.eclipse.osee.disposition.rest.DispoApi; import org.eclipse.osee.disposition.rest.integration.util.DispositionInitializer; import org.eclipse.osee.disposition.rest.integration.util.DispositionIntegrationRule; -import org.eclipse.osee.framework.core.data.IOseeBranch; -import org.eclipse.osee.framework.jdk.core.type.ResultSet; +import org.eclipse.osee.disposition.rest.integration.util.DispositionTestUtil; import org.eclipse.osee.orcs.OrcsApi; import org.eclipse.osee.orcs.db.mock.OsgiService; import org.junit.Before; @@ -33,7 +32,7 @@ import org.junit.rules.TestRule; /** * @author Angel Avila */ -public class DispositionApiTest { +public class DispositionIntegrationTest { @Rule public TestRule rule = DispositionIntegrationRule.integrationRule(this, "osee.demo.hsql"); @@ -54,16 +53,14 @@ public class DispositionApiTest { public void testDispositionApi() { // We have one item with discrepancies: 1-10, 12-20, 23, 25, 32-90 - DispoProgram sawProgram = dispoApi.getDispoFactory().createProgram(SAW_Bld_1); - IOseeBranch dispoProgramBranch = dispoApi.getDispoProgramById(sawProgram); - DispoProgram program = dispoApi.getDispoFactory().createProgram(dispoProgramBranch); + DispoProgram program = dispoApi.getDispoFactory().createProgram(DispositionTestUtil.SAW_Bld_1_FOR_DISPO); - ResultSet<DispoSetData> dispoSets = dispoApi.getDispoSets(program); - DispoSetData devSet = dispoSets.getExactlyOne(); + List<DispoSet> dispoSets = dispoApi.getDispoSets(program); + DispoSet devSet = dispoSets.get(0); String devSetId = devSet.getGuid(); - ResultSet<DispoItemData> dispoItems = dispoApi.getDispoItems(program, devSetId); - DispoItemData itemOne = dispoItems.getExactlyOne(); + List<DispoItem> dispoItems = dispoApi.getDispoItems(program, devSetId); + DispoItem itemOne = dispoItems.get(0); String itemOneId = itemOne.getGuid(); assertEquals(5, itemOne.getDiscrepanciesList().length()); @@ -100,10 +97,10 @@ public class DispositionApiTest { assertEquals(5, itemOne.getDiscrepanciesList().length()); assertEquals(2, itemOne.getAnnotationsList().length()); - DispoAnnotationData actualAnnotation = dispoApi.getDispoAnnotationByIndex(program, itemOneId, createdThreeId); + DispoAnnotationData actualAnnotation = dispoApi.getDispoAnnotationById(program, itemOneId, createdThreeId); assertEquals("23,25,32-90", actualAnnotation.getLocationRefs()); - actualAnnotation = dispoApi.getDispoAnnotationByIndex(program, itemOneId, createdOneId); + actualAnnotation = dispoApi.getDispoAnnotationById(program, itemOneId, createdOneId); assertEquals("1-10", actualAnnotation.getLocationRefs()); } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/DispositionOsgiTestSuite.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/DispositionOsgiTestSuite.java index 8a690394f07..12723155888 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/DispositionOsgiTestSuite.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/DispositionOsgiTestSuite.java @@ -17,7 +17,7 @@ import org.junit.runners.Suite; * @author Angel Avila */ @RunWith(Suite.class) -@Suite.SuiteClasses({DispositionApiTest.class}) +@Suite.SuiteClasses({DispositionIntegrationTest.class}) public class DispositionOsgiTestSuite { // Test Suite } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/util/DispositionInitializer.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/util/DispositionInitializer.java index 92daa193c2c..f557f446ac8 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/util/DispositionInitializer.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/integration/util/DispositionInitializer.java @@ -13,14 +13,13 @@ package org.eclipse.osee.disposition.rest.integration.util; import static org.eclipse.osee.disposition.rest.integration.util.DispositionTestUtil.SAW_Bld_1; import static org.eclipse.osee.disposition.rest.integration.util.DispositionTestUtil.SAW_Bld_1_FOR_DISPO; import static org.eclipse.osee.disposition.rest.util.DispoUtil.discrepancyToJsonObj; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import org.eclipse.osee.disposition.model.Discrepancy; import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoProgram; import org.eclipse.osee.disposition.model.DispoSetDescriptorData; import org.eclipse.osee.disposition.model.DispoStrings; -import org.eclipse.osee.disposition.model.LocationRange; import org.eclipse.osee.disposition.rest.DispoApi; import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; @@ -34,7 +33,6 @@ import org.eclipse.osee.orcs.data.ArtifactId; import org.eclipse.osee.orcs.data.ArtifactReadable; import org.eclipse.osee.orcs.search.QueryFactory; import org.eclipse.osee.orcs.transaction.TransactionBuilder; -import org.json.JSONArray; import org.json.JSONObject; /** @@ -97,45 +95,40 @@ public class DispositionInitializer { } private void createDiscrepancies(DispoProgram program, String itemId) { - List<JSONObject> discrepanciesToInit = new ArrayList<JSONObject>(); + Map<String, JSONObject> discrepanciesToInit = new HashMap<String, JSONObject>(); Discrepancy one = new Discrepancy(); - one.setId(0); - one.setIdsOfCoveringAnnotations(new JSONArray()); + one.setId("idafd"); one.setText("one"); - one.setLocationRange(new LocationRange(1, 10)); - discrepanciesToInit.add(discrepancyToJsonObj(one)); + one.setLocation(1); + discrepanciesToInit.put(one.getId(), discrepancyToJsonObj(one)); Discrepancy two = new Discrepancy(); - two.setId(1); - two.setIdsOfCoveringAnnotations(new JSONArray()); + two.setId("iddf"); two.setText("two"); - two.setLocationRange(new LocationRange(12, 20)); - discrepanciesToInit.add(discrepancyToJsonObj(two)); + two.setLocation(12); + discrepanciesToInit.put(two.getId(), discrepancyToJsonObj(two)); Discrepancy three = new Discrepancy(); - three.setId(2); - three.setIdsOfCoveringAnnotations(new JSONArray()); + three.setId("absc"); three.setText("three"); - three.setLocationRange(new LocationRange(23)); - discrepanciesToInit.add(discrepancyToJsonObj(three)); + three.setLocation(23); + discrepanciesToInit.put(three.getId(), discrepancyToJsonObj(three)); Discrepancy four = new Discrepancy(); - four.setId(3); - four.setIdsOfCoveringAnnotations(new JSONArray()); + four.setId("cddg"); four.setText("four"); - four.setLocationRange(new LocationRange(25)); - discrepanciesToInit.add(discrepancyToJsonObj(four)); + four.setLocation(25); + discrepanciesToInit.put(four.getId(), discrepancyToJsonObj(four)); Discrepancy five = new Discrepancy(); - five.setId(4); - five.setIdsOfCoveringAnnotations(new JSONArray()); + five.setId("yoj"); five.setText("five"); - five.setLocationRange(new LocationRange(32, 90)); - discrepanciesToInit.add(discrepancyToJsonObj(five)); + five.setLocation(90); + discrepanciesToInit.put(five.getId(), discrepancyToJsonObj(five)); - JSONArray array = new JSONArray(discrepanciesToInit); + JSONObject discrepanciesList = new JSONObject(discrepanciesToInit); DispoItemData item = new DispoItemData(); - item.setDiscrepanciesList(array); + item.setDiscrepanciesList(discrepanciesList); dispoApi.editDispoItem(program, itemId, item); } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispositionApiTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoApiTest.java index 30ea7b07554..0e0a2cc8c6f 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispositionApiTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/DispoApiTest.java @@ -18,6 +18,7 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -40,7 +41,6 @@ import org.json.JSONObject; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; -import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; @@ -49,11 +49,13 @@ import org.mockito.stubbing.Answer; /** * @author Angel Avila */ -public class DispositionApiTest { +public class DispoApiTest { @Mock private Storage storage; @Mock + private DispoResolutionValidator validator; + @Mock private StorageProvider storageProvider; @Mock private IOseeBranch mockBranch; @@ -78,7 +80,7 @@ public class DispositionApiTest { @Mock private JSONObject jsonObject; @Mock - private JSONObject mockAnnotations; + private JSONArray mockAnnotations; @Mock private Iterator<String> mockKeys; @Mock @@ -105,16 +107,10 @@ public class DispositionApiTest { dispoApi.setStorageProvider(storageProvider); dispoApi.setDataFactory(dataFactory); dispoApi.setDispoConnector(dispoConnector); + dispoApi.setResolutionValidator(validator); } - @Test - public void testGetDispoProgramById() { - when(storage.findProgramId(program)).thenAnswer(newAnswer(mockBranch)); - IOseeBranch actual = dispoApi.getDispoProgramById(program); - assertEquals(mockBranch, actual); - } - private <T> Answer<T> newAnswer(final T object) { return new Answer<T>() { @@ -128,29 +124,27 @@ public class DispositionApiTest { @Test public void testGetDispoPrograms() { ResultSet<IOseeBranch> programsSet = ResultSets.singleton(mockBranch); - when(storage.findBaselineBranches()).thenAnswer(newAnswer(programsSet)); + when(storage.getDispoBranches()).thenAnswer(newAnswer(programsSet)); ResultSet<IOseeBranch> actual = dispoApi.getDispoPrograms(); assertEquals(programsSet.iterator().next(), actual.iterator().next()); } @Test public void testGetDispoSets() { - ResultSet<DispoSet> dispoSetArts = ResultSets.singleton(dispoSet); + List<DispoSet> dispoSetArts = Collections.singletonList(dispoSet); when(storage.findDispoSets(program)).thenAnswer(newAnswer(dispoSetArts)); when(dispoSet.getName()).thenReturn("name"); when(dispoSet.getImportPath()).thenReturn("path"); when(dispoSet.getNotesList()).thenReturn(jsonArray); when(dispoSet.getGuid()).thenReturn("setGuid"); - when(dispoSet.getStatusCount()).thenReturn("count"); - ResultSet<DispoSetData> actualResultSet = dispoApi.getDispoSets(program); - DispoSetData actualData = actualResultSet.iterator().next(); + List<DispoSet> actualResultSet = dispoApi.getDispoSets(program); + DispoSet actualData = actualResultSet.iterator().next(); assertEquals("setGuid", actualData.getGuid()); assertEquals("name", actualData.getName()); assertEquals("path", actualData.getImportPath()); assertEquals(jsonArray, actualData.getNotesList()); - assertEquals("count", actualData.getStatusCount()); } @Test @@ -160,36 +154,34 @@ public class DispositionApiTest { when(dispoSet.getImportPath()).thenReturn("path"); when(dispoSet.getNotesList()).thenReturn(jsonArray); when(dispoSet.getGuid()).thenReturn("setGuid"); - when(dispoSet.getStatusCount()).thenReturn("count"); - DispoSetData actual = dispoApi.getDispoSetById(program, setId.getGuid()); + DispoSet actual = dispoApi.getDispoSetById(program, setId.getGuid()); assertEquals("setGuid", actual.getGuid()); assertEquals("name", actual.getName()); assertEquals("path", actual.getImportPath()); assertEquals(jsonArray, actual.getNotesList()); - assertEquals("count", actual.getStatusCount()); } @Test public void testGetDispoItems() { - ResultSet<DispoItem> dispoItemArts = ResultSets.singleton(dispoItem); + List<DispoItem> dispoItemArts = Collections.singletonList(dispoItem); when(storage.findDipoItems(program, setId.getGuid())).thenReturn(dispoItemArts); when(dispoItem.getName()).thenReturn("name"); when(dispoItem.getGuid()).thenReturn("itemGuid"); when(dispoItem.getCreationDate()).thenReturn(mockDate); when(dispoItem.getLastUpdate()).thenReturn(mockDate); when(dispoItem.getStatus()).thenReturn("status"); - when(dispoItem.getDiscrepanciesList()).thenReturn(jsonArray); + when(dispoItem.getDiscrepanciesList()).thenReturn(jsonObject); when(dispoItem.getAnnotationsList()).thenReturn(mockAnnotations); - ResultSet<DispoItemData> actualResultSet = dispoApi.getDispoItems(program, setId.getGuid()); - DispoItemData actualData = actualResultSet.iterator().next(); + List<DispoItem> actualResultSet = dispoApi.getDispoItems(program, setId.getGuid()); + DispoItem actualData = actualResultSet.iterator().next(); assertEquals("itemGuid", actualData.getGuid()); assertEquals("name", actualData.getName()); assertEquals(mockDate, actualData.getCreationDate()); assertEquals(mockDate, actualData.getLastUpdate()); assertEquals("status", actualData.getStatus()); - assertEquals(jsonArray, actualData.getDiscrepanciesList()); + assertEquals(jsonObject, actualData.getDiscrepanciesList()); assertEquals(mockAnnotations, actualData.getAnnotationsList()); } @@ -201,34 +193,33 @@ public class DispositionApiTest { when(dispoItem.getCreationDate()).thenReturn(mockDate); when(dispoItem.getLastUpdate()).thenReturn(mockDate); when(dispoItem.getStatus()).thenReturn("status"); - when(dispoItem.getDiscrepanciesList()).thenReturn(jsonArray); + when(dispoItem.getDiscrepanciesList()).thenReturn(jsonObject); when(dispoItem.getAnnotationsList()).thenReturn(mockAnnotations); - DispoItemData actualData = dispoApi.getDispoItemById(program, itemId.getGuid()); + DispoItem actualData = dispoApi.getDispoItemById(program, itemId.getGuid()); assertEquals("itemGuid", actualData.getGuid()); assertEquals("name", actualData.getName()); assertEquals(mockDate, actualData.getCreationDate()); assertEquals(mockDate, actualData.getLastUpdate()); assertEquals("status", actualData.getStatus()); - assertEquals(jsonArray, actualData.getDiscrepanciesList()); + assertEquals(jsonObject, actualData.getDiscrepanciesList()); assertEquals(mockAnnotations, actualData.getAnnotationsList()); } @Test public void getDispoAnnotations() throws JSONException { - String annotId = "id"; + String annotId = "dsf"; + int indexOfAnnot = 0; when(storage.findDispoItemById(program, itemId.getGuid())).thenReturn(dispoItem); when(dispoItem.getAnnotationsList()).thenReturn(mockAnnotations); - when(mockAnnotations.keys()).thenReturn(mockKeys); - when(mockKeys.hasNext()).thenReturn(true, false); - when(mockKeys.next()).thenReturn(annotId); - when(mockAnnotations.getJSONObject(annotId)).thenReturn(jsonObject); + when(mockAnnotations.length()).thenReturn(1); + when(mockAnnotations.getJSONObject(indexOfAnnot)).thenReturn(jsonObject); when(jsonObject.has("id")).thenReturn(true); when(jsonObject.getString("id")).thenReturn(annotId); when(jsonObject.has("locationRefs")).thenReturn(true); when(jsonObject.getString("locationRefs")).thenReturn("1-10"); - ResultSet<DispoAnnotationData> actualResultSet = dispoApi.getDispoAnnotations(program, itemId.getGuid()); + List<DispoAnnotationData> actualResultSet = dispoApi.getDispoAnnotations(program, itemId.getGuid()); DispoAnnotationData actualData = actualResultSet.iterator().next(); assertEquals(annotId, actualData.getId()); @@ -237,16 +228,18 @@ public class DispositionApiTest { @Test public void getDispoAnnotationByIndex() throws JSONException { - String idOfAnnot = "idW"; + String idOfAnnot = "432"; + int indexOfAnnot = 0; when(storage.findDispoItemById(program, itemId.getGuid())).thenReturn(dispoItem); when(dispoItem.getAnnotationsList()).thenReturn(mockAnnotations); - when(mockAnnotations.has(idOfAnnot)).thenReturn(true); - when(mockAnnotations.getJSONObject(idOfAnnot)).thenReturn(jsonObject); + when(mockAnnotations.length()).thenReturn(1); + when(mockAnnotations.getJSONObject(indexOfAnnot)).thenReturn(jsonObject); when(jsonObject.has("id")).thenReturn(true); when(jsonObject.getString("id")).thenReturn(idOfAnnot); when(jsonObject.has("locationRefs")).thenReturn(true); when(jsonObject.getString("locationRefs")).thenReturn("1-10"); - DispoAnnotationData actualData = dispoApi.getDispoAnnotationByIndex(program, itemId.getGuid(), idOfAnnot); + DispoAnnotationData actualData = dispoApi.getDispoAnnotationById(program, itemId.getGuid(), idOfAnnot); + dispoApi.getDispoAnnotationById(program, itemId.getGuid(), idOfAnnot); assertEquals(idOfAnnot, actualData.getId()); assertEquals("1-10", actualData.getLocationRefs()); @@ -286,33 +279,32 @@ public class DispositionApiTest { } @Test - public void testCreateDispositionAnnotation() { - ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class); + public void testCreateDispositionAnnotation() throws JSONException { String expectedId = "dfs"; DispoAnnotationData annotationToCreate = new DispoAnnotationData(); when(storage.findDispoItemById(program, itemId.getGuid())).thenReturn(dispoItem); when(dataFactory.getNewId()).thenReturn(expectedId); when(dispoItem.getAnnotationsList()).thenReturn(mockAnnotations); - when(dispoItem.getDiscrepanciesList()).thenReturn(jsonArray); - when(dataFactory.createUpdatedItem(eq(jsonObject), eq(jsonArray), Matchers.anyBoolean())).thenReturn(dispoItem); - when(dispoConnector.connectAnnotation(annotationToCreate, jsonArray)).thenReturn(false); + when(dispoItem.getDiscrepanciesList()).thenReturn(jsonObject); + when(dataFactory.createUpdatedItem(eq(jsonArray), eq(jsonObject))).thenReturn(dispoItem); + when(dispoConnector.connectAnnotation(annotationToCreate, jsonObject)).thenReturn(false); annotationToCreate.setIsConnected(true); //Assume this Annotation was connected // Only need to createUpdatedItem with updateStatus = True when annotation is valid and current status is INCOMPLETE annotationToCreate.setResolution("VALID"); - when(dispoItem.getStatus()).thenReturn("COMPLETE"); // captor(0) + when(dispoItem.getStatus()).thenReturn("COMPLETE"); String acutal = dispoApi.createDispoAnnotation(program, itemId.getGuid(), annotationToCreate); assertEquals(expectedId, acutal); - when(dispoItem.getStatus()).thenReturn("PASS"); // captor(1) + when(dispoItem.getStatus()).thenReturn("PASS"); acutal = dispoApi.createDispoAnnotation(program, itemId.getGuid(), annotationToCreate); assertEquals(expectedId, acutal); - when(dispoItem.getStatus()).thenReturn("INCOMPLETE"); // captor(2) + when(dispoItem.getStatus()).thenReturn("INCOMPLETE"); acutal = dispoApi.createDispoAnnotation(program, itemId.getGuid(), annotationToCreate); assertEquals(expectedId, acutal); - annotationToCreate.setResolution("INVALID"); // captor(3) + annotationToCreate.setResolution("INVALID"); acutal = dispoApi.createDispoAnnotation(program, itemId.getGuid(), annotationToCreate); assertEquals(expectedId, acutal); @@ -320,13 +312,7 @@ public class DispositionApiTest { acutal = dispoApi.createDispoAnnotation(program, itemId.getGuid(), annotationToCreate); assertEquals("", acutal); - verify(dispoConnector, times(3)).connectAnnotation(annotationToCreate, jsonArray);// Only tried to connect 3 times, excluded when annotations was invalid - verify(dataFactory, times(4)).createUpdatedItem(eq(mockAnnotations), eq(jsonArray), captor.capture()); - List<Boolean> booleanList = captor.getAllValues(); - assertFalse(booleanList.get(0)); - assertFalse(booleanList.get(1)); - assertTrue(booleanList.get(2)); - assertFalse(booleanList.get(3)); + verify(dispoConnector, times(4)).connectAnnotation(annotationToCreate, jsonObject);// Only tried to connect 3 times, excluded when annotations was invalid } @Test @@ -354,23 +340,20 @@ public class DispositionApiTest { @Test public void testEditDispoItem() { - ArgumentCaptor<JSONArray> captor = ArgumentCaptor.forClass(JSONArray.class); DispoItemData newItem = new DispoItemData(); when(storage.findDispoItemById(program, itemId.getGuid())).thenReturn(dispoItem); - when(dispoItem.getDiscrepanciesList()).thenReturn(jsonArray); + when(dispoItem.getDiscrepanciesList()).thenReturn(jsonObject); boolean actual = dispoApi.editDispoItem(program, itemId.getGuid(), newItem); assertTrue(actual); - JSONArray discrepanciesList = new JSONArray(); + JSONObject discrepanciesList = new JSONObject(); newItem.setDiscrepanciesList(discrepanciesList); actual = dispoApi.editDispoItem(program, itemId.getGuid(), newItem); - assertTrue(actual); - // Only should have merged Json Arrays once since the first newSet didn't have a Json Array - verify(dataFactory, times(1)).mergeJsonArrays(eq(jsonArray), captor.capture()); + assertFalse(actual); - newItem.setAnnotationsList(jsonObject); + newItem.setAnnotationsList(jsonArray); actual = dispoApi.editDispoItem(program, itemId.getGuid(), newItem); assertFalse(actual); } @@ -380,14 +363,18 @@ public class DispositionApiTest { DispoAnnotationData newAnnotation = new DispoAnnotationData(); DispoProgram programUuid = program; String itemUuid = itemId.getGuid(); - String expectedId = "1"; + String expectedId = "faf"; when(storage.findDispoItemById(programUuid, itemUuid)).thenReturn(dispoItem); - when(dispoItem.getAnnotationsList()).thenReturn(jsonObject); - when(dispoItem.getDiscrepanciesList()).thenReturn(jsonArray); + when(dispoItem.getAnnotationsList()).thenReturn(jsonArray); + when(dispoItem.getDiscrepanciesList()).thenReturn(jsonObject); when(jsonObject.getJSONObject(expectedId)).thenReturn(jsonObject); + when(jsonArray.length()).thenReturn(1); + when(jsonArray.getJSONObject(0)).thenReturn(jsonObject); // mocks for data util translation - when(jsonObject.has("id")).thenReturn(false); + when(jsonObject.has("id")).thenReturn(true); + when(jsonObject.getString("id")).thenReturn(expectedId); + when(jsonObject.has("index")).thenReturn(false); when(jsonObject.has("locationRefs")).thenReturn(false); when(jsonObject.has("idsOfCoveredDiscrepancies")).thenReturn(false); when(jsonObject.has("notesList")).thenReturn(false); @@ -395,18 +382,17 @@ public class DispositionApiTest { when(jsonObject.getBoolean("isResolutionValid")).thenReturn(true); // We'll have the old annotation have a valid resolution to start // end - // add location Ref to newAnnotation so that disconnect and connect are invoked newAnnotation.setLocationRefs("1-10"); boolean actual = dispoApi.editDispoAnnotation(program, itemId.getGuid(), expectedId, newAnnotation); assertTrue(actual); // reset loc ref to null and set new (invalid) resolution newAnnotation.setLocationRefs(null); - newAnnotation.setResolution("PCR 13"); // Since PCR validation isn't hooked up yet, only valid resolution is "VALID" + when(validator.validate(newAnnotation)).thenReturn(true); + newAnnotation.setResolution("PCR 13"); actual = dispoApi.editDispoAnnotation(program, itemId.getGuid(), expectedId, newAnnotation); assertTrue(actual); - // set to invalid, make sure connect is not invoked newAnnotation.setResolution("VALID"); // Since PCR validation isn't hooked up yet, only valid resolution is "VALID" actual = dispoApi.editDispoAnnotation(program, itemId.getGuid(), expectedId, newAnnotation); assertTrue(actual); @@ -414,14 +400,11 @@ public class DispositionApiTest { // notes are the only thing being modified, no need to disconnect or connect newAnnotation.setLocationRefs(null); newAnnotation.setResolution(null); - JSONArray newNotes = new JSONArray(); - newAnnotation.setNotesList(newNotes); + newAnnotation.setNotes(""); actual = dispoApi.editDispoAnnotation(program, itemId.getGuid(), expectedId, newAnnotation); assertTrue(actual); - verify(dispoConnector, times(3)).disconnectAnnotation(any(DispoAnnotationData.class), eq(jsonArray)); - verify(dispoConnector, times(2)).connectAnnotation(any(DispoAnnotationData.class), eq(jsonArray)); - verify(dataFactory, times(1)).mergeJsonArrays(any(JSONArray.class), any(JSONArray.class)); + verify(dispoConnector, times(3)).connectAnnotation(any(DispoAnnotationData.class), eq(jsonObject)); } @Test @@ -431,10 +414,14 @@ public class DispositionApiTest { String expectedId = "1"; when(storage.findDispoItemById(programUuid, itemUuid)).thenReturn(dispoItem); - when(dispoItem.getAnnotationsList()).thenReturn(jsonObject); - when(dispoItem.getDiscrepanciesList()).thenReturn(jsonArray); + when(dispoItem.getAnnotationsList()).thenReturn(jsonArray); + when(dispoItem.getDiscrepanciesList()).thenReturn(jsonObject); + when(jsonArray.length()).thenReturn(1); + when(jsonArray.getJSONObject(0)).thenReturn(jsonObject); // mocks for data util translation - when(jsonObject.has("id")).thenReturn(false); + when(jsonObject.has("id")).thenReturn(true); + when(jsonObject.getString("id")).thenReturn(expectedId); + when(jsonObject.has("index")).thenReturn(false); when(jsonObject.has("locationRefs")).thenReturn(false); when(jsonObject.has("idsOfCoveredDiscrepancies")).thenReturn(false); when(jsonObject.has("isValid")).thenReturn(false); @@ -446,17 +433,13 @@ public class DispositionApiTest { when(jsonObject.getJSONObject(expectedId)).thenReturn(annotationInvalid); boolean actual = dispoApi.deleteDispoAnnotation(program, itemId.getGuid(), expectedId); - verify(dispoConnector).disconnectAnnotation(any(DispoAnnotationData.class), eq(jsonArray)); - verify(jsonObject).remove(expectedId); - verify(dataFactory).createUpdatedItem(eq(jsonObject), eq(jsonArray), eq(false)); assertTrue(actual); - // JSONObject annotationValid = new JSONObject(); annotationValid.put("isValid", true); when(jsonObject.getJSONObject(expectedId)).thenReturn(annotationValid); actual = dispoApi.deleteDispoAnnotation(program, itemId.getGuid(), expectedId); - verify(dataFactory).createUpdatedItem(eq(jsonObject), eq(jsonArray), eq(true)); + verify(dataFactory, times(2)).createUpdatedItem(any(JSONArray.class), eq(jsonObject)); assertTrue(actual); } } 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 8e1cd9bb4b3..c67031780c9 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 @@ -13,7 +13,6 @@ package org.eclipse.osee.disposition.rest.internal; import static org.eclipse.osee.disposition.rest.util.DispoUtil.annotationToJsonObj; import static org.eclipse.osee.disposition.rest.util.DispoUtil.discrepancyToJsonObj; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.HashMap; @@ -23,12 +22,12 @@ import org.eclipse.osee.disposition.model.Discrepancy; import org.eclipse.osee.disposition.model.DispoAnnotationData; import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoStrings; -import org.eclipse.osee.disposition.model.LocationRange; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.junit.Before; import org.junit.Test; + /** * @author Angel Avila */ @@ -37,551 +36,339 @@ public class DispoConnectorTest { private DispoItemData dispoItem; private DispoConnector dispoConnector; - int idZero = 0; - int idOne = 1; - int idTwo = 2; - int idThree = 3; + String[] idsForDiscrepancies1_5 = {"adf", "ads", "acc", "abc", "ace"}; + + String[] idsForDiscrepancies12_18 = {"cbb", "bcd", "cca", "ccd", "ccbb", "cabb", "cqqq"}; + + String id20 = "gdd"; - String annotIdOne = "id1"; - String annotIdTwo = "id2"; - String annotIdThree = "id3"; - String annotIdFour = "id4"; - String annotIdFive = "id5"; + String annotIdOne = "annotId0"; + String annotIdTwo = "annotId1"; + String annotIdThree = "annotId2"; + String annotIdFour = "annotId3"; + String annotIdFive = "annotId4"; @Before public void setUp() { - // MockitoAnnotations.initMocks(this); dispoItem = new DispoItemData(); dispoConnector = new DispoConnector(); - List<JSONObject> discrepancies = new ArrayList<JSONObject>(); - - Discrepancy discrepancyOne = new Discrepancy(); - LocationRange rangeOne = new LocationRange(1, 10); - discrepancyOne.setLocationRange(rangeOne); - discrepancyOne.setId(idZero); - discrepancyOne.setIdsOfCoveringAnnotations(new JSONArray()); - discrepancies.add(discrepancyToJsonObj(discrepancyOne)); - - Discrepancy discrepancyTwo = new Discrepancy(); - LocationRange rangeTwo = new LocationRange(12, 20); - discrepancyTwo.setLocationRange(rangeTwo); - discrepancyTwo.setId(idOne); - discrepancyTwo.setIdsOfCoveringAnnotations(new JSONArray()); - discrepancies.add(discrepancyToJsonObj(discrepancyTwo)); - - Discrepancy discrepancyThree = new Discrepancy(); - LocationRange rangeThree = new LocationRange(23); - discrepancyThree.setLocationRange(rangeThree); - discrepancyThree.setId(idTwo); - discrepancyThree.setIdsOfCoveringAnnotations(new JSONArray()); - discrepancies.add(discrepancyToJsonObj(discrepancyThree)); - - Discrepancy discrepancyFour = new Discrepancy(); - LocationRange rangeFour = new LocationRange(25); - discrepancyFour.setLocationRange(rangeFour); - discrepancyFour.setId(idThree); - discrepancyFour.setIdsOfCoveringAnnotations(new JSONArray()); - discrepancies.add(discrepancyToJsonObj(discrepancyFour)); - - JSONArray discrepanciesAsArray = new JSONArray(discrepancies); - dispoItem.setDiscrepanciesList(discrepanciesAsArray); + Map<String, JSONObject> discrepancies = new HashMap<String, JSONObject>(); + + for (int i = 1; i <= 5; i++) { + Discrepancy discrepancy = new Discrepancy(); + discrepancy.setLocation(i); + discrepancy.setId(idsForDiscrepancies1_5[i - 1]); + discrepancies.put(discrepancy.getId(), discrepancyToJsonObj(discrepancy)); + } + + for (int i = 12; i <= 18; i++) { + Discrepancy discrepancy = new Discrepancy(); + discrepancy.setLocation(i); + discrepancy.setId(idsForDiscrepancies12_18[i - 12]); + discrepancies.put(discrepancy.getId(), discrepancyToJsonObj(discrepancy)); + } + + Discrepancy discrepancy20 = new Discrepancy(); + discrepancy20.setLocation(20); + discrepancy20.setId(id20); + discrepancies.put(discrepancy20.getId(), discrepancyToJsonObj(discrepancy20)); + + JSONObject discrepanciesList = new JSONObject(discrepancies); + dispoItem.setDiscrepanciesList(discrepanciesList); } @Test public void testConnectAnnotationsSingleCompelete() throws JSONException { // Create one annotation with every discrepancy covered DispoAnnotationData annotationOne = new DispoAnnotationData(); - annotationOne.setLocationRefs("1-10, 12-20, 23, 25"); + annotationOne.setLocationRefs("1-5, 12-18, 20"); + annotationOne.setIsResolutionValid(true); annotationOne.setId(annotIdOne); JSONArray idsOfCoveredDisc = new JSONArray(); annotationOne.setIdsOfCoveredDiscrepancies(idsOfCoveredDisc); dispoConnector.connectAnnotation(annotationOne, dispoItem.getDiscrepanciesList()); + JSONArray annotationsList = new JSONArray(); + annotationsList.put(annotationToJsonObj(annotationOne)); + dispoItem.setAnnotationsList(annotationsList); // annotation 1 should be connected to all Discrepancies JSONArray idsOfCoveredDiscrepancies = annotationOne.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveredDiscrepancies.getInt(0), idZero); - assertEquals(idsOfCoveredDiscrepancies.getInt(1), idOne); - assertEquals(idsOfCoveredDiscrepancies.getInt(2), idTwo); - assertEquals(idsOfCoveredDiscrepancies.getInt(3), idThree); + for (int i = 0; i < 13; i++) { + if (i < 5) {//first 5 discrepancies are from ids array 1-5 + assertEquals(idsOfCoveredDiscrepancies.getString(i), idsForDiscrepancies1_5[i]); + } else if (i < 12) { + assertEquals(idsOfCoveredDiscrepancies.getString(i), idsForDiscrepancies12_18[i - 5]); + } else { + assertEquals(idsOfCoveredDiscrepancies.getString(i), id20); + } + } + assertTrue(annotationOne.getIsConnected()); - // Each discrepancy should only be connected to the one annotation - JSONArray discrepanciesList = dispoItem.getDiscrepanciesList(); - JSONObject jsonObject = discrepanciesList.getJSONObject(0); - JSONArray jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.length(), 1); - - jsonObject = discrepanciesList.getJSONObject(1); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.length(), 1); - - jsonObject = discrepanciesList.getJSONObject(2); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.length(), 1); - - jsonObject = discrepanciesList.getJSONObject(3); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.length(), 1); + String actual = dispoConnector.allDiscrepanciesAnnotated(dispoItem); + assertEquals(DispoStrings.Item_Complete, actual); } @Test public void testConnectAnnotationsSingleIncomplete() throws JSONException { // This will test a single annotation that covers most but not all discrepancies DispoAnnotationData annotationOne = new DispoAnnotationData(); - annotationOne.setLocationRefs("1-10, 12-20, 23"); + annotationOne.setLocationRefs("1-5, 12-18"); annotationOne.setId(annotIdOne); JSONArray idsOfCoveredDisc = new JSONArray(); annotationOne.setIdsOfCoveredDiscrepancies(idsOfCoveredDisc); dispoConnector.connectAnnotation(annotationOne, dispoItem.getDiscrepanciesList()); + JSONArray annotationsList = new JSONArray(); + annotationsList.put(annotationToJsonObj(annotationOne)); + dispoItem.setAnnotationsList(annotationsList); - // annotation 1 should be connected to all Discrepancies but idThree which is '25' + // annotation 1 should be connected to all Discrepancies JSONArray idsOfCoveredDiscrepancies = annotationOne.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveredDiscrepancies.getInt(0), idZero); - assertEquals(idsOfCoveredDiscrepancies.getInt(1), idOne); - assertEquals(idsOfCoveredDiscrepancies.getInt(2), idTwo); + for (int i = 0; i < 13; i++) { + if (i < 5) {//first 5 discrepancies are from ids array 1-5 + assertEquals(idsOfCoveredDiscrepancies.getString(i), idsForDiscrepancies1_5[i]); + } else if (i < 12) { + assertEquals(idsOfCoveredDiscrepancies.getString(i), idsForDiscrepancies12_18[i - 5]); + } + } assertTrue(annotationOne.getIsConnected()); - // Each discrepancy should only be connected to the one annotation except the last one - JSONArray discrepanciesList = dispoItem.getDiscrepanciesList(); - JSONObject jsonObject = discrepanciesList.getJSONObject(0); - JSONArray jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.length(), 1); - - jsonObject = discrepanciesList.getJSONObject(1); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.length(), 1); - - jsonObject = discrepanciesList.getJSONObject(2); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.length(), 1); - - jsonObject = discrepanciesList.getJSONObject(3); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 0); + String actual = dispoConnector.allDiscrepanciesAnnotated(dispoItem); + assertEquals(DispoStrings.Item_InComplete, actual); } @Test public void testConnectAnnotationsMultipleComplete() throws JSONException { DispoAnnotationData annotationOne = new DispoAnnotationData(); - annotationOne.setLocationRefs("1-10"); + annotationOne.setLocationRefs("1-5"); annotationOne.setId(annotIdOne); JSONArray idsOfCoveredDiscOne = new JSONArray(); annotationOne.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscOne); DispoAnnotationData annotationTwo = new DispoAnnotationData(); - annotationTwo.setLocationRefs("12-15"); + annotationTwo.setLocationRefs("12-14"); annotationTwo.setId(annotIdTwo); JSONArray idsOfCoveredDiscTwo = new JSONArray(); annotationTwo.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscTwo); DispoAnnotationData annotationThree = new DispoAnnotationData(); - annotationThree.setLocationRefs("16, 25, 23, 18"); + annotationThree.setLocationRefs("16, 20, 18"); annotationThree.setId(annotIdThree); JSONArray idsOfCoveredDiscThree = new JSONArray(); annotationThree.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscThree); DispoAnnotationData annotationFour = new DispoAnnotationData(); - annotationFour.setLocationRefs("17-19, 25"); - annotationFour.setId(annotIdFour); - JSONArray idsOfCoveredDiscFour = new JSONArray(); - annotationFour.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscFour); - - DispoAnnotationData annotationFive = new DispoAnnotationData(); - annotationFive.setLocationRefs("23, 20"); - annotationFive.setId(annotIdFive); + annotationFour.setLocationRefs("15, 17"); + annotationFour.setId(annotIdFive); JSONArray idsOfCoveredDiscFive = new JSONArray(); - annotationFive.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscFive); + annotationFour.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscFive); - JSONArray discrepanciesArray = dispoItem.getDiscrepanciesList(); + JSONObject discrepanciesArray = dispoItem.getDiscrepanciesList(); dispoConnector.connectAnnotation(annotationOne, discrepanciesArray); dispoConnector.connectAnnotation(annotationTwo, discrepanciesArray); dispoConnector.connectAnnotation(annotationThree, discrepanciesArray); dispoConnector.connectAnnotation(annotationFour, discrepanciesArray); - dispoConnector.connectAnnotation(annotationFive, discrepanciesArray); - JSONArray idsOfCoveringDiscrepancies; + JSONArray idsOfCoveredDiscrepancies; assertTrue(annotationOne.getIsConnected()); - idsOfCoveringDiscrepancies = annotationOne.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 1); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idZero); + idsOfCoveredDiscrepancies = annotationOne.getIdsOfCoveredDiscrepancies(); + assertEquals(idsOfCoveredDiscrepancies.length(), 5); + for (int i = 0; i < 5; i++) { + assertEquals(idsOfCoveredDiscrepancies.getString(i), idsForDiscrepancies1_5[i]); + } assertTrue(annotationTwo.getIsConnected()); - idsOfCoveringDiscrepancies = annotationTwo.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 1); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); + idsOfCoveredDiscrepancies = annotationTwo.getIdsOfCoveredDiscrepancies(); + assertEquals(idsOfCoveredDiscrepancies.length(), 3); + assertEquals(idsOfCoveredDiscrepancies.getString(0), idsForDiscrepancies12_18[0]); + assertEquals(idsOfCoveredDiscrepancies.getString(1), idsForDiscrepancies12_18[1]); + assertEquals(idsOfCoveredDiscrepancies.getString(2), idsForDiscrepancies12_18[2]); assertTrue(annotationThree.getIsConnected()); - idsOfCoveringDiscrepancies = annotationThree.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 3); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); - assertEquals(idsOfCoveringDiscrepancies.getInt(1), idTwo); - assertEquals(idsOfCoveringDiscrepancies.getInt(2), idThree); + idsOfCoveredDiscrepancies = annotationThree.getIdsOfCoveredDiscrepancies(); + assertEquals(idsOfCoveredDiscrepancies.length(), 3); + assertEquals(idsOfCoveredDiscrepancies.getString(0), idsForDiscrepancies12_18[4]); + assertEquals(idsOfCoveredDiscrepancies.getString(1), idsForDiscrepancies12_18[6]); + assertEquals(idsOfCoveredDiscrepancies.getString(2), id20); assertTrue(annotationFour.getIsConnected()); - idsOfCoveringDiscrepancies = annotationFour.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 2); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); - assertEquals(idsOfCoveringDiscrepancies.getInt(1), idThree); - - assertTrue(annotationFive.getIsConnected()); - idsOfCoveringDiscrepancies = annotationFive.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 2); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); - assertEquals(idsOfCoveringDiscrepancies.getInt(1), idTwo); - - // Test Discrepancies - JSONArray discrepanciesList = dispoItem.getDiscrepanciesList(); - JSONObject jsonObject = discrepanciesList.getJSONObject(0); - JSONArray jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 1); - assertEquals(jsonArray.getString(0), annotIdOne); - - jsonObject = discrepanciesList.getJSONObject(1); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 4); - assertEquals(jsonArray.getString(0), annotIdTwo); - assertEquals(jsonArray.getString(1), annotIdThree); - assertEquals(jsonArray.getString(2), annotIdFour); - assertEquals(jsonArray.getString(3), annotIdFive); - - jsonObject = discrepanciesList.getJSONObject(2); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 2); - assertEquals(jsonArray.getString(0), annotIdThree); - assertEquals(jsonArray.getString(1), annotIdFive); - - jsonObject = discrepanciesList.getJSONObject(3); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 2); - assertEquals(jsonArray.getString(0), annotIdThree); - assertEquals(jsonArray.getString(1), annotIdFour); + idsOfCoveredDiscrepancies = annotationFour.getIdsOfCoveredDiscrepancies(); + assertEquals(idsOfCoveredDiscrepancies.length(), 2); + assertEquals(idsOfCoveredDiscrepancies.getString(0), idsForDiscrepancies12_18[3]); + assertEquals(idsOfCoveredDiscrepancies.getString(1), idsForDiscrepancies12_18[5]); } @Test - public void testAllDiscrepanciesAnnotatedOneComplete() { - Map<String, JSONObject> annotationsAsMap = new HashMap<String, JSONObject>(); + public void testAllDiscrepanciesAnnotatedOneComplete() throws JSONException { + JSONArray annotationsAsList = new JSONArray(); // Create one annotation with every discrepancy covered DispoAnnotationData annotationOne = new DispoAnnotationData(); - annotationOne.setLocationRefs("1-10, 12-20, 23, 25"); + annotationOne.setLocationRefs("1-5, 12-18, 20"); JSONArray idsOfCoveredDisc = new JSONArray(); annotationOne.setIdsOfCoveredDiscrepancies(idsOfCoveredDisc); + annotationOne.setIsResolutionValid(true); annotationOne.setId(annotIdOne); - annotationsAsMap.put(annotIdOne, annotationToJsonObj(annotationOne)); - - JSONObject annotations = new JSONObject(annotationsAsMap); - dispoItem.setAnnotationsList(annotations); dispoConnector.connectAnnotation(annotationOne, dispoItem.getDiscrepanciesList()); + annotationsAsList.put(annotationToJsonObj(annotationOne)); + dispoItem.setAnnotationsList(annotationsAsList); String actual = dispoConnector.allDiscrepanciesAnnotated(dispoItem); assertEquals(DispoStrings.Item_Complete, actual); } @Test - public void testAllDiscrepanciesAnnotatedManyComplete() { - Map<String, JSONObject> annotationsAsMap = new HashMap<String, JSONObject>(); + public void testAllDiscrepanciesAnnotatedManyComplete() throws JSONException { + List<JSONObject> annotationsAsList = new ArrayList<JSONObject>(); // Create 4 annotations, one for every discrepancy covered DispoAnnotationData annotationOne = new DispoAnnotationData(); - annotationOne.setLocationRefs("1-10"); + annotationOne.setLocationRefs("1-5"); annotationOne.setId(annotIdOne); + annotationOne.setIsResolutionValid(true); JSONArray idsOfCoveredDiscOne = new JSONArray(); annotationOne.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscOne); - // annotationsAsList.add(annotationToJsonObj(annotationOne)); - annotationsAsMap.put(annotIdOne, annotationToJsonObj(annotationOne)); + annotationsAsList.add(annotationToJsonObj(annotationOne)); DispoAnnotationData annotationTwo = new DispoAnnotationData(); - annotationTwo.setLocationRefs("12-20"); + annotationTwo.setLocationRefs("12-18"); annotationTwo.setId(annotIdTwo); + annotationTwo.setIsResolutionValid(true); JSONArray idsOfCoveredDiscTwo = new JSONArray(); annotationTwo.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscTwo); - // annotationsAsList.add(annotationToJsonObj(annotationTwo)); - annotationsAsMap.put(annotIdTwo, annotationToJsonObj(annotationTwo)); + annotationsAsList.add(annotationToJsonObj(annotationTwo)); DispoAnnotationData annotationThree = new DispoAnnotationData(); - annotationThree.setLocationRefs("23, 25"); + annotationThree.setLocationRefs("20"); annotationThree.setId(annotIdThree); + annotationThree.setIsResolutionValid(true); JSONArray idsOfCoveredDiscThree = new JSONArray(); annotationThree.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscThree); - // annotationsAsList.add(annotationToJsonObj(annotationThree)); - annotationsAsMap.put(annotIdThree, annotationToJsonObj(annotationThree)); + annotationsAsList.add(annotationToJsonObj(annotationThree)); - JSONObject annotationsAsArray = new JSONObject(annotationsAsMap); - dispoItem.setAnnotationsList(annotationsAsArray); + JSONArray annotationsList = new JSONArray(annotationsAsList); + dispoItem.setAnnotationsList(annotationsList); - JSONArray discrepanciesArray = dispoItem.getDiscrepanciesList(); + JSONObject discrepanciesList = dispoItem.getDiscrepanciesList(); - dispoConnector.connectAnnotation(annotationOne, discrepanciesArray); + dispoConnector.connectAnnotation(annotationOne, discrepanciesList); + annotationsList.put(0, annotationToJsonObj(annotationOne)); + dispoItem.setAnnotationsList(annotationsList); + annotationsList.put(0, annotationToJsonObj(annotationOne)); + dispoItem.setAnnotationsList(annotationsList); String actual = dispoConnector.allDiscrepanciesAnnotated(dispoItem); assertEquals(DispoStrings.Item_InComplete, actual); - dispoConnector.connectAnnotation(annotationTwo, discrepanciesArray); + dispoConnector.connectAnnotation(annotationTwo, discrepanciesList); + annotationsList.put(1, annotationToJsonObj(annotationTwo)); + dispoItem.setAnnotationsList(annotationsList); + annotationsList.put(1, annotationToJsonObj(annotationTwo)); + dispoItem.setAnnotationsList(annotationsList); actual = dispoConnector.allDiscrepanciesAnnotated(dispoItem); assertEquals(DispoStrings.Item_InComplete, actual); - dispoConnector.connectAnnotation(annotationThree, discrepanciesArray); + dispoConnector.connectAnnotation(annotationThree, discrepanciesList); + annotationsList.put(2, annotationToJsonObj(annotationThree)); + dispoItem.setAnnotationsList(annotationsList); + annotationsList.put(2, annotationToJsonObj(annotationThree)); + dispoItem.setAnnotationsList(annotationsList); actual = dispoConnector.allDiscrepanciesAnnotated(dispoItem); assertEquals(DispoStrings.Item_Complete, actual); } @Test - public void testDisconnect() throws JSONException { - // Create one annotation with every discrepancy covered - DispoAnnotationData annotationOne = new DispoAnnotationData(); - annotationOne.setLocationRefs("12-20, 23, 25"); - annotationOne.setId(annotIdOne); - JSONArray idsOfCoveredDisc = new JSONArray(); - annotationOne.setIdsOfCoveredDiscrepancies(idsOfCoveredDisc); - - DispoAnnotationData annotationTwo = new DispoAnnotationData(); - annotationTwo.setLocationRefs("1-10, 23"); - annotationTwo.setId(annotIdTwo); - JSONArray idsOfCoveredDiscTwo = new JSONArray(); - annotationTwo.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscTwo); - - dispoConnector.connectAnnotation(annotationOne, dispoItem.getDiscrepanciesList()); - dispoConnector.connectAnnotation(annotationTwo, dispoItem.getDiscrepanciesList()); - - // annotation 1 should be connected to 3 Discrepancies - JSONArray idsOfCoveredDiscrepancies = annotationOne.getIdsOfCoveredDiscrepancies(); - assertEquals(3, idsOfCoveredDiscrepancies.length()); - assertEquals(idsOfCoveredDiscrepancies.getInt(0), idOne); - assertEquals(idsOfCoveredDiscrepancies.getInt(1), idTwo); - assertEquals(idsOfCoveredDiscrepancies.getInt(2), idThree); - assertTrue(annotationOne.getIsConnected()); - - // annotation 2 should be connected to discrepancy idZero - JSONArray idsOfCoveredDiscrepanciesTwo = annotationTwo.getIdsOfCoveredDiscrepancies(); - assertEquals(2, idsOfCoveredDiscrepanciesTwo.length()); - assertEquals(idsOfCoveredDiscrepanciesTwo.getInt(0), idZero); - assertEquals(idsOfCoveredDiscrepanciesTwo.getInt(1), idTwo); - assertTrue(annotationTwo.getIsConnected()); - - JSONArray discrepanciesList = dispoItem.getDiscrepanciesList(); - JSONObject jsonObject = discrepanciesList.getJSONObject(0); - JSONArray jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdTwo); - assertEquals(jsonArray.length(), 1); - - jsonObject = discrepanciesList.getJSONObject(1); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.length(), 1); - - jsonObject = discrepanciesList.getJSONObject(2); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 2); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.getString(1), annotIdTwo); - - jsonObject = discrepanciesList.getJSONObject(3); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.getString(0), annotIdOne); - assertEquals(jsonArray.length(), 1); - - // Disconect the annotaiton - dispoConnector.disconnectAnnotation(annotationOne, discrepanciesList); - - idsOfCoveredDiscrepancies = annotationOne.getIdsOfCoveredDiscrepancies(); - assertEquals(0, idsOfCoveredDiscrepancies.length()); - assertFalse(annotationOne.getIsConnected()); - - // discrepanciesList = dispoItem.getDiscrepanciesList(); - - jsonObject = discrepanciesList.getJSONObject(0); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(1, jsonArray.length()); - - jsonObject = discrepanciesList.getJSONObject(1); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(0, jsonArray.length()); - - jsonObject = discrepanciesList.getJSONObject(2); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(1, jsonArray.length()); - - jsonObject = discrepanciesList.getJSONObject(3); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(0, jsonArray.length()); - } - - @Test public void testZComplexCase() throws JSONException { - Map<String, JSONObject> annotationsAsMap = new HashMap<String, JSONObject>(); + JSONArray annotationsList = new JSONArray(); DispoAnnotationData annotationOne = new DispoAnnotationData(); - annotationOne.setLocationRefs("10, 1-9"); + annotationOne.setLocationRefs("5, 1-3"); annotationOne.setId(annotIdOne); + annotationOne.setIsResolutionValid(true); JSONArray idsOfCoveredDiscOne = new JSONArray(); annotationOne.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscOne); - annotationsAsMap.put(annotIdOne, annotationToJsonObj(annotationOne)); DispoAnnotationData annotationTwo = new DispoAnnotationData(); annotationTwo.setLocationRefs("12-15"); annotationTwo.setId(annotIdTwo); + annotationTwo.setIsResolutionValid(true); JSONArray idsOfCoveredDiscTwo = new JSONArray(); annotationTwo.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscTwo); - annotationsAsMap.put(annotIdTwo, annotationToJsonObj(annotationTwo)); DispoAnnotationData annotationThree = new DispoAnnotationData(); - annotationThree.setLocationRefs("16, 25, 23, 18, 20"); + annotationThree.setLocationRefs("16, 20"); annotationThree.setId(annotIdThree); JSONArray idsOfCoveredDiscThree = new JSONArray(); + annotationThree.setIsResolutionValid(true); annotationThree.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscThree); - annotationsAsMap.put(annotIdThree, annotationToJsonObj(annotationThree)); DispoAnnotationData annotationFour = new DispoAnnotationData(); - annotationFour.setLocationRefs("17-19, 25"); + annotationFour.setLocationRefs("4, 20"); annotationFour.setId(annotIdFour); JSONArray idsOfCoveredDiscFour = new JSONArray(); + annotationFour.setIsResolutionValid(true); annotationFour.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscFour); - annotationsAsMap.put(annotIdFour, annotationToJsonObj(annotationFour)); DispoAnnotationData annotationFive = new DispoAnnotationData(); - annotationFive.setLocationRefs("23, 20"); + annotationFive.setLocationRefs("18, 16, 17, 4"); annotationFive.setId(annotIdFive); JSONArray idsOfCoveredDiscFive = new JSONArray(); + annotationFive.setIsResolutionValid(true); annotationFive.setIdsOfCoveredDiscrepancies(idsOfCoveredDiscFive); - annotationsAsMap.put(annotIdFive, annotationToJsonObj(annotationFive)); - JSONArray discrepanciesArray = dispoItem.getDiscrepanciesList(); - dispoConnector.connectAnnotation(annotationOne, discrepanciesArray); - dispoConnector.connectAnnotation(annotationTwo, discrepanciesArray); - dispoConnector.connectAnnotation(annotationThree, discrepanciesArray); - dispoConnector.connectAnnotation(annotationFour, discrepanciesArray); - dispoConnector.connectAnnotation(annotationFive, discrepanciesArray); + JSONObject discrepanciesList = dispoItem.getDiscrepanciesList(); + dispoConnector.connectAnnotation(annotationOne, discrepanciesList); + annotationsList.put(annotationToJsonObj(annotationOne)); + dispoConnector.connectAnnotation(annotationTwo, discrepanciesList); + annotationsList.put(annotationToJsonObj(annotationTwo)); + dispoConnector.connectAnnotation(annotationThree, discrepanciesList); + annotationsList.put(annotationToJsonObj(annotationThree)); + dispoConnector.connectAnnotation(annotationFour, discrepanciesList); + annotationsList.put(annotationToJsonObj(annotationFour)); + dispoConnector.connectAnnotation(annotationFive, discrepanciesList); + annotationsList.put(annotationToJsonObj(annotationFive)); - JSONObject annotationsAsArray = new JSONObject(annotationsAsMap); - dispoItem.setAnnotationsList(annotationsAsArray); + dispoItem.setAnnotationsList(annotationsList); JSONArray idsOfCoveringDiscrepancies; assertTrue(annotationOne.getIsConnected()); idsOfCoveringDiscrepancies = annotationOne.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 1); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idZero); + assertEquals(idsOfCoveringDiscrepancies.length(), 4); + assertEquals(idsOfCoveringDiscrepancies.getString(0), idsForDiscrepancies1_5[0]); + assertEquals(idsOfCoveringDiscrepancies.getString(1), idsForDiscrepancies1_5[1]); + assertEquals(idsOfCoveringDiscrepancies.getString(2), idsForDiscrepancies1_5[2]); + assertEquals(idsOfCoveringDiscrepancies.getString(3), idsForDiscrepancies1_5[4]); assertTrue(annotationTwo.getIsConnected()); idsOfCoveringDiscrepancies = annotationTwo.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 1); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); + assertEquals(idsOfCoveringDiscrepancies.length(), 4); + assertEquals(idsOfCoveringDiscrepancies.getString(0), idsForDiscrepancies12_18[0]); + assertEquals(idsOfCoveringDiscrepancies.getString(1), idsForDiscrepancies12_18[1]); + assertEquals(idsOfCoveringDiscrepancies.getString(2), idsForDiscrepancies12_18[2]); + assertEquals(idsOfCoveringDiscrepancies.getString(3), idsForDiscrepancies12_18[3]); assertTrue(annotationThree.getIsConnected()); idsOfCoveringDiscrepancies = annotationThree.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 3); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); - assertEquals(idsOfCoveringDiscrepancies.getInt(1), idTwo); - assertEquals(idsOfCoveringDiscrepancies.getInt(2), idThree); + assertEquals(idsOfCoveringDiscrepancies.length(), 2); + assertEquals(idsOfCoveringDiscrepancies.getString(0), idsForDiscrepancies12_18[4]); + assertEquals(idsOfCoveringDiscrepancies.getString(1), id20); assertTrue(annotationFour.getIsConnected()); idsOfCoveringDiscrepancies = annotationFour.getIdsOfCoveredDiscrepancies(); assertEquals(idsOfCoveringDiscrepancies.length(), 2); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); - assertEquals(idsOfCoveringDiscrepancies.getInt(1), idThree); + assertEquals(idsOfCoveringDiscrepancies.getString(0), idsForDiscrepancies1_5[3]); + assertEquals(idsOfCoveringDiscrepancies.getString(1), id20); assertTrue(annotationFive.getIsConnected()); idsOfCoveringDiscrepancies = annotationFive.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 2); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); - assertEquals(idsOfCoveringDiscrepancies.getInt(1), idTwo); - - // Test Discrepancies - JSONArray discrepanciesList = dispoItem.getDiscrepanciesList(); - JSONObject jsonObject = discrepanciesList.getJSONObject(0); - JSONArray jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 1); - assertEquals(jsonArray.getString(0), annotIdOne); - - jsonObject = discrepanciesList.getJSONObject(1); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 4); - assertEquals(jsonArray.getString(0), annotIdTwo); - assertEquals(jsonArray.getString(1), annotIdThree); - assertEquals(jsonArray.getString(2), annotIdFour); - assertEquals(jsonArray.getString(3), annotIdFive); - - jsonObject = discrepanciesList.getJSONObject(2); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 2); - assertEquals(jsonArray.getString(0), annotIdThree); - assertEquals(jsonArray.getString(1), annotIdFive); - - jsonObject = discrepanciesList.getJSONObject(3); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 2); - assertEquals(jsonArray.getString(0), annotIdThree); - assertEquals(jsonArray.getString(1), annotIdFour); + assertEquals(idsOfCoveringDiscrepancies.length(), 4); + assertEquals(idsOfCoveringDiscrepancies.getString(0), idsForDiscrepancies1_5[3]); + assertEquals(idsOfCoveringDiscrepancies.getString(1), idsForDiscrepancies12_18[4]); + assertEquals(idsOfCoveringDiscrepancies.getString(2), idsForDiscrepancies12_18[5]); + assertEquals(idsOfCoveringDiscrepancies.getString(3), idsForDiscrepancies12_18[6]); String actual = dispoConnector.allDiscrepanciesAnnotated(dispoItem); assertEquals(DispoStrings.Item_Complete, actual); - - // Disconnect Annotation Five. All discrep. should still be covered since annotationThree has the locRefs that annotationFive had - dispoConnector.disconnectAnnotation(annotationFive, discrepanciesList); - assertTrue(annotationOne.getIsConnected()); - idsOfCoveringDiscrepancies = annotationOne.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 1); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idZero); - - assertTrue(annotationTwo.getIsConnected()); - idsOfCoveringDiscrepancies = annotationTwo.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 1); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); - - assertTrue(annotationThree.getIsConnected()); - idsOfCoveringDiscrepancies = annotationThree.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 3); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); - assertEquals(idsOfCoveringDiscrepancies.getInt(1), idTwo); - assertEquals(idsOfCoveringDiscrepancies.getInt(2), idThree); - - assertTrue(annotationFour.getIsConnected()); - idsOfCoveringDiscrepancies = annotationFour.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 2); - assertEquals(idsOfCoveringDiscrepancies.getInt(0), idOne); - assertEquals(idsOfCoveringDiscrepancies.getInt(1), idThree); - - // disconnected - assertFalse(annotationFive.getIsConnected()); - idsOfCoveringDiscrepancies = annotationFive.getIdsOfCoveredDiscrepancies(); - assertEquals(idsOfCoveringDiscrepancies.length(), 0); - - // Discrepancies - discrepanciesList = dispoItem.getDiscrepanciesList(); - jsonObject = discrepanciesList.getJSONObject(0); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 1); - assertEquals(jsonArray.getString(0), annotIdOne); - - // Size is now just 3 - jsonObject = discrepanciesList.getJSONObject(1); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 3); - assertEquals(jsonArray.getString(0), annotIdTwo); - assertEquals(jsonArray.getString(1), annotIdThree); - assertEquals(jsonArray.getString(2), annotIdFour); - - // size is now just 1 - jsonObject = discrepanciesList.getJSONObject(2); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 1); - assertEquals(jsonArray.getString(0), annotIdThree); - - jsonObject = discrepanciesList.getJSONObject(3); - jsonArray = jsonObject.getJSONArray("idsOfCoveringAnnotations"); - assertEquals(jsonArray.length(), 2); - assertEquals(jsonArray.getString(0), annotIdThree); - assertEquals(jsonArray.getString(1), annotIdFour); - - // Should still be complete - actual = dispoConnector.allDiscrepanciesAnnotated(dispoItem); - assertEquals(DispoStrings.Item_Complete, actual); } } 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 cdcd9dcd652..e77d285b22b 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,7 @@ import org.junit.runners.Suite; * @author Angel Avila */ @RunWith(Suite.class) -@Suite.SuiteClasses({DispositionApiTest.class, DispoConnectorTest.class}) +@Suite.SuiteClasses({DispoApiTest.class, DispoConnectorTest.class, LocationRangesCompressorTest.class}) public class InternalTestSuite { // Test Suite } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/LocationRangesCompressorTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/LocationRangesCompressorTest.java new file mode 100644 index 00000000000..84e50dc99ce --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/internal/LocationRangesCompressorTest.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2013 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 java.util.ArrayList; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Angel Avila + */ +public class LocationRangesCompressorTest { + + @Test + public void testRangeCompressor() { + List<Integer> locationPoints = new ArrayList<Integer>(); + locationPoints.add(83); + locationPoints.add(84); + locationPoints.add(1); + locationPoints.add(3); + locationPoints.add(4); + locationPoints.add(21); + locationPoints.add(2); + String result = LocationRangesCompressor.compress(locationPoints); + + Assert.assertEquals("1-4, 21, 83-84", result); + } +} diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/AnnotationResourceTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/AnnotationResourceTest.java index 30318e0d695..dc18fc1ce23 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/AnnotationResourceTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/AnnotationResourceTest.java @@ -12,16 +12,18 @@ package org.eclipse.osee.disposition.rest.resources; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import javax.ws.rs.core.Response; import org.eclipse.osee.disposition.model.DispoAnnotationData; +import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoMessages; import org.eclipse.osee.disposition.model.DispoProgram; +import org.eclipse.osee.disposition.model.DispoStrings; import org.eclipse.osee.disposition.rest.DispoApi; -import org.eclipse.osee.disposition.rest.util.HtmlWriter; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; import org.eclipse.osee.framework.jdk.core.type.Identifiable; -import org.eclipse.osee.framework.jdk.core.type.ResultSet; -import org.eclipse.osee.framework.jdk.core.type.ResultSets; -import org.json.JSONArray; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -35,7 +37,9 @@ public class AnnotationResourceTest { @Mock private DispoApi dispositionApi; @Mock - private HtmlWriter htmlWriter; + private DispoItemData dispoItem; + @Mock + private DispoHtmlWriter htmlWriter; @Mock private Identifiable<String> id1; @Mock @@ -61,12 +65,12 @@ public class AnnotationResourceTest { annotationToCreate.setId(mockId); when(dispositionApi.createDispoAnnotation(program, "itemId", annotationToCreate)).thenReturn(mockId); - when(dispositionApi.getDispoAnnotationByIndex(program, "itemId", mockId)).thenReturn(annotationToCreate); + when(dispositionApi.getDispoAnnotationById(program, "itemId", mockId)).thenReturn(annotationToCreate); DispoAnnotationData expectedAnnotation = new DispoAnnotationData(); expectedAnnotation.setLocationRefs(annotationToCreate.getLocationRefs()); expectedAnnotation.setId(mockId); - when(dispositionApi.getDispoAnnotationByIndex(program, id1.getGuid(), mockId)).thenReturn(expectedAnnotation); + when(dispositionApi.getDispoAnnotationById(program, id1.getGuid(), mockId)).thenReturn(expectedAnnotation); Response postResponse = resource.postDispoAnnotation(annotationToCreate); DispoAnnotationData returnedEntity = (DispoAnnotationData) postResponse.getEntity(); @@ -87,24 +91,25 @@ public class AnnotationResourceTest { } @Test - public void testGetAllAsHtml() { - // No Annotations3 - ResultSet<DispoAnnotationData> emptyResultSet = ResultSets.emptyResultSet(); + public void testGetAllAsHtml() throws IOException { + // No Annotations + List<DispoAnnotationData> emptyResultSet = new ArrayList<DispoAnnotationData>(); when(dispositionApi.getDispoAnnotations(program, "itemId")).thenReturn(emptyResultSet); + when(htmlWriter.createSubTable(emptyResultSet)).thenReturn("htmlFromWriter"); Response noAnnotationsReponse = resource.getAllDispoAnnotations(); - String messageActual = (String) noAnnotationsReponse.getEntity(); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), noAnnotationsReponse.getStatus()); - assertEquals(DispoMessages.Annotation_NoneFound, messageActual); + assertEquals(Response.Status.OK.getStatusCode(), noAnnotationsReponse.getStatus()); + String html = (String) noAnnotationsReponse.getEntity(); + assertEquals("htmlFromWriter", html); DispoAnnotationData annotation = new DispoAnnotationData(); annotation.setId(mockId); annotation.setLocationRefs("1-10"); - ResultSet<DispoAnnotationData> resultSet = ResultSets.singleton(annotation); + List<DispoAnnotationData> resultSet = new ArrayList<DispoAnnotationData>(); when(dispositionApi.getDispoAnnotations(program, "itemId")).thenReturn(resultSet); - when(htmlWriter.createDispositionPage("Annotations", "annotation/", resultSet)).thenReturn("htmlFromWriter"); + when(htmlWriter.createSubTable(resultSet)).thenReturn("htmlFromWriter"); Response oneSetResponse = resource.getAllDispoAnnotations(); - String html = (String) oneSetResponse.getEntity(); + html = (String) oneSetResponse.getEntity(); assertEquals(Response.Status.OK.getStatusCode(), oneSetResponse.getStatus()); assertEquals("htmlFromWriter", html); } @@ -112,7 +117,7 @@ public class AnnotationResourceTest { @Test public void testGetSingleAsJson() { // No items - when(dispositionApi.getDispoAnnotationByIndex(program, "itemId", mockId)).thenReturn(null); + when(dispositionApi.getDispoAnnotationById(program, "itemId", mockId)).thenReturn(null); Response noAnnotationsResponse = resource.getAnnotationByIdJson(mockId); String messageActual = (String) noAnnotationsResponse.getEntity(); assertEquals(Response.Status.NOT_FOUND.getStatusCode(), noAnnotationsResponse.getStatus()); @@ -121,7 +126,7 @@ public class AnnotationResourceTest { DispoAnnotationData expectedAnnotation = new DispoAnnotationData(); expectedAnnotation.setId(mockId); expectedAnnotation.setLocationRefs("1-10"); - when(dispositionApi.getDispoAnnotationByIndex(program, "itemId", expectedAnnotation.getId())).thenReturn( + when(dispositionApi.getDispoAnnotationById(program, "itemId", expectedAnnotation.getId())).thenReturn( expectedAnnotation); Response oneSetResponse = resource.getAnnotationByIdJson(expectedAnnotation.getId()); DispoAnnotationData returnedItem = (DispoAnnotationData) oneSetResponse.getEntity(); @@ -130,29 +135,6 @@ public class AnnotationResourceTest { } @Test - public void testGetSingleAsHtml() { - // No Items - when(dispositionApi.getDispoAnnotationByIndex(program, "itemId", mockId)).thenReturn(null); - Response noItemsResponse = resource.getAnnotationByIdHtml(mockId); - String messageActual = (String) noItemsResponse.getEntity(); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), noItemsResponse.getStatus()); - assertEquals(DispoMessages.Annotation_NotFound, messageActual); - - DispoAnnotationData expectedAnnotation = new DispoAnnotationData(); - expectedAnnotation.setId(mockId); - expectedAnnotation.setLocationRefs("1-10"); - JSONArray notes = new JSONArray(); - expectedAnnotation.setNotesList(notes); - when(dispositionApi.getDispoAnnotationByIndex(program, "itemId", expectedAnnotation.getId())).thenReturn( - expectedAnnotation); - when(htmlWriter.createDispoPage(expectedAnnotation.getName(), "", "", "[]")).thenReturn("htmlFromWriter"); - Response response = resource.getAnnotationByIdHtml(expectedAnnotation.getId()); - String returnedHtml = (String) response.getEntity(); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); - assertEquals("htmlFromWriter", returnedHtml); - } - - @Test public void testPut() { DispoAnnotationData newAnnotation = new DispoAnnotationData(); newAnnotation.setLocationRefs("2-11"); @@ -160,8 +142,11 @@ public class AnnotationResourceTest { annotationToEdit.setId(mockId); when(dispositionApi.editDispoAnnotation(program, "itemId", annotationToEdit.getId(), newAnnotation)).thenReturn( true); + when(dispositionApi.getDispoItemById(program, "itemId")).thenReturn(dispoItem); + when(dispoItem.getStatus()).thenReturn(DispoStrings.Item_Complete); Response response = resource.putDispoAnnotation(annotationToEdit.getId(), newAnnotation); assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + assertEquals(DispoStrings.Item_Complete, response.getEntity()); when(dispositionApi.editDispoAnnotation(program, "itemId", annotationToEdit.getId(), newAnnotation)).thenReturn( false); @@ -174,8 +159,11 @@ public class AnnotationResourceTest { DispoAnnotationData annotationToEdit = new DispoAnnotationData(); annotationToEdit.setId(mockId); when(dispositionApi.deleteDispoAnnotation(program, "itemId", annotationToEdit.getId())).thenReturn(true); + when(dispositionApi.getDispoItemById(program, "itemId")).thenReturn(dispoItem); + when(dispoItem.getStatus()).thenReturn(DispoStrings.Item_InComplete); Response response = resource.deleteDispoAnnotation(annotationToEdit.getId()); assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + assertEquals(DispoStrings.Item_InComplete, response.getEntity()); when(dispositionApi.deleteDispoAnnotation(program, "itemId", annotationToEdit.getId())).thenReturn(false); response = resource.deleteDispoAnnotation(annotationToEdit.getId()); diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoItemResourceTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoItemResourceTest.java index aa369b07a39..f0657f6613f 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoItemResourceTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoItemResourceTest.java @@ -12,16 +12,20 @@ package org.eclipse.osee.disposition.rest.resources; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import javax.ws.rs.core.Response; -import org.eclipse.osee.disposition.model.DispoAnnotationData; + +import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoMessages; import org.eclipse.osee.disposition.model.DispoProgram; import org.eclipse.osee.disposition.rest.DispoApi; -import org.eclipse.osee.disposition.rest.util.HtmlWriter; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; import org.eclipse.osee.framework.jdk.core.type.Identifiable; -import org.eclipse.osee.framework.jdk.core.type.ResultSet; -import org.eclipse.osee.framework.jdk.core.type.ResultSets; import org.eclipse.osee.orcs.data.ArtifactReadable; import org.junit.Before; import org.junit.Test; @@ -36,7 +40,7 @@ public class DispoItemResourceTest { @Mock private DispoApi dispositionApi; @Mock - private HtmlWriter htmlWriter; + private DispoHtmlWriter htmlWriter; @Mock private Identifiable<String> id1; @Mock @@ -58,26 +62,19 @@ public class DispoItemResourceTest { } @Test - public void testGetAllAsHtml() { + public void testGetAllAsHtml() throws Exception { // No Items - ResultSet<DispoItemData> emptyResultSet = ResultSets.emptyResultSet(); + List<DispoItem> emptyResultSet = new ArrayList<DispoItem>(); when(dispositionApi.getDispoItems(program, "setId")).thenReturn(emptyResultSet); Response noItemsResponse = resource.getAllDispoItems(); - String messageActual = (String) noItemsResponse.getEntity(); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), noItemsResponse.getStatus()); - assertEquals(DispoMessages.Item_NoneFound, messageActual); + assertEquals(Response.Status.OK.getStatusCode(), noItemsResponse.getStatus()); - DispoItemData item = new DispoItemData(); - item.setGuid(id1.getGuid()); - item.setName("Item"); - ResultSet<DispoItemData> resultSet = ResultSets.singleton(item); + DispoItem item = new DispoItemData(); + List<DispoItem> resultSet = Collections.singletonList(item); when(dispositionApi.getDispoItems(program, "setId")).thenReturn(resultSet); - when(htmlWriter.createDispositionPage("Dispositionable Items", "item/", resultSet)).thenReturn("htmlFromWriter"); Response oneSetResponse = resource.getAllDispoItems(); - String html = (String) oneSetResponse.getEntity(); assertEquals(Response.Status.OK.getStatusCode(), oneSetResponse.getStatus()); - assertEquals("htmlFromWriter", html); } @Test @@ -100,31 +97,6 @@ public class DispoItemResourceTest { } @Test - public void testGetSingleSetAsHtml() { - // No Items - when(dispositionApi.getDispoItemById(program, id2.getGuid())).thenReturn(null); - Response noItemsResponse = resource.getDispoItemsByIdHtml(id2.getGuid()); - String messageActual = (String) noItemsResponse.getEntity(); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), noItemsResponse.getStatus()); - assertEquals(DispoMessages.Item_NotFound, messageActual); - - DispoItemData item = new DispoItemData(); - item.setGuid(id1.getGuid()); - item.setName("item"); - ResultSet<DispoAnnotationData> emptyResultSet = ResultSets.emptyResultSet(); - ResultSet<DispoAnnotationData> resultAnnotations = emptyResultSet; - when(dispositionApi.getDispoItemById(program, item.getGuid())).thenReturn(item); - when(dispositionApi.getDispoAnnotations(program, id1.getGuid())).thenReturn(resultAnnotations); - String prefixPath = item.getGuid() + "/annotation"; - String subTitle = "Annotations"; - when(htmlWriter.createDispoPage(item.getName(), prefixPath, subTitle, "[]")).thenReturn("htmlFromWriter"); - Response response = resource.getDispoItemsByIdHtml(item.getGuid()); - String returnedHtml = (String) response.getEntity(); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); - assertEquals("htmlFromWriter", returnedHtml); - } - - @Test public void testPut() { DispoItemData newItem = new DispoItemData(); DispoItemData itemToEdt = new DispoItemData(); diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoProgramResourceTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoProgramResourceTest.java index 4c2dd51fe22..e5c40e6d449 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoProgramResourceTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoProgramResourceTest.java @@ -17,7 +17,7 @@ import org.eclipse.osee.disposition.model.DispoMessages; import org.eclipse.osee.disposition.model.DispoProgram; import org.eclipse.osee.disposition.rest.DispoApi; import org.eclipse.osee.disposition.rest.util.DispoFactory; -import org.eclipse.osee.disposition.rest.util.HtmlWriter; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.data.TokenFactory; import org.eclipse.osee.framework.jdk.core.type.ResultSet; @@ -35,7 +35,7 @@ public class DispoProgramResourceTest { @Mock private DispoApi dispoApi; @Mock - private HtmlWriter htmlWriter; + private DispoHtmlWriter htmlWriter; @Mock private DispoProgram id1; @Mock @@ -67,32 +67,10 @@ public class DispoProgramResourceTest { ResultSet<IOseeBranch> branchList = ResultSets.singleton(branch); when(dispoApi.getDispoPrograms()).thenReturn(branchList); - when(htmlWriter.createDispositionPage("Programs", "", branchList)).thenReturn("htmlFromWriter"); + when(htmlWriter.createSelectPrograms(branchList)).thenReturn("htmlFromWriter"); Response oneSetResponse = resource.getAllPrograms(); String html = (String) oneSetResponse.getEntity(); assertEquals(Response.Status.OK.getStatusCode(), oneSetResponse.getStatus()); assertEquals("htmlFromWriter", html); } - - @Test - public void testGetProgramById() { - // No Sets - when(dispoApi.getDispoProgramById(id2)).thenReturn(null); - Response noSetsResponse = resource.getProgramById(String.valueOf(id2.getUuid())); - String messageActual = (String) noSetsResponse.getEntity(); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), noSetsResponse.getStatus()); - assertEquals(DispoMessages.Program_NotFound, messageActual); - - IOseeBranch testBranch = TokenFactory.createBranch(id1.getUuid(), "testBranch"); - when(dispoFactory.createProgram(String.valueOf(id1.getUuid()))).thenReturn(id1); - when(dispoApi.getDispoProgramById(id1)).thenReturn(testBranch); - String prefixPath = testBranch.getUuid() + "/set"; - String subTitle = "Disposition Sets"; - when(htmlWriter.createDispoPage(testBranch.getName(), prefixPath, subTitle, "[]")).thenReturn("htmlFromWriter"); - - Response response = resource.getProgramById(String.valueOf(testBranch.getUuid())); - String returnedHtml = (String) response.getEntity(); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); - assertEquals("htmlFromWriter", returnedHtml); - } } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoSetResourceTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoSetResourceTest.java index 169c89b08d4..ecfe4433b97 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoSetResourceTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/resources/DispoSetResourceTest.java @@ -12,18 +12,18 @@ package org.eclipse.osee.disposition.rest.resources; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import javax.ws.rs.core.Response; -import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoMessages; import org.eclipse.osee.disposition.model.DispoProgram; +import org.eclipse.osee.disposition.model.DispoSet; import org.eclipse.osee.disposition.model.DispoSetData; import org.eclipse.osee.disposition.model.DispoSetDescriptorData; import org.eclipse.osee.disposition.rest.DispoApi; -import org.eclipse.osee.disposition.rest.util.HtmlWriter; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; import org.eclipse.osee.framework.jdk.core.type.Identifiable; -import org.eclipse.osee.framework.jdk.core.type.ResultSet; -import org.eclipse.osee.framework.jdk.core.type.ResultSets; -import org.json.JSONArray; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -37,7 +37,7 @@ public class DispoSetResourceTest { @Mock private DispoApi dispositionApi; @Mock - private HtmlWriter htmlWriter; + private DispoHtmlWriter htmlWriter; @Mock private Identifiable<String> id1; @Mock @@ -116,20 +116,18 @@ public class DispoSetResourceTest { @Test public void testGetAllAsHtml() { // No Sets - ResultSet<DispoSetData> emptyResultSet = ResultSets.emptyResultSet(); + List<DispoSet> emptyResultSet = new ArrayList<DispoSet>(); when(dispositionApi.getDispoSets(program)).thenReturn(emptyResultSet); Response noSetsResponse = resource.getAllDispoSets(); String messageActual = (String) noSetsResponse.getEntity(); assertEquals(Response.Status.NOT_FOUND.getStatusCode(), noSetsResponse.getStatus()); assertEquals(DispoMessages.Set_NoneFound, messageActual); - DispoSetData set = new DispoSetData(); - set.setGuid(id1.getGuid()); - set.setName("Set"); - ResultSet<DispoSetData> resultSet = ResultSets.singleton(set); + DispoSet set = new DispoSetData(); + List<DispoSet> resultSet = Collections.singletonList(set); when(dispositionApi.getDispoSets(program)).thenReturn(resultSet); - when(htmlWriter.createDispositionPage("Disposition Sets", "set/", resultSet)).thenReturn("htmlFromWriter"); + when(htmlWriter.createSelectSet(resultSet)).thenReturn("htmlFromWriter"); Response oneSetResponse = resource.getAllDispoSets(); String html = (String) oneSetResponse.getEntity(); assertEquals(Response.Status.OK.getStatusCode(), oneSetResponse.getStatus()); @@ -152,34 +150,7 @@ public class DispoSetResourceTest { Response oneSetResponse = resource.getDispoSetByIdJson(expectedSet.getGuid()); DispoSetData returnedSet = (DispoSetData) oneSetResponse.getEntity(); assertEquals(Response.Status.OK.getStatusCode(), oneSetResponse.getStatus()); - assertEquals(expectedSet, returnedSet); - } - - @Test - public void testGetSingleSetAsHtml() { - // No Sets - when(dispositionApi.getDispoSetById(program, id2.getGuid())).thenReturn(null); - Response noSetsResponse = resource.getDispoSetByIdHtml(id2.getGuid()); - String messageActual = (String) noSetsResponse.getEntity(); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), noSetsResponse.getStatus()); - assertEquals(DispoMessages.Set_NotFound, messageActual); - - DispoSetData set = new DispoSetData(); - set.setGuid(id1.getGuid()); - set.setName("set"); - JSONArray notesArray = new JSONArray(); - set.setNotesList(notesArray); - ResultSet<DispoItemData> emptyResultSet = ResultSets.emptyResultSet(); - ResultSet<DispoItemData> resultListItems = emptyResultSet; - when(dispositionApi.getDispoSetById(program, id1.getGuid())).thenReturn(set); - when(dispositionApi.getDispoItems(program, id1.getGuid())).thenReturn(resultListItems); - String prefixPath = set.getGuid() + "/item"; - String subTitle = "Dispositionable Items"; - when(htmlWriter.createDispoPage(set.getName(), prefixPath, subTitle, "[]")).thenReturn("htmlFromWriter"); - Response response = resource.getDispoSetByIdHtml(set.getGuid()); - String returnedHtml = (String) response.getEntity(); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); - assertEquals("htmlFromWriter", returnedHtml); + assertEquals(expectedSet.getGuid(), returnedSet.getGuid()); } @Test diff --git a/plugins/org.eclipse.osee.disposition.rest/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.disposition.rest/META-INF/MANIFEST.MF index 979cfca71f2..bd71f52e234 100644 --- a/plugins/org.eclipse.osee.disposition.rest/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.disposition.rest/META-INF/MANIFEST.MF @@ -7,15 +7,18 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-Vendor: Eclipse Open System Engineering Environment Service-Component: OSGI-INF/*.xml Import-Package: + com.google.common.collect, javax.ws.rs, javax.ws.rs.core, javax.ws.rs.ext, org.eclipse.osee.disposition.model, + org.eclipse.osee.executor.admin, org.eclipse.osee.framework.core.data, org.eclipse.osee.framework.core.enums, org.eclipse.osee.framework.core.model, org.eclipse.osee.framework.jdk.core.type, org.eclipse.osee.framework.jdk.core.util, + org.eclipse.osee.framework.jdk.core.util.io.xml, org.eclipse.osee.framework.resource.management, org.eclipse.osee.framework.resource.management.util, org.eclipse.osee.logger, diff --git a/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/disposition.app.xml b/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/disposition.app.xml index 27a82c01251..40cddb3d382 100644 --- a/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/disposition.app.xml +++ b/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/disposition.app.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop"> <implementation class="org.eclipse.osee.disposition.rest.resources.DispoApplication"/> <service> <provide interface="javax.ws.rs.core.Application"/> diff --git a/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/disposition.service.xml b/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/disposition.service.xml index e3f2a1b70d8..e04df0dd7b0 100644 --- a/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/disposition.service.xml +++ b/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/disposition.service.xml @@ -8,4 +8,6 @@ <reference bind="setDataFactory" cardinality="1..1" interface="org.eclipse.osee.disposition.rest.internal.DispoDataFactory" name="DispoDataFactory" policy="static"/> <reference bind="setDispoConnector" cardinality="1..1" interface="org.eclipse.osee.disposition.rest.internal.DispoConnector" name="DispoConnector" policy="static"/> <reference bind="setLogger" cardinality="1..1" interface="org.eclipse.osee.logger.Log" name="Log" policy="static"/> + <reference bind="setResolutionValidator" cardinality="1..1" interface="org.eclipse.osee.disposition.rest.internal.DispoResolutionValidator" name="DispoResolutionValidator" policy="static"/> + <reference bind="setExecutor" cardinality="1..1" interface="org.eclipse.osee.executor.admin.ExecutorAdmin" name="ExecutorAdmin" policy="static"/> </scr:component> diff --git a/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/resolution.validator.service.xml b/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/resolution.validator.service.xml new file mode 100644 index 00000000000..70a334d0ac9 --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest/OSGI-INF/resolution.validator.service.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop"> + <implementation class="org.eclipse.osee.disposition.rest.internal.DispoResolutionValidator"/> + <service> + <provide interface="org.eclipse.osee.disposition.rest.internal.DispoResolutionValidator"/> + </service> + <reference bind="setLogger" cardinality="1..1" interface="org.eclipse.osee.logger.Log" name="Log" policy="static"/> +</scr:component> diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/DispoApi.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/DispoApi.java index c368d21418d..13c9b50dfdd 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/DispoApi.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/DispoApi.java @@ -10,9 +10,12 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest; +import java.util.List; import org.eclipse.osee.disposition.model.DispoAnnotationData; +import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoProgram; +import org.eclipse.osee.disposition.model.DispoSet; import org.eclipse.osee.disposition.model.DispoSetData; import org.eclipse.osee.disposition.model.DispoSetDescriptorData; import org.eclipse.osee.disposition.rest.util.DispoFactory; @@ -26,22 +29,19 @@ import org.eclipse.osee.framework.jdk.core.type.ResultSet; public interface DispoApi { // Queries - - IOseeBranch getDispoProgramById(DispoProgram program); - ResultSet<IOseeBranch> getDispoPrograms(); - ResultSet<DispoSetData> getDispoSets(DispoProgram program); + List<DispoSet> getDispoSets(DispoProgram program); - DispoSetData getDispoSetById(DispoProgram program, String dispoSetId); + DispoSet getDispoSetById(DispoProgram program, String dispoSetId); - ResultSet<DispoItemData> getDispoItems(DispoProgram program, String dispoSetId); + List<DispoItem> getDispoItems(DispoProgram program, String dispoSetId); - DispoItemData getDispoItemById(DispoProgram program, String itemId); + DispoItem getDispoItemById(DispoProgram program, String itemId); - ResultSet<DispoAnnotationData> getDispoAnnotations(DispoProgram program, String itemId); + List<DispoAnnotationData> getDispoAnnotations(DispoProgram program, String itemId); - DispoAnnotationData getDispoAnnotationByIndex(DispoProgram program, String itemId, String annotationId); + DispoAnnotationData getDispoAnnotationById(DispoProgram program, String itemId, String annotationId); // Writes Identifiable<String> createDispoSet(DispoProgram program, DispoSetDescriptorData descriptor); diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/DispoConstants.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/DispoConstants.java index 04cc23945d5..5a4e9a07d13 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/DispoConstants.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/DispoConstants.java @@ -12,9 +12,7 @@ package org.eclipse.osee.disposition.rest; import org.eclipse.osee.framework.core.data.IArtifactType; import org.eclipse.osee.framework.core.data.IAttributeType; -import org.eclipse.osee.framework.core.data.IRelationTypeSide; import org.eclipse.osee.framework.core.data.TokenFactory; -import org.eclipse.osee.framework.core.enums.RelationSide; import org.eclipse.osee.orcs.data.ArtifactId; import org.eclipse.osee.orcs.utility.OrcsUtil; @@ -28,7 +26,6 @@ public final class DispoConstants { public static final IArtifactType DispoItem = TokenFactory.createArtifactType(0x0000000000000328, "Dispositionable Item"); public static final IAttributeType ImportPath= TokenFactory.createAttributeType(0x1000000000000389L, "dispo.Import Path"); - public static final IAttributeType StatusCount= TokenFactory.createAttributeType(0x1000000000000390L, "dispo.Status Count"); public static final IAttributeType ImportState= TokenFactory.createAttributeType(0x3000000000000196L, "dispo.Import State"); public static final IAttributeType DispoAnnotationsJson = TokenFactory.createAttributeType(0x1000000000000386L, "dispo.Annotations JSON"); public static final IAttributeType DispoDiscrepanciesJson = TokenFactory.createAttributeType(0x1000000000000387L, "dispo.Discrepancies JSON"); @@ -36,10 +33,9 @@ public final class DispoConstants { public static final IAttributeType DispoDateCreated = TokenFactory.createAttributeType(0x1000000000000391L, "dispo.Date Created"); public static final IAttributeType DispoLastUpdated = TokenFactory.createAttributeType(0x1000000000000392L, "dispo.Last Updated"); public static final IAttributeType DispoItemStatus = TokenFactory.createAttributeType(0x3000000000000198L, "dispo.Item Status"); + public static final IAttributeType DispoItemVersion = TokenFactory.createAttributeType(0x3000000000000200L, "dispo.Item Version"); + public static final IAttributeType DispoItemAssignee = TokenFactory.createAttributeType(0x3000000000000201L, "dispo.Assignee"); - public static final IRelationTypeSide DispoAssigned_Item = TokenFactory.createRelationTypeSide(RelationSide.SIDE_A, 0x2000000000000181L, "dispo.Assigned"); - public static final IRelationTypeSide DispoAssigned_Assignee = DispoAssigned_Item.getOpposite(); - public static final ArtifactId DispoTypesArtifact = OrcsUtil.newArtifactId("BEQGMZJDBHPd4OeWg6AA", "DispositionTypes"); // @formatter:on 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 901f5d3d1e5..93995cc6857 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 @@ -10,10 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest.internal; -import static org.eclipse.osee.disposition.model.DispoStrings.Item_Complete; -import static org.eclipse.osee.disposition.model.DispoStrings.Item_Pass; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import org.eclipse.osee.disposition.model.DispoAnnotationData; import org.eclipse.osee.disposition.model.DispoItem; @@ -25,11 +22,11 @@ import org.eclipse.osee.disposition.model.DispoSetDescriptorData; import org.eclipse.osee.disposition.rest.DispoApi; import org.eclipse.osee.disposition.rest.util.DispoFactory; import org.eclipse.osee.disposition.rest.util.DispoUtil; +import org.eclipse.osee.executor.admin.ExecutorAdmin; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.jdk.core.type.Identifiable; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.type.ResultSet; -import org.eclipse.osee.framework.jdk.core.type.ResultSets; import org.eclipse.osee.logger.Log; import org.eclipse.osee.orcs.data.ArtifactReadable; import org.json.JSONArray; @@ -42,11 +39,18 @@ import org.json.JSONObject; public class DispoApiImpl implements DispoApi { + private ExecutorAdmin executor; + private Log logger; private StorageProvider storageProvider; private DispoDataFactory dataFactory; private DispoConnector dispoConnector; private DispoFactory dispoFactory; + private DispoResolutionValidator resolutionValidator; + + public void setExecutor(ExecutorAdmin executor) { + this.executor = executor; + } public void setLogger(Log logger) { this.logger = logger; @@ -64,6 +68,10 @@ public class DispoApiImpl implements DispoApi { this.storageProvider = storageProvider; } + public void setResolutionValidator(DispoResolutionValidator resolutionValidator) { + this.resolutionValidator = resolutionValidator; + } + public void start() { logger.trace("Starting DispoApiImpl..."); dispoFactory = new DispoFactoryImpl(); @@ -106,36 +114,34 @@ public class DispoApiImpl implements DispoApi { String idOfNewAnnotation = ""; DispoItem dispoItem = getQuery().findDispoItemById(program, itemId); if (dispoItem != null) { - dataFactory.initAnnotation(annotationToCreate); - idOfNewAnnotation = dataFactory.getNewId(); - annotationToCreate.setId(idOfNewAnnotation); - - boolean isValidResolution = false; - String resolution = annotationToCreate.getResolution(); - if (resolution != null) { - isValidResolution = validateResolution(resolution); - } - annotationToCreate.setIsResolutionValid(isValidResolution); + try { + JSONArray annotationsList = dispoItem.getAnnotationsList(); + dataFactory.initAnnotation(annotationToCreate); + idOfNewAnnotation = dataFactory.getNewId(); + annotationToCreate.setId(idOfNewAnnotation); + int indexOfAnnotation = annotationsList.length(); + annotationToCreate.setIndex(indexOfAnnotation); + + boolean isValidResolution = false; + String resolution = annotationToCreate.getResolution(); + if (resolution != null) { + isValidResolution = validateResolution(annotationToCreate); + } + annotationToCreate.setIsResolutionValid(isValidResolution); + + JSONObject discrepanciesList = dispoItem.getDiscrepanciesList(); - JSONArray discrepanciesList = dispoItem.getDiscrepanciesList(); - if (isValidResolution) { dispoConnector.connectAnnotation(annotationToCreate, discrepanciesList); - } - JSONObject annotationsList = dispoItem.getAnnotationsList(); - try { - annotationsList.put(idOfNewAnnotation, DispoUtil.annotationToJsonObj(annotationToCreate)); + + annotationsList.put(indexOfAnnotation, DispoUtil.annotationToJsonObj(annotationToCreate)); + + DispoItem updatedItem; + updatedItem = dataFactory.createUpdatedItem(annotationsList, discrepanciesList); + ArtifactReadable author = getQuery().findUser(); + getWriter().updateDispoItem(author, program, dispoItem.getGuid(), updatedItem); } catch (JSONException ex) { throw new OseeCoreException(ex); } - - String currentStatus = dispoItem.getStatus(); - boolean updateStatus = false; - if (!currentStatus.equals(Item_Complete) && !currentStatus.equals(Item_Pass) && annotationToCreate.isValid()) { - updateStatus = true; - } - DispoItem updatedItem = dataFactory.createUpdatedItem(annotationsList, discrepanciesList, updateStatus); - ArtifactReadable author = getQuery().findUser(); - getWriter().updateDispoItem(author, program, dispoItem.getGuid(), updatedItem); } return idOfNewAnnotation; } @@ -152,7 +158,7 @@ public class DispoApiImpl implements DispoApi { } if (newSet.getOperation() != null) { - runOperation(dispSetToEdit, newSet); + runOperation(program, dispSetToEdit, newSet); } ArtifactReadable author = getQuery().findUser(); @@ -173,15 +179,7 @@ public class DispoApiImpl implements DispoApi { boolean wasUpdated = false; DispoItem dispoItemToEdit = getQuery().findDispoItemById(program, itemId); - if (dispoItemToEdit != null && newDispoItem.getAnnotationsList() == null) { // We will not allow them to do mass edit of Annotations - // Check to see if we are editing the discrepancies - if (newDispoItem.getDiscrepanciesList() != null) { - JSONArray mergedDiscrepanciesList = - dataFactory.mergeJsonArrays(dispoItemToEdit.getDiscrepanciesList(), newDispoItem.getDiscrepanciesList()); - newDispoItem.setDiscrepanciesList(mergedDiscrepanciesList); - newDispoItem.setStatus(dispoConnector.allDiscrepanciesAnnotated(newDispoItem)); - } - + if (dispoItemToEdit != null && newDispoItem.getAnnotationsList() == null && newDispoItem.getDiscrepanciesList() == null) { // We will not allow the user to do mass edit of Annotations or discrepancies ArtifactReadable author = getQuery().findUser(); getWriter().updateDispoItem(author, program, dispoItemToEdit.getGuid(), newDispoItem); wasUpdated = true; @@ -200,19 +198,18 @@ public class DispoApiImpl implements DispoApi { boolean wasUpdated = false; DispoItem dispoItem = getQuery().findDispoItemById(program, itemId); if (dispoItem != null) { - JSONObject annotationsList = dispoItem.getAnnotationsList(); - JSONArray discrepanciesList = dispoItem.getDiscrepanciesList(); + JSONArray annotationsList = dispoItem.getAnnotationsList(); + JSONObject discrepanciesList = dispoItem.getDiscrepanciesList(); try { DispoAnnotationData oldAnnotation = - DispoUtil.jsonObjToDispoAnnotationData(annotationsList.getJSONObject(annotationId)); + DispoUtil.jsonObjToDispoAnnotationData(DispoUtil.getById(annotationsList, annotationId)); + int indexOfAnnotation = oldAnnotation.getIndex(); DispoAnnotationData consolidatedAnnotation = oldAnnotation; // Check if newAnnotation has notes, if it does then merge with old notes - JSONArray newNotes = newAnnotation.getNotesList(); - if (newNotes != null) { - consolidatedAnnotation.setNotesList(dataFactory.mergeJsonArrays(oldAnnotation.getNotesList(), newNotes)); - } + String newNotes = newAnnotation.getNotes(); + consolidatedAnnotation.setNotes(newNotes); // now if the new Annotation modified the location Reference or resolution then disconnect the annotation and try to match it to discrepancies again String newLocationRefs = newAnnotation.getLocationRefs(); @@ -220,22 +217,20 @@ public class DispoApiImpl implements DispoApi { if (newLocationRefs != null || newResolution != null) { if (newResolution != null) { consolidatedAnnotation.setResolution(newResolution); - consolidatedAnnotation.setIsResolutionValid(validateResolution(newResolution)); + consolidatedAnnotation.setIsResolutionValid(validateResolution(consolidatedAnnotation)); } if (newLocationRefs != null) { consolidatedAnnotation.setLocationRefs(newLocationRefs); } - dispoConnector.disconnectAnnotation(consolidatedAnnotation, discrepanciesList); - if (consolidatedAnnotation.getIsResolutionValid()) { - dispoConnector.connectAnnotation(consolidatedAnnotation, discrepanciesList); - } + consolidatedAnnotation.disconnect(); + dispoConnector.connectAnnotation(consolidatedAnnotation, discrepanciesList); } JSONObject annotationAsJsonObject = DispoUtil.annotationToJsonObj(consolidatedAnnotation); - annotationsList.put(annotationId, annotationAsJsonObject); + annotationsList.put(indexOfAnnotation, annotationAsJsonObject); - DispoItem updatedItem = dataFactory.createUpdatedItem(annotationsList, discrepanciesList, true); + DispoItem updatedItem = dataFactory.createUpdatedItem(annotationsList, discrepanciesList); ArtifactReadable author = getQuery().findUser(); getWriter().updateDispoItem(author, program, dispoItem.getGuid(), updatedItem); wasUpdated = true; @@ -251,20 +246,17 @@ public class DispoApiImpl implements DispoApi { boolean wasUpdated = false; DispoItem dispoItem = getQuery().findDispoItemById(program, itemId); if (dispoItem != null) { - JSONObject annotationsList = dispoItem.getAnnotationsList(); - JSONArray discrepanciesList = dispoItem.getDiscrepanciesList(); + JSONArray annotationsList = dispoItem.getAnnotationsList(); + JSONObject discrepanciesList = dispoItem.getDiscrepanciesList(); try { DispoAnnotationData annotationToRemove = - DispoUtil.jsonObjToDispoAnnotationData(annotationsList.getJSONObject(annotationId)); - // No need to update status for new item if the deleted annotation was invalid, status would remain the same - boolean updateStatus = false; - if (annotationToRemove.getIsConnected()) { - updateStatus = true; - } - dispoConnector.disconnectAnnotation(annotationToRemove, discrepanciesList); - annotationsList.remove(annotationId); + DispoUtil.jsonObjToDispoAnnotationData(DispoUtil.getById(annotationsList, annotationId)); + annotationToRemove.disconnect(); + + // collapse list so there are no gaps + JSONArray newAnnotationsList = collapseList(annotationsList, annotationToRemove.getIndex()); - DispoItem updatedItem = dataFactory.createUpdatedItem(annotationsList, discrepanciesList, updateStatus); + DispoItem updatedItem = dataFactory.createUpdatedItem(newAnnotationsList, discrepanciesList); ArtifactReadable author = getQuery().findUser(); getWriter().updateDispoItem(author, program, dispoItem.getGuid(), updatedItem); @@ -278,74 +270,53 @@ public class DispoApiImpl implements DispoApi { @Override public ResultSet<IOseeBranch> getDispoPrograms() { - List<IOseeBranch> results = new ArrayList<IOseeBranch>(); - ResultSet<? extends IOseeBranch> baselineBranches = getQuery().findBaselineBranches(); - for (IOseeBranch baselinebBranch : baselineBranches) { - results.add(baselinebBranch); - } - return ResultSets.newResultSet(results); + return getQuery().getDispoBranches(); } @Override - public IOseeBranch getDispoProgramById(DispoProgram program) { - return getQuery().findProgramId(program); + public List<DispoSet> getDispoSets(DispoProgram program) throws OseeCoreException { + return getQuery().findDispoSets(program); } @Override - public ResultSet<DispoSetData> getDispoSets(DispoProgram program) throws OseeCoreException { - return translateAllToDispoSetData(getQuery().findDispoSets(program)); + public DispoSet getDispoSetById(DispoProgram program, String setId) throws OseeCoreException { + return getQuery().findDispoSetsById(program, setId); } @Override - public DispoSetData getDispoSetById(DispoProgram program, String setId) throws OseeCoreException { - return DispoUtil.setArtToSetData(getQuery().findDispoSetsById(program, setId)); + public List<DispoItem> getDispoItems(DispoProgram program, String setArtId) { + return getQuery().findDipoItems(program, setArtId); } @Override - public ResultSet<DispoItemData> getDispoItems(DispoProgram program, String setArtId) { - return translateAllToDispoItemData(getQuery().findDipoItems(program, setArtId)); + public DispoItem getDispoItemById(DispoProgram program, String itemId) { + return getQuery().findDispoItemById(program, itemId); } @Override - public DispoItemData getDispoItemById(DispoProgram program, String itemId) { - DispoItemData dispositionableItem; - DispoItem result = getQuery().findDispoItemById(program, itemId); - if (result != null) { - dispositionableItem = DispoUtil.itemArtToItemData(result); - } else { - dispositionableItem = null; - } - return dispositionableItem; - } - - @Override - public ResultSet<DispoAnnotationData> getDispoAnnotations(DispoProgram program, String itemId) { + public List<DispoAnnotationData> getDispoAnnotations(DispoProgram program, String itemId) { List<DispoAnnotationData> toReturn = new ArrayList<DispoAnnotationData>(); DispoItem dispoItem = getQuery().findDispoItemById(program, itemId); - JSONObject annotationsList = dispoItem.getAnnotationsList(); - @SuppressWarnings("unchecked") - Iterator<String> keys = annotationsList.keys(); + JSONArray annotationsList = dispoItem.getAnnotationsList(); try { - while (keys.hasNext()) { - toReturn.add(DispoUtil.jsonObjToDispoAnnotationData(annotationsList.getJSONObject(keys.next()))); + for (int i = 0; i < annotationsList.length(); i++) { + toReturn.add(DispoUtil.jsonObjToDispoAnnotationData(annotationsList.getJSONObject(i))); } } catch (JSONException ex) { throw new OseeCoreException(ex); } - return ResultSets.newResultSet(toReturn); + return toReturn; } @Override - public DispoAnnotationData getDispoAnnotationByIndex(DispoProgram program, String itemId, String annotationId) { + public DispoAnnotationData getDispoAnnotationById(DispoProgram program, String itemId, String annotationId) { DispoAnnotationData toReturn = new DispoAnnotationData(); DispoItem dispoItem = getQuery().findDispoItemById(program, itemId); - JSONObject annotationsList = dispoItem.getAnnotationsList(); - if (annotationsList.has(annotationId)) { - try { - toReturn = DispoUtil.jsonObjToDispoAnnotationData(annotationsList.getJSONObject(annotationId)); - } catch (JSONException ex) { - throw new OseeCoreException(ex); - } + JSONArray annotationsList = dispoItem.getAnnotationsList(); + JSONObject annotationInList = DispoUtil.getById(annotationsList, annotationId); + if (annotationInList != null) { + toReturn = DispoUtil.jsonObjToDispoAnnotationData(annotationInList); + } else { toReturn = null; } @@ -353,40 +324,37 @@ public class DispoApiImpl implements DispoApi { } @Override - public boolean isUniqueSetName(DispoProgram program, String name) { - return getQuery().isUniqueSetName(program, name); - } - - @Override public boolean isUniqueItemName(DispoProgram program, String setId, String name) { return getQuery().isUniqueItemName(program, setId, name); } - private ResultSet<DispoItemData> translateAllToDispoItemData(ResultSet<DispoItem> list) { - List<DispoItemData> toReturn = new ArrayList<DispoItemData>(); - for (DispoItem item : list) { - toReturn.add(DispoUtil.itemArtToItemData(item)); - } - - return ResultSets.newResultSet(toReturn); + @Override + public boolean isUniqueSetName(DispoProgram program, String name) { + return getQuery().isUniqueSetName(program, name); } - private ResultSet<DispoSetData> translateAllToDispoSetData(ResultSet<DispoSet> list) { - List<DispoSetData> toReturn = new ArrayList<DispoSetData>(); - for (DispoSet set : list) { - toReturn.add(DispoUtil.setArtToSetData(set)); - } - - return ResultSets.newResultSet(toReturn); + private void runOperation(DispoProgram program, DispoSet setToEdit, DispoSetData newSet) { + //do nothing } - private void runOperation(DispoSet setToEdit, DispoSetData newSet) { - // Add operation Functionality here + private JSONArray collapseList(JSONArray oldList, int indexRemoved) throws JSONException { + // JSONArray's remove(index) leaves a gap so this method was created to get around that + // If the implementation is changed and remove(index) collapses the list, then this method can be removed + JSONArray newList = new JSONArray(); + for (int i = 0; i < indexRemoved; i++) { + newList.put(i, oldList.getJSONObject(i)); + } + for (int i = indexRemoved + 1; i < oldList.length(); i++) { + JSONObject annotationObject = oldList.getJSONObject(i); + DispoAnnotationData annotation = DispoUtil.jsonObjToDispoAnnotationData(annotationObject); + annotation.setIndex(annotation.getIndex() - 1); + newList.put(annotation.getIndex(), DispoUtil.annotationToJsonObj(annotation)); + } + return newList; } - private boolean validateResolution(String resolution) { - return resolution.equals("VALID"); - // Add PCR validation Functionality here + private boolean validateResolution(DispoAnnotationData annotation) { + return resolutionValidator.validate(annotation); } @Override 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 17a1144143a..d2b85dcb9fa 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,9 @@ package org.eclipse.osee.disposition.rest.internal; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Stack; import java.util.StringTokenizer; @@ -20,11 +23,9 @@ import org.eclipse.osee.disposition.model.DispoAnnotationData; import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoStrings; import org.eclipse.osee.disposition.model.LocationRange; -import org.eclipse.osee.disposition.rest.util.DiscrepancyComperator; import org.eclipse.osee.disposition.rest.util.DispoUtil; import org.eclipse.osee.disposition.rest.util.LocationRangeComparator; import org.eclipse.osee.disposition.rest.util.LocationRangeUtil; -import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.logger.Log; import org.json.JSONArray; import org.json.JSONException; @@ -50,91 +51,139 @@ public class DispoConnector { logger.trace("Stopping DispoConnector..."); } - public String allDiscrepanciesAnnotated(DispoItem item) { + public String allDiscrepanciesAnnotated(DispoItem item) throws JSONException { String toReturn; - JSONArray discrepancies = item.getDiscrepanciesList(); - JSONObject annotations = item.getAnnotationsList(); + JSONObject discrepancies = item.getDiscrepanciesList(); + JSONArray annotatinos = item.getAnnotationsList(); + HashSet<Integer> allCoveredDiscrepancies = getAllCoveredDiscrepanciesFromAnnotations(discrepancies, annotatinos); + ArrayList<Integer> allDiscrepancies = createDiscrepanciesList(discrepancies); - int discrepanciesSize = discrepancies.length(); - if (discrepanciesSize == 0) { - toReturn = DispoStrings.Item_Pass; + allDiscrepancies.removeAll(allCoveredDiscrepancies); + + boolean allDiscrepanciesCovered = false; + if (allDiscrepancies.isEmpty()) { + allDiscrepanciesCovered = true; } else { - boolean allDiscrepanciesCovered = true; // Assume everything is covered, on first false we break and return false - for (int i = 0; i < discrepanciesSize; i++) { - try { - JSONObject discrepancyObject = discrepancies.getJSONObject(i); - Discrepancy discrepancy = DispoUtil.jsonObjToDiscrepancy(discrepancyObject); - List<LocationRange> locRefsAsSortedList = getAllLocRefsAsSortedList(annotations, discrepancy); - if (!LocationRangeUtil.isCovered(discrepancy.getLocationRange(), locRefsAsSortedList)) { - allDiscrepanciesCovered = false; - // We found a discrepancy that hasn't been fully covered - break; - } - } catch (JSONException ex) { - throw new OseeCoreException(ex); - } + allDiscrepanciesCovered = false; + } + + if (allAnnotationsValid(annotatinos) && allDiscrepanciesCovered) { + toReturn = DispoStrings.Item_Complete; + } else { + toReturn = DispoStrings.Item_InComplete; + } + + return toReturn; + } + + private boolean allAnnotationsValid(JSONArray annotatinos) throws JSONException { + int length = annotatinos.length(); + for (int i = 0; i < length; i++) { + JSONObject annotationAsJson = annotatinos.getJSONObject(i); + DispoAnnotationData annotation = DispoUtil.jsonObjToDispoAnnotationData(annotationAsJson); + if (!annotation.isValid()) { + return false; } + } - if (allDiscrepanciesCovered) { - toReturn = DispoStrings.Item_Complete; - } else { - toReturn = DispoStrings.Item_InComplete; + return true; + } + + @SuppressWarnings("unchecked") + private ArrayList<Integer> createDiscrepanciesList(JSONObject discrepancies) throws JSONException { + ArrayList<Integer> toReturn = new ArrayList<Integer>(); + Iterator<String> iterator = discrepancies.keys(); + while (iterator.hasNext()) { + String key = iterator.next(); + JSONObject discrepancyAsJson = discrepancies.getJSONObject(key); + Discrepancy discrepancy = DispoUtil.jsonObjToDiscrepancy(discrepancyAsJson); + toReturn.add(discrepancy.getLocation()); + } + + return toReturn; + } + + private HashSet<Integer> getAllCoveredDiscrepanciesFromAnnotations(JSONObject discrepancies, JSONArray annotations) throws JSONException { + HashSet<Integer> toReturn = new HashSet<Integer>(); + int length = annotations.length(); + for (int j = 0; j < length; j++) { + JSONObject annotationAsObject = annotations.getJSONObject(j); + DispoAnnotationData annotation = DispoUtil.jsonObjToDispoAnnotationData(annotationAsObject); + JSONArray idsOfCoveredDiscrepancies = annotation.getIdsOfCoveredDiscrepancies(); + for (int i = 0; i < idsOfCoveredDiscrepancies.length(); i++) { + String id = idsOfCoveredDiscrepancies.getString(i); + if (discrepancies.has(id)) { + JSONObject discrepancyAsJson = discrepancies.getJSONObject(id); + Discrepancy discrepancy = DispoUtil.jsonObjToDiscrepancy(discrepancyAsJson); + toReturn.add(discrepancy.getLocation()); + } else { + String justTestPoint = id.replaceAll(DispoStrings.DeletedDiscrepancy, ""); + toReturn.add(Integer.valueOf(justTestPoint)); + } } } return toReturn; } - public boolean connectAnnotation(DispoAnnotationData annotation, JSONArray discrepanciesArray) { + public boolean connectAnnotation(DispoAnnotationData annotation, JSONObject discrepanciesList) throws JSONException { boolean isAllLocRefValid = true; - List<Discrepancy> sortedDiscrepanciesList = arrayToSortedList(discrepanciesArray); + HashMap<Integer, String> testPointNumberToId = getPointNumbersToIds(discrepanciesList); List<LocationRange> listOfLocationRefs = sortList(annotation.getLocationRefs()); - int startIndexForNextMatch = 0; - int idOfPreviousMatched = -1; + List<String> workingIdsOfCovered = new ArrayList<String>(); for (LocationRange singleLocationRef : listOfLocationRefs) { - try { - Discrepancy matchedDiscrepancy = - matchToDiscrepancy(annotation, singleLocationRef, sortedDiscrepanciesList, startIndexForNextMatch); - if (matchedDiscrepancy == null) { + if (singleLocationRef.getStart() != singleLocationRef.getEnd()) { + for (int i = singleLocationRef.getStart(); i <= singleLocationRef.getEnd(); i++) { + if (!tryToAddDiscrepancyForTestPoint(testPointNumberToId, i, workingIdsOfCovered)) { + isAllLocRefValid = false; + break; + } + } + } else { + if (!tryToAddDiscrepancyForTestPoint(testPointNumberToId, singleLocationRef.getStart(), workingIdsOfCovered)) { isAllLocRefValid = false; break; - } else { - int idOfMatched = matchedDiscrepancy.getId(); - // only update discrepancy and annotation if we found a different matching discrepancy - if (idOfPreviousMatched != idOfMatched) { - idOfPreviousMatched = idOfMatched; - startIndexForNextMatch = idOfMatched; - matchedDiscrepancy.addCoveringAnnotation(annotation); - JSONObject discrepancyAsObject = DispoUtil.discrepancyToJsonObj(matchedDiscrepancy); - annotation.addCoveredDiscrepancyIndex(matchedDiscrepancy); - discrepanciesArray.put(idOfMatched, discrepancyAsObject); - //on next search start at the previously matched one since both discrepancies and annotations are in order - } } - } catch (JSONException ex) { - throw new OseeCoreException(ex); } } + // Do this every time, if nothing else will ensure Loc Refs are always ordered annotation.setLocationRefs(getLocRefsAsString(listOfLocationRefs)); - annotation.setIsConnected(isAllLocRefValid); + + if (isAllLocRefValid) { + annotation.setIsConnected(true); + annotation.setIdsOfCoveredDiscrepancies(new JSONArray(workingIdsOfCovered)); + } else { + annotation.setIsConnected(false); + } return isAllLocRefValid; } - public void disconnectAnnotation(DispoAnnotationData annotation, JSONArray discrepanciesList) throws JSONException { - JSONArray discrepanciesConnected = annotation.getIdsOfCoveredDiscrepancies(); - int size = discrepanciesConnected.length(); - for (int i = 0; i < size; i++) { - int indexOfDiscrepancy = discrepanciesConnected.getInt(i); // the discrepancy to remove the annotation from, index in discrepanciesList - JSONObject discrepancyAsObject = discrepanciesList.getJSONObject(indexOfDiscrepancy); - Discrepancy discrepancyAsData = DispoUtil.jsonObjToDiscrepancy(discrepancyAsObject); - JSONArray indexesOfAnnotations = discrepancyAsData.getIdsOfCoveringAnnotations(); - removeElementFromArray(indexesOfAnnotations, annotation.getId()); + private boolean tryToAddDiscrepancyForTestPoint(HashMap<Integer, String> testPointNumberToId, int testPoint, List<String> workingList) { + String idOfMatched = testPointNumberToId.get(testPoint); + if (idOfMatched == null) { + return false; + } else { + workingList.add(idOfMatched); } - // clear list of connected discrepancies for this annotation - annotation.setIdsOfCoveredDiscrepancies(new JSONArray()); - annotation.setIsConnected(false); + + return true; + } + + @SuppressWarnings("unchecked") + private HashMap<Integer, String> getPointNumbersToIds(JSONObject discrepancies) throws JSONException { + HashMap<Integer, String> toReturn = new HashMap<Integer, String>(); + Iterator<String> iterator = discrepancies.keys(); + while (iterator.hasNext()) { + String key = iterator.next(); + JSONObject discrepancyAsJson = discrepancies.getJSONObject(key); + Discrepancy discrepancy = DispoUtil.jsonObjToDiscrepancy(discrepancyAsJson); + int pointNumber = discrepancy.getLocation(); + toReturn.put(pointNumber, discrepancy.getId()); + } + + return toReturn; } // Not currently used. May implement if users want to see what discrepancies are left to cover @@ -183,42 +232,6 @@ public class DispoConnector { return allUncovered; } - private List<LocationRange> getAllLocRefsAsSortedList(JSONObject annotations, Discrepancy discrepancy) { - StringBuilder sb = new StringBuilder(); - JSONArray indexesOfCoveringAnnotations = discrepancy.getIdsOfCoveringAnnotations(); - int size = indexesOfCoveringAnnotations.length(); - for (int i = 0; i < size; i++) { - try { - if (sb.length() > 0) { - sb.append(","); - } - String annotationId = indexesOfCoveringAnnotations.getString(i); - JSONObject annotationAsJsonObj = annotations.getJSONObject(annotationId); - DispoAnnotationData annotationAsData = DispoUtil.jsonObjToDispoAnnotationData(annotationAsJsonObj); - sb.append(annotationAsData.getLocationRefs()); - } catch (JSONException ex) { - throw new OseeCoreException(ex); - } - } - - return sortList(sb.toString()); - - } - - private void removeElementFromArray(JSONArray listToRemoveFrom, String element) throws JSONException { - int size = listToRemoveFrom.length(); - List<Integer> indexOfElementsToRemove = new ArrayList<Integer>(); - for (int i = 0; i < size; i++) { - if (listToRemoveFrom.getString(i).equals(element)) { - indexOfElementsToRemove.add(i); - } - } - - for (Integer index : indexOfElementsToRemove) { - listToRemoveFrom.remove(index); - } - } - private static String getLocRefsAsString(List<LocationRange> list) { StringBuilder sb = new StringBuilder(); for (LocationRange range : list) { @@ -245,38 +258,4 @@ public class DispoConnector { return toReturn; } - private List<Discrepancy> arrayToSortedList(JSONArray array) { - List<Discrepancy> discrepanciesAsList = new ArrayList<Discrepancy>(); - int size = array.length(); - for (int i = 0; i < size; i++) { - try { - discrepanciesAsList.add(DispoUtil.jsonObjToDiscrepancy(array.getJSONObject(i))); - } catch (JSONException ex) { - throw new OseeCoreException(ex); - } - } - Collections.sort(discrepanciesAsList, new DiscrepancyComperator()); - return discrepanciesAsList; - } - - private Discrepancy matchToDiscrepancy(DispoAnnotationData annotation, LocationRange singleLocationRangeRef, List<Discrepancy> discrepanciesList, int startIndex) { - Discrepancy matchedDiscrepancy = null; - int sizeOfList = discrepanciesList.size(); - int firstUnCovered = singleLocationRangeRef.getStart(); - - for (int i = startIndex; i < sizeOfList; i++) { - // want to guarantee that the discrepancy we're starting at has starting index <= to the first uncovered part of the location ref - Discrepancy discrepancy = discrepanciesList.get(i); - if (discrepancy.getLocationRange().getStart() > firstUnCovered) { - break; - } else { - if (LocationRangeUtil.isLocRefWithinRange(discrepancy.getLocationRange(), singleLocationRangeRef)) { - matchedDiscrepancy = discrepancy; - break; - } - } - } - - return matchedDiscrepancy; - } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoDataFactory.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoDataFactory.java index 77391f77bc5..be8e28ba568 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoDataFactory.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoDataFactory.java @@ -11,12 +11,12 @@ package org.eclipse.osee.disposition.rest.internal; -import java.util.Date; import org.eclipse.osee.disposition.model.DispoAnnotationData; import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoSetData; import org.eclipse.osee.disposition.model.DispoSetDescriptorData; +import org.eclipse.osee.disposition.model.DispoStrings; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.util.GUID; import org.eclipse.osee.logger.Log; @@ -54,34 +54,35 @@ public class DispoDataFactory { newSet.setName(descriptor.getName()); newSet.setImportPath(descriptor.getImportPath()); newSet.setImportState("NONE"); - newSet.setStatusCount("0/0"); newSet.setNotesList(new JSONArray()); return newSet; } public void initDispoItem(DispoItemData itemToInit) { - itemToInit.setAnnotationsList(new JSONObject()); - itemToInit.setDiscrepanciesList(new JSONArray()); - itemToInit.setStatus("PASS"); + itemToInit.setAnnotationsList(new JSONArray()); + if (itemToInit.getDiscrepanciesList() == null) { + itemToInit.setDiscrepanciesList(new JSONObject()); + } - Date date = new Date(); - itemToInit.setCreationDate(date); - itemToInit.setLastUpdate(date); + if (itemToInit.getDiscrepanciesList().length() == 0) { + itemToInit.setStatus(DispoStrings.Item_Pass); + } else { + itemToInit.setStatus(DispoStrings.Item_InComplete); + } } public void initAnnotation(DispoAnnotationData annotationToInit) { annotationToInit.setIdsOfCoveredDiscrepancies(new JSONArray()); - annotationToInit.setNotesList(new JSONArray()); + annotationToInit.setNotes("--Enter Notes--"); + annotationToInit.setResolution(""); } - public DispoItem createUpdatedItem(JSONObject annotationsList, JSONArray discrepanciesList, boolean updateStatus) { + public DispoItem createUpdatedItem(JSONArray annotationsList, JSONObject discrepanciesList) throws JSONException { DispoItemData newItem = new DispoItemData(); newItem.setAnnotationsList(annotationsList); newItem.setDiscrepanciesList(discrepanciesList); - if (updateStatus) { - newItem.setStatus(dispoConnector.allDiscrepanciesAnnotated(newItem)); - } + newItem.setStatus(dispoConnector.allDiscrepanciesAnnotated(newItem)); return newItem; } diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoItemArtifact.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoItemArtifact.java index 5aa5f4086ea..c83c1c64124 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoItemArtifact.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoItemArtifact.java @@ -38,15 +38,15 @@ public class DispoItemArtifact extends BaseIdentity<String> implements DispoItem } @Override - public JSONArray getDiscrepanciesList() { - String discrepanciesJson = artifact.getSoleAttributeAsString(DispoConstants.DispoDiscrepanciesJson, "[]"); - return DispoUtil.asJSONArray(discrepanciesJson); + public JSONObject getDiscrepanciesList() { + String discrepanciesJson = artifact.getSoleAttributeAsString(DispoConstants.DispoDiscrepanciesJson, "{}"); + return DispoUtil.asJSONObject(discrepanciesJson); } @Override - public JSONObject getAnnotationsList() { + public JSONArray getAnnotationsList() { String annotationsList = artifact.getSoleAttributeAsString(DispoConstants.DispoAnnotationsJson, "[]"); - return DispoUtil.asJSONOjbect(annotationsList); + return DispoUtil.asJSONArray(annotationsList); } @Override @@ -56,12 +56,7 @@ public class DispoItemArtifact extends BaseIdentity<String> implements DispoItem @Override public String getAssignee() { - ArtifactReadable assignee = artifact.getRelated(DispoConstants.DispoAssigned_Item).getAtMostOneOrNull(); - if (assignee == null) { - return "unassigned"; - } else { - return assignee.getName(); - } + return artifact.getSoleAttributeAsString(DispoConstants.DispoItemAssignee, ""); } @Override @@ -81,6 +76,11 @@ public class DispoItemArtifact extends BaseIdentity<String> implements DispoItem } @Override + public String getVersion() { + return artifact.getSoleAttributeAsString(DispoConstants.DispoItemVersion); + } + + @Override public int compareTo(Named other) { if (other != null && other.getName() != null && getName() != null) { return getName().compareTo(other.getName()); diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoQuery.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoQuery.java index 0a10518c848..a43eea4c885 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoQuery.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoQuery.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest.internal; +import java.util.List; import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoProgram; import org.eclipse.osee.disposition.model.DispoSet; @@ -32,15 +33,14 @@ public interface DispoQuery { boolean isUniqueItemName(DispoProgram program, String setId, String name); - ResultSet<DispoSet> findDispoSets(DispoProgram program); + List<DispoSet> findDispoSets(DispoProgram program); DispoSet findDispoSetsById(DispoProgram program, String id); - ResultSet<DispoItem> findDipoItems(DispoProgram program, String setId); + List<DispoItem> findDipoItems(DispoProgram program, String setId); DispoItem findDispoItemById(DispoProgram program, String itemId); - ResultSet<? extends IOseeBranch> findBaselineBranches(); + ResultSet<IOseeBranch> getDispoBranches(); - IOseeBranch findProgramId(DispoProgram program); }
\ No newline at end of file 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 new file mode 100644 index 00000000000..0b458cb93a4 --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoResolutionValidator.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2013 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 org.eclipse.osee.disposition.model.DispoAnnotationData; +import org.eclipse.osee.logger.Log; + +/** + * @author Angel Avila + */ +public class DispoResolutionValidator { + + private Log logger; + + public void setLogger(Log logger) { + this.logger = logger; + } + + public void start() { + logger.trace("Starting ResolutionValidator..."); + } + + public void stop() { + logger.trace("Stopping ResolutionValidator..."); + } + + public boolean validate(DispoAnnotationData annotation) { + String pcr = annotation.getResolution(); + return pcr.matches("^\\s*[CTR]\\d{4,5}\\s*$"); + } +} diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoSetArtifact.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoSetArtifact.java index 205b139b967..caa8b896931 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoSetArtifact.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoSetArtifact.java @@ -18,6 +18,7 @@ import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.orcs.data.ArtifactReadable; import org.json.JSONArray; import org.json.JSONException; + /** * @author Angel Avila */ @@ -41,11 +42,6 @@ public class DispoSetArtifact extends BaseIdentity<String> implements DispoSet, } @Override - public String getStatusCount() { - return artifact.getSoleAttributeAsString(DispoConstants.StatusCount, "0/0"); - } - - @Override public JSONArray getNotesList() { String notesJson = artifact.getSoleAttributeAsString(DispoConstants.DispoNotesJson, "[]"); try { diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoWriter.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoWriter.java index 306c242bd06..d38bda3be9e 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoWriter.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/DispoWriter.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2013 Boeing. + * Copyright (c) 2014 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 @@ -10,11 +10,11 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest.internal; +import java.util.List; import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoProgram; import org.eclipse.osee.disposition.model.DispoSet; import org.eclipse.osee.framework.jdk.core.type.Identifiable; -import org.eclipse.osee.orcs.data.ArtifactId; import org.eclipse.osee.orcs.data.ArtifactReadable; /** @@ -30,9 +30,11 @@ public interface DispoWriter { Identifiable<String> createDispoItem(ArtifactReadable author, DispoProgram program, DispoSet parentSet, DispoItem itemToCreate, ArtifactReadable assigneeId); - void updateDispoItem(ArtifactReadable author, DispoProgram program, String itemToEditId, DispoItem itemToCreate); + void createDispoItems(ArtifactReadable author, DispoProgram program, DispoSet parentSet, List<DispoItem> data, String assignee); + + void updateDispoItems(ArtifactReadable author, DispoProgram program, String itemToEditId, List<DispoItem> itemsToUpdate); boolean deleteDispoItem(ArtifactReadable author, DispoProgram program, String itemId); - void createAnnotation(ArtifactReadable author, DispoProgram program, ArtifactId dispoItem, String annotationsJson); + void updateDispoItem(ArtifactReadable author, DispoProgram program, String dispoItemId, DispoItem data); }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/LocationRangesCompressor.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/LocationRangesCompressor.java new file mode 100644 index 00000000000..d271fc9edc8 --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/LocationRangesCompressor.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2014 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 java.util.Collections; +import java.util.Iterator; +import java.util.List; +import org.eclipse.osee.disposition.model.LocationRange; + +/** + * @author Angel Avila + */ +public class LocationRangesCompressor { + + public static String compress(List<Integer> locationPoints) { + Collections.sort(locationPoints); + StringBuilder workingLocRefs = new StringBuilder(); + + boolean isRange = false; + boolean endOfRange = false; + int startOfRange = -1; + int previous = -1; + + Iterator<Integer> iterator = locationPoints.iterator(); + + while (iterator.hasNext()) { + int currentTestPoint = iterator.next(); + boolean isLastElement = !iterator.hasNext(); + + // Starting a Range + if (previous == (currentTestPoint - 1) && startOfRange == -1) { // if the previous is 1 less than our current we are in a range + isRange = true; + endOfRange = false; + startOfRange = previous; + int lastIndexOf = workingLocRefs.lastIndexOf(","); + if (lastIndexOf > 0) { + workingLocRefs.replace(lastIndexOf, workingLocRefs.length(), ""); + } else { + workingLocRefs.setLength(0); + } + } + if (isRange && (previous != (currentTestPoint - 1) || isLastElement)) { // End Range + endOfRange = true; + } + + StringBuilder toAppend = new StringBuilder(); + + if (!isRange) { // If we are not in a range just add the single point + toAppend.append(currentTestPoint); + } else if (endOfRange) { // other wise check to see if we ended the range + if (isLastElement) { + toAppend.append(new LocationRange(startOfRange, currentTestPoint).toString()); // append the range ending with the previous point and append this current point + } else { + toAppend.append(new LocationRange(startOfRange, previous).toString()); // append the range ending with the previous point and append this current point + toAppend.append(", "); + toAppend.append(currentTestPoint); + } + + isRange = false; + startOfRange = -1; + } + + if (toAppend.length() != 0) { + if (workingLocRefs.length() > 0) { + workingLocRefs.append(", "); + } + workingLocRefs.append(toAppend); + } + + previous = currentTestPoint; + } + return workingLocRefs.toString(); + } + +} diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/OrcsStorageImpl.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/OrcsStorageImpl.java index f86e53b730b..5b5079cb62e 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/OrcsStorageImpl.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/OrcsStorageImpl.java @@ -28,6 +28,7 @@ import org.eclipse.osee.framework.core.data.IArtifactType; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.data.TokenFactory; import org.eclipse.osee.framework.core.enums.BranchType; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; import org.eclipse.osee.framework.core.enums.CoreBranches; import org.eclipse.osee.framework.core.enums.CoreRelationTypes; @@ -54,7 +55,6 @@ import org.json.JSONObject; * @author Angel Avila */ public class OrcsStorageImpl implements Storage { - private final Log logger; private final OrcsApi orcsApi; @@ -134,12 +134,9 @@ public class OrcsStorageImpl implements Storage { return getQuery().fromBranch(getAdminBranch()).andGuid(userId).getResults().getExactlyOne(); } - @SuppressWarnings("unchecked") @Override public ArtifactReadable findUnassignedUser() { - // return getQuery().fromBranch(getAdminBranch()).andNameEquals("Unassigned").getResults().getExactlyOne(); COMMENTED OUT TEMP - return getQuery().fromBranch(getAdminBranch()).andIds(SystemUser.OseeSystem).getResults().getExactlyOne(); - + return getQuery().fromBranch(getAdminBranch()).andNameEquals("UnAssigned").andTypeEquals(CoreArtifactTypes.User).getResults().getExactlyOne(); } @Override @@ -161,7 +158,7 @@ public class OrcsStorageImpl implements Storage { @Override public boolean isUniqueItemName(DispoProgram program, String setId, String name) { IOseeBranch branch = getProgramBranch(program); - ArtifactReadable setArt = findDispoArtifact(branch, setId, DispoConstants.DispoSet); + ArtifactReadable setArt = findDispoArtifact(program, setId, DispoConstants.DispoSet); ResultSet<ArtifactReadable> results = getQuery()// .fromBranch(branch)// .andRelatedTo(CoreRelationTypes.Default_Hierarchical__Parent, setArt)// @@ -173,10 +170,9 @@ public class OrcsStorageImpl implements Storage { } @Override - public ResultSet<DispoSet> findDispoSets(DispoProgram program) { - IOseeBranch branch = getProgramBranch(program); + public List<DispoSet> findDispoSets(DispoProgram program) { ResultSet<ArtifactReadable> results = getQuery()// - .fromBranch(branch)// + .fromBranch(TokenFactory.createBranch(program.getUuid(), program.getName()))// .andTypeEquals(DispoConstants.DispoSet)// .getResults(); @@ -184,45 +180,32 @@ public class OrcsStorageImpl implements Storage { for (ArtifactReadable art : results) { toReturn.add(new DispoSetArtifact(art)); } - return ResultSets.newResultSet(toReturn); + return toReturn; } @Override public DispoSet findDispoSetsById(DispoProgram program, String setId) { - IOseeBranch branch = getProgramBranch(program); - ArtifactReadable result = findDispoArtifact(branch, setId, DispoConstants.DispoSet); + ArtifactReadable result = findDispoArtifact(program, setId, DispoConstants.DispoSet); return new DispoSetArtifact(result); } - private ArtifactReadable findDispoArtifact(IOseeBranch branch, String setId, IArtifactType type) { + private ArtifactReadable findDispoArtifact(DispoProgram program, String setId, IArtifactType type) { return getQuery()// - .fromBranch(branch)// + .fromBranch(TokenFactory.createBranch(program.getUuid(), program.getName()))// .andTypeEquals(type)// .andGuid(setId)// .getResults().getOneOrNull(); } @Override - public ResultSet<DispoItem> findDipoItems(DispoProgram program, String setId) { - IOseeBranch branch = getProgramBranch(program); - ArtifactReadable setArt = findDispoArtifact(branch, setId, DispoConstants.DispoSet); - ResultSet<ArtifactReadable> results = setArt.getRelated(CoreRelationTypes.Default_Hierarchical__Child); + public List<DispoItem> findDipoItems(DispoProgram program, String setId) { + ArtifactReadable setArt = findDispoArtifact(program, setId, DispoConstants.DispoSet); + ResultSet<ArtifactReadable> results = setArt.getChildren(); List<DispoItem> toReturn = new ArrayList<DispoItem>(); for (ArtifactReadable art : results) { toReturn.add(new DispoItemArtifact(art)); } - return ResultSets.newResultSet(toReturn); - } - - @Override - public DispoItem findDispoItemById(DispoProgram program, String itemId) { - DispoItem toReturn = null; - IOseeBranch branch = getProgramBranch(program); - ArtifactReadable dispoArtifact = findDispoArtifact(branch, itemId, DispoConstants.DispoItem); - if (dispoArtifact != null) { - toReturn = new DispoItemArtifact(dispoArtifact); - } return toReturn; } @@ -233,7 +216,6 @@ public class OrcsStorageImpl implements Storage { ArtifactId creatdArtId = tx.createArtifact(DispoConstants.DispoSet, descriptor.getName()); tx.setSoleAttributeFromString(creatdArtId, DispoConstants.ImportPath, descriptor.getImportPath()); tx.setSoleAttributeFromString(creatdArtId, DispoConstants.ImportState, descriptor.getImportState()); - tx.setSoleAttributeFromString(creatdArtId, DispoConstants.StatusCount, descriptor.getStatusCount()); tx.setSoleAttributeFromString(creatdArtId, DispoConstants.DispoNotesJson, descriptor.getNotesList().toString()); tx.commit(); return creatdArtId; @@ -252,7 +234,7 @@ public class OrcsStorageImpl implements Storage { private boolean deleteDispoEntityArtifact(ArtifactReadable author, DispoProgram program, String entityId, IArtifactType type) { boolean toReturn = false; IOseeBranch branch = getProgramBranch(program); - ArtifactReadable dispoArtifact = findDispoArtifact(branch, entityId, type); + ArtifactReadable dispoArtifact = findDispoArtifact(program, entityId, type); if (dispoArtifact != null) { TransactionBuilder tx = getTxFactory().createTransaction(branch, author, "Delete Dispo Artifact"); tx.deleteArtifact(dispoArtifact); @@ -266,7 +248,7 @@ public class OrcsStorageImpl implements Storage { @Override public void updateDispoSet(ArtifactReadable author, DispoProgram program, String setId, DispoSet newData) { IOseeBranch branch = getProgramBranch(program); - ArtifactReadable dispoSet = findDispoArtifact(branch, setId, DispoConstants.DispoSet); + ArtifactReadable dispoSet = findDispoArtifact(program, setId, DispoConstants.DispoSet); String name = newData.getName(); String importPath = newData.getImportPath(); @@ -293,7 +275,7 @@ public class OrcsStorageImpl implements Storage { @Override public Identifiable<String> createDispoItem(ArtifactReadable author, DispoProgram program, DispoSet parentSet, DispoItem data, ArtifactReadable assignee) { IOseeBranch branch = getProgramBranch(program); - ArtifactReadable parentSetArt = findDispoArtifact(branch, parentSet.getGuid(), DispoConstants.DispoSet); + ArtifactReadable parentSetArt = findDispoArtifact(program, parentSet.getGuid(), DispoConstants.DispoSet); TransactionBuilder tx = getTxFactory().createTransaction(branch, author, "Create Dispoable Item"); ArtifactId createdItem = tx.createArtifact(DispoConstants.DispoItem, data.getName()); @@ -313,74 +295,125 @@ public class OrcsStorageImpl implements Storage { } @Override - public void createAnnotation(ArtifactReadable author, DispoProgram program, ArtifactId disposition, String annotationsJson) { - IOseeBranch branch = getProgramBranch(program); - TransactionBuilder tx = getTxFactory().createTransaction(branch, author, "Create Dispo Annotation"); + public void createDispoItems(ArtifactReadable author, DispoProgram program, DispoSet parentSet, List<DispoItem> data, String assignee) { + IOseeBranch branch = TokenFactory.createBranch(program.getUuid(), ""); + ArtifactReadable parentSetArt = findDispoArtifact(program, parentSet.getGuid(), DispoConstants.DispoSet); + TransactionBuilder tx = getTxFactory().createTransaction(branch, author, "Create Dispoable Item"); + + for (DispoItem item : data) { + ArtifactId createdItem = tx.createArtifact(DispoConstants.DispoItem, item.getName()); + + tx.setSoleAttributeValue(createdItem, DispoConstants.DispoDateCreated, item.getCreationDate()); + tx.setSoleAttributeValue(createdItem, DispoConstants.DispoLastUpdated, item.getLastUpdate()); - tx.setSoleAttributeFromString(disposition, DispoConstants.DispoAnnotationsJson, annotationsJson); + tx.setSoleAttributeValue(createdItem, DispoConstants.DispoItemStatus, item.getStatus()); + tx.setSoleAttributeFromString(createdItem, DispoConstants.DispoDiscrepanciesJson, + item.getDiscrepanciesList().toString()); + tx.setSoleAttributeFromString(createdItem, DispoConstants.DispoAnnotationsJson, + item.getAnnotationsList().toString()); + tx.setSoleAttributeFromString(createdItem, DispoConstants.DispoItemVersion, item.getVersion()); + tx.setSoleAttributeFromString(createdItem, DispoConstants.DispoItemAssignee, assignee); + + tx.relate(parentSetArt, CoreRelationTypes.Default_Hierarchical__Child, createdItem); + } tx.commit(); } @Override public void updateDispoItem(ArtifactReadable author, DispoProgram program, String dispoItemId, DispoItem data) { - boolean wasEdited = false; IOseeBranch branch = getProgramBranch(program); - ArtifactId dispoItemArt = findDispoArtifact(branch, dispoItemId, DispoConstants.DispoItem); - String assigneeId = data.getAssignee(); - - TransactionBuilder tx = getTxFactory().createTransaction(branch, author, "Edit Dispoable Item"); + ArtifactId dispoItemArt = findDispoArtifact(program, dispoItemId, DispoConstants.DispoItem); + Date lastUpdate = data.getLastUpdate(); String name = data.getName(); - JSONArray discrepanciesList = data.getDiscrepanciesList(); - JSONObject annotationsList = data.getAnnotationsList(); + JSONObject discrepanciesList = data.getDiscrepanciesList(); + JSONArray annotationsList = data.getAnnotationsList(); String status = data.getStatus(); + String assignee = data.getAssignee(); + + TransactionBuilder tx = getTxFactory().createTransaction(branch, author, "Edit Dispoable Item"); + if (name != null) { tx.setName(dispoItemArt, name); - wasEdited = true; } if (discrepanciesList != null) { tx.setSoleAttributeFromString(dispoItemArt, DispoConstants.DispoDiscrepanciesJson, discrepanciesList.toString()); - wasEdited = true; } if (annotationsList != null) { tx.setSoleAttributeFromString(dispoItemArt, DispoConstants.DispoAnnotationsJson, annotationsList.toString()); - wasEdited = true; } - if (assigneeId != null) { - ArtifactReadable userAsArt = findUser(assigneeId); - tx.relate(dispoItemArt, DispoConstants.DispoAssigned_Assignee, userAsArt); - wasEdited = true; + if (assignee != null) { + tx.setSoleAttributeFromString(dispoItemArt, DispoConstants.DispoItemAssignee, assignee); } if (status != null) { tx.setSoleAttributeFromString(dispoItemArt, DispoConstants.DispoItemStatus, status); - wasEdited = true; } - if (wasEdited) { - tx.setSoleAttributeValue(dispoItemArt, DispoConstants.DispoLastUpdated, new Date()); + if (lastUpdate != null) { + tx.setSoleAttributeValue(dispoItemArt, DispoConstants.DispoLastUpdated, lastUpdate); } tx.commit(); } @Override - public IOseeBranch findProgramId(DispoProgram program) { - IOseeBranch toReturn = null; + public void updateDispoItems(ArtifactReadable author, DispoProgram program, String dispoItemId, List<DispoItem> data) { + IOseeBranch branch = TokenFactory.createBranch(program.getUuid(), ""); + TransactionBuilder tx = getTxFactory().createTransaction(branch, author, "Edit Dispoable Item"); + + for (DispoItem item : data) { + ArtifactId dispoItemArt = findDispoArtifact(program, dispoItemId, DispoConstants.DispoItem); + String assignee = item.getAssignee(); + Date lastUpdate = item.getLastUpdate(); + String name = item.getName(); + JSONObject discrepanciesList = item.getDiscrepanciesList(); + JSONArray annotationsList = item.getAnnotationsList(); + String status = item.getStatus(); + + if (name != null) { + tx.setName(dispoItemArt, name); + } + if (discrepanciesList != null) { + tx.setSoleAttributeFromString(dispoItemArt, DispoConstants.DispoDiscrepanciesJson, + discrepanciesList.toString()); + } + if (annotationsList != null) { + tx.setSoleAttributeFromString(dispoItemArt, DispoConstants.DispoAnnotationsJson, annotationsList.toString()); + } + if (assignee != null) { + tx.setSoleAttributeFromString(dispoItemArt, DispoConstants.DispoItemAssignee, assignee); + } + if (status != null) { + tx.setSoleAttributeFromString(dispoItemArt, DispoConstants.DispoItemStatus, status); + } + if (lastUpdate != null) { + tx.setSoleAttributeValue(dispoItemArt, DispoConstants.DispoLastUpdated, lastUpdate); + } + } + + tx.commit(); + } + + private String getDispoConfigContents() { BranchReadable branchRead = getQuery().branchQuery().andIds(CoreBranches.COMMON).getResults().getExactlyOne(); ArtifactReadable configArt = getQuery().fromBranch(branchRead).andNameEquals(Dispo_Config_Art).getResults().getExactlyOne(); - String configContents = configArt.getSoleAttributeAsString(CoreAttributeTypes.GeneralStringData); + return configArt.getSoleAttributeAsString(CoreAttributeTypes.GeneralStringData); + } - Pattern regex = Pattern.compile(program.getUuid() + "\\s*:\\s*.*"); + private IOseeBranch convertToDispoBranch(String configContents, IOseeBranch baselineBranch) { + IOseeBranch toReturn = null; + + Pattern regex = Pattern.compile(baselineBranch.getUuid() + "\\s*:\\s*.*"); Matcher matcher = regex.matcher(configContents); String guid = null; if (matcher.find()) { String match = matcher.group(); String[] split = match.split(":"); - guid = split[1]; + toReturn = TokenFactory.createBranch(split[1], baselineBranch.getName()); } - regex = Pattern.compile(program.getUuid() + "\\s*:\\s*.*"); + regex = Pattern.compile(baselineBranch.getGuid() + "\\s*:\\s*.*"); matcher = regex.matcher(configContents); Long uuid = null; if (matcher.find()) { @@ -393,7 +426,29 @@ public class OrcsStorageImpl implements Storage { } @Override - public ResultSet<? extends IOseeBranch> findBaselineBranches() { - return getQuery().branchQuery().andIsOfType(BranchType.BASELINE).getResults(); + public ResultSet<IOseeBranch> getDispoBranches() { + ResultSet<BranchReadable> baselineBranches = + getQuery().branchQuery().andIsOfType(BranchType.BASELINE).getResults(); + + String configContents = getDispoConfigContents(); + + List<IOseeBranch> results = new ArrayList<IOseeBranch>(); + for (BranchReadable baselineBranch : baselineBranches) { + IOseeBranch dispoBranch = convertToDispoBranch(configContents, baselineBranch); + if (dispoBranch != null) { + results.add(dispoBranch); + } + } + return ResultSets.newResultSet(results); + } + + @Override + public DispoItem findDispoItemById(DispoProgram program, String itemId) { + DispoItem toReturn = null; + ArtifactReadable dispoArtifact = findDispoArtifact(program, itemId, DispoConstants.DispoItem); + if (dispoArtifact != null) { + toReturn = new DispoItemArtifact(dispoArtifact); + } + return toReturn; } } diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/types/OseeTypes_Dispo.osee b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/types/OseeTypes_Dispo.osee index 3ed6a3e03b7..8cc15f95df6 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/types/OseeTypes_Dispo.osee +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/types/OseeTypes_Dispo.osee @@ -7,8 +7,8 @@ artifactType "Disposition Set" extends "Artifact" { attribute "dispo.Import Path" attribute "dispo.Notes JSON" attribute "dispo.Date Created" - attribute "dispo.Status Count" attribute "dispo.Import State" + attribute "dispo.Summary Count" } artifactType "dispo.Dispositionable Item" extends "Artifact" { @@ -18,7 +18,9 @@ artifactType "dispo.Dispositionable Item" extends "Artifact" { attribute "dispo.Discrepancies JSON" attribute "dispo.Date Created" attribute "dispo.Item Status" + attribute "dispo.Item Version" attribute "dispo.Last Updated" + attribute "dispo.Assignee" } attributeType "dispo.Annotations JSON" extends StringAttribute { @@ -27,7 +29,7 @@ attributeType "dispo.Annotations JSON" extends StringAttribute { min 1 max 1 taggerId DefaultAttributeTaggerProvider - defaultValue "[]" + defaultValue "{}" fileExtension "txt" mediaType "text/plain" } @@ -64,12 +66,12 @@ attributeType "dispo.Import Path" extends StringAttribute { mediaType "text/plain" } -attributeType "dispo.Status Count" extends StringAttribute { - uuid 0x1000000000000390 +attributeType "dispo.Summary Count" extends StringAttribute { + uuid 0x1000000000000203 dataProvider DefaultAttributeDataProvider min 0 max 1 - fileExtension "txt" + defaultValue "0/0" mediaType "text/plain" } @@ -102,8 +104,29 @@ attributeType "dispo.Item Status" extends EnumeratedAttribute { dataProvider DefaultAttributeDataProvider min 0 max 1 + taggerId DefaultAttributeTaggerProvider enumType "enum.dispo.item status" - defaultValue "No Import" + defaultValue "Unspecified" + mediaType "text/plain" +} + +attributeType "dispo.Item Version" extends StringAttribute { + uuid 0x3000000000000200 + dataProvider DefaultAttributeDataProvider + min 0 + max 1 + taggerId DefaultAttributeTaggerProvider + defaultValue "0.0" + mediaType "text/plain" +} + +attributeType "dispo.Assignee" extends StringAttribute { + uuid 0x3000000000000201 + dataProvider DefaultAttributeDataProvider + min 0 + max 1 + taggerId DefaultAttributeTaggerProvider + defaultValue "UnAssinged" mediaType "text/plain" } @@ -135,13 +158,3 @@ attributeType "dispo.Last Updated" extends DateAttribute { max 1 mediaType "text/calendar" } - -relationType "dispo.Assigned" { - uuid 0x2000000000000181 - sideAName "dispoableItem" - sideAArtifactType "dispo.Dispositionable Item" - sideBName "user" - sideBArtifactType "User" - defaultOrderType Unordered - multiplicity MANY_TO_ONE -} diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/messages/DispoAnnotationMessageWriter.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/messages/DispoAnnotationMessageWriter.java index f398b6c2df6..4673827925c 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/messages/DispoAnnotationMessageWriter.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/messages/DispoAnnotationMessageWriter.java @@ -20,7 +20,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyWriter; import org.eclipse.osee.disposition.model.DispoAnnotationData; -import org.json.JSONException; +import org.eclipse.osee.disposition.rest.util.DispoUtil; import org.json.JSONObject; /** @@ -40,12 +40,7 @@ public class DispoAnnotationMessageWriter implements MessageBodyWriter<DispoAnno @Override public void writeTo(DispoAnnotationData dispoAnnotation, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { - JSONObject jsonObject = new JSONObject(dispoAnnotation); - try { - jsonObject.put("notesList", dispoAnnotation.getNotesList()); - } catch (JSONException ex) { - throw new IOException("Could not get Notes Lists from Annotation", ex); - } + JSONObject jsonObject = DispoUtil.annotationToJsonObj(dispoAnnotation); String jsonString = jsonObject.toString(); entityStream.write(jsonString.getBytes(Charset.forName("UTF-8"))); } diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/messages/DispoSetMessageWriter.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/messages/DispoSetMessageWriter.java index e860b91fbd3..590517a753d 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/messages/DispoSetMessageWriter.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/messages/DispoSetMessageWriter.java @@ -20,7 +20,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyWriter; import org.eclipse.osee.disposition.model.DispoSetData; -import org.json.JSONException; +import org.eclipse.osee.disposition.rest.util.DispoUtil; import org.json.JSONObject; /** @@ -40,12 +40,7 @@ public class DispoSetMessageWriter implements MessageBodyWriter<DispoSetData> { @Override public void writeTo(DispoSetData dispoSet, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { - JSONObject jsonObject = new JSONObject(dispoSet, true); - try { - jsonObject.put("notesList", dispoSet.getNotesList()); - } catch (JSONException ex) { - throw new IOException("Could not get Notes Lists from Disposition Set", ex); - } + JSONObject jsonObject = DispoUtil.dispoSetToJsonObj(dispoSet); String jsonString = jsonObject.toString(); entityStream.write(jsonString.getBytes(Charset.forName("UTF-8"))); } diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/AnnotationResource.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/AnnotationResource.java index 423bd91beda..d29b0f01325 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/AnnotationResource.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/AnnotationResource.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest.resources; +import java.io.IOException; +import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -22,22 +24,22 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.eclipse.osee.disposition.model.DispoAnnotationData; +import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoMessages; import org.eclipse.osee.disposition.model.DispoProgram; import org.eclipse.osee.disposition.rest.DispoApi; -import org.eclipse.osee.disposition.rest.util.HtmlWriter; -import org.eclipse.osee.framework.jdk.core.type.ResultSet; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; /** * @author Angel Avila */ public class AnnotationResource { private final DispoApi dispoApi; - private final HtmlWriter writer; + private final DispoHtmlWriter writer; private final DispoProgram program; private final String itemId; - public AnnotationResource(DispoApi dispoApi, HtmlWriter writer, DispoProgram program, String setUuid, String dispResourceId) { + public AnnotationResource(DispoApi dispoApi, DispoHtmlWriter writer, DispoProgram program, String setUuid, String dispResourceId) { this.dispoApi = dispoApi; this.program = program; this.itemId = dispResourceId; @@ -60,14 +62,12 @@ public class AnnotationResource { if (!annotation.getLocationRefs().isEmpty()) { String createdAnnotationId = dispoApi.createDispoAnnotation(program, itemId, annotation); status = Status.CREATED; - DispoAnnotationData createdAnnotation = - dispoApi.getDispoAnnotationByIndex(program, itemId, createdAnnotationId); + DispoAnnotationData createdAnnotation = dispoApi.getDispoAnnotationById(program, itemId, createdAnnotationId); response = Response.status(status).entity(createdAnnotation).build(); } else { status = Status.BAD_REQUEST; response = Response.status(status).entity(DispoMessages.Annotation_EmptyLocRef).build(); } - return response; } @@ -75,23 +75,19 @@ public class AnnotationResource { * Get all Annotations for the DisposionableItem * * @return The Annotation found for the DisposionableItem + * @throws IOException * @response.representation.200.doc OK, Found Annotations * @response.representation.404.doc Not Found, Could not find any Annotations */ @GET @Produces(MediaType.TEXT_HTML) - public Response getAllDispoAnnotations() { + public Response getAllDispoAnnotations() throws IOException { Response.Status status; String html; - ResultSet<DispoAnnotationData> dispositionAnnotations = dispoApi.getDispoAnnotations(program, itemId); + List<DispoAnnotationData> dispositionAnnotations = dispoApi.getDispoAnnotations(program, itemId); - if (dispositionAnnotations.isEmpty()) { - status = Status.NOT_FOUND; - html = DispoMessages.Annotation_NoneFound; - } else { - status = Status.OK; - html = writer.createDispositionPage("Annotations", "annotation/", dispositionAnnotations); - } + status = Status.OK; + html = writer.createSubTable(dispositionAnnotations); return Response.status(status).entity(html).build(); } @@ -108,7 +104,7 @@ public class AnnotationResource { @Produces(MediaType.APPLICATION_JSON) public Response getAnnotationByIdJson(@PathParam("annotationId") String annotationId) { Response response; - DispoAnnotationData result = dispoApi.getDispoAnnotationByIndex(program, itemId, annotationId); + DispoAnnotationData result = dispoApi.getDispoAnnotationById(program, itemId, annotationId); if (result == null) { response = Response.status(Response.Status.NOT_FOUND).entity(DispoMessages.Annotation_NotFound).build(); } else { @@ -118,32 +114,6 @@ public class AnnotationResource { } /** - * Get a specific Annotation given an Id - * - * @param id The Id of the Annotation to search for - * @return The found Annotation if successful. Error Code otherwise - * @response.representation.200.doc OK, found Annotation - * @response.representation.404.doc Not Found, Could not find the Annotation - */ - @Path("{annotationId}") - @GET - @Produces(MediaType.TEXT_HTML) - public Response getAnnotationByIdHtml(@PathParam("annotationId") String annotationId) { - Response.Status status; - String html; - DispoAnnotationData dispositionAnnotation = dispoApi.getDispoAnnotationByIndex(program, itemId, annotationId); - if (dispositionAnnotation == null) { - status = Status.NOT_FOUND; - html = DispoMessages.Annotation_NotFound; - } else { - String notes = dispositionAnnotation.getNotesList().toString(); - status = Status.OK; - html = writer.createDispoPage(dispositionAnnotation.getLocationRefs(), "", "", notes); - } - return Response.status(status).entity(html).build(); - } - - /** * Edit a specific Annotation given an Id and new Annotation Data * * @param id The Id of the Annotation to update @@ -159,7 +129,9 @@ public class AnnotationResource { Response response; boolean wasEdited = dispoApi.editDispoAnnotation(program, itemId, annotationId, newAnnotation); if (wasEdited) { - response = Response.status(Response.Status.OK).build(); + DispoItem dispoItemById = dispoApi.getDispoItemById(program, itemId); + response = Response.status(Response.Status.OK).entity(dispoItemById.getStatus()).build(); + } else { response = Response.status(Response.Status.NOT_FOUND).entity(DispoMessages.Annotation_NotFound).build(); } @@ -180,7 +152,8 @@ public class AnnotationResource { Response response; boolean wasEdited = dispoApi.deleteDispoAnnotation(program, itemId, annotationId); if (wasEdited) { - response = Response.status(Response.Status.OK).build(); + DispoItem dispoItemById = dispoApi.getDispoItemById(program, itemId); + response = Response.status(Response.Status.OK).entity(dispoItemById.getStatus()).build(); } else { response = Response.status(Response.Status.NOT_FOUND).entity(DispoMessages.Annotation_NotFound).build(); } diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoAdminResource.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoAdminResource.java new file mode 100644 index 00000000000..b4552873387 --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoAdminResource.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2014 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.resources; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriInfo; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; + +/** + * @author Angel Avila + */ +@Path("admin") +public class DispoAdminResource { + + private final DispoHtmlWriter writer; + + public DispoAdminResource(DispoHtmlWriter writer) { + this.writer = writer; + } + + @GET + @Produces(MediaType.TEXT_HTML) + public Response start(@Context UriInfo uriInfo) { + Response.Status status; + String html; + status = Status.OK; + String host = uriInfo.getAbsolutePath().getHost(); + int port = uriInfo.getAbsolutePath().getPort(); + String url = host + ":" + port; + html = writer.createAdminTable(url); + return Response.status(status).entity(html).build(); + } + +}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoApplication.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoApplication.java index 739091c6e4b..8ce582a9e4a 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoApplication.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoApplication.java @@ -20,7 +20,7 @@ import org.eclipse.osee.disposition.rest.messages.DispoItemMessageReader; import org.eclipse.osee.disposition.rest.messages.DispoItemMessageWriter; import org.eclipse.osee.disposition.rest.messages.DispoSetMessageReader; import org.eclipse.osee.disposition.rest.messages.DispoSetMessageWriter; -import org.eclipse.osee.disposition.rest.util.HtmlWriter; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; import org.eclipse.osee.disposition.rest.util.TemplateRegistry; /** @@ -30,10 +30,18 @@ public final class DispoApplication extends Application { private DispoApi dispoApi; + private final Set<Object> singletons = new HashSet<Object>(); + + public void setDispoApi(DispoApi dispoApi) { + this.dispoApi = dispoApi; + } + @Override public Set<Object> getSingletons() { + return singletons; + } - Set<Object> singletons = new HashSet<Object>(); + public void start() { singletons.add(new DispoSetMessageReader()); singletons.add(new DispoSetMessageWriter()); singletons.add(new DispoItemMessageReader()); @@ -41,12 +49,13 @@ public final class DispoApplication extends Application { singletons.add(new DispoAnnotationMessageReader()); singletons.add(new DispoAnnotationMessageWriter()); - HtmlWriter writer = new HtmlWriter(TemplateRegistry.newRegistry()); + DispoHtmlWriter writer = new DispoHtmlWriter(TemplateRegistry.newRegistry()); singletons.add(new DispoProgramResource(dispoApi, writer, dispoApi.getDispoFactory())); - return singletons; + singletons.add(new DispoInitResource(writer)); + singletons.add(new DispoAdminResource(writer)); } - public void setDispoApi(DispoApi dispoApi) { - this.dispoApi = dispoApi; + public void stop() { + singletons.clear(); } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoHtmlOutputStream.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoHtmlOutputStream.java new file mode 100644 index 00000000000..ae646377849 --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoHtmlOutputStream.java @@ -0,0 +1,111 @@ +/******************************************************************************* + * Copyright (c) 2013 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.resources; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.StreamingOutput; + +import org.eclipse.osee.disposition.model.Discrepancy; +import org.eclipse.osee.disposition.model.DispoItem; +import org.eclipse.osee.disposition.model.DispoStrings; +import org.eclipse.osee.disposition.rest.internal.LocationRangesCompressor; +import org.eclipse.osee.disposition.rest.util.DispoUtil; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * @author Angel + */ +public final class DispoHtmlOutputStream implements StreamingOutput { + private final Iterable<DispoItem> dispoItems; + + public DispoHtmlOutputStream(Iterable<DispoItem> dispoItems) { + this.dispoItems = dispoItems; + } + + @Override + public void write(OutputStream output) throws IOException { + Writer writer = new OutputStreamWriter(output); + try { + + for (DispoItem item : dispoItems) { + writer.append("<tr id=\""); + writer.append(item.getGuid()); + if (item.getStatus().equals(DispoStrings.Item_Pass)) { + writer.append("\" class=\"itemRow\">"); + } else { + writer.append("\" class=\"itemRow\" ondblclick=\"showAnnotations(this)\">"); + } + addItemData(writer, item); + writer.append("</tr>"); + + writer.append("\n"); + } + + } catch (Exception ex) { + throw new WebApplicationException(ex); + } finally { + writer.close(); + } + } + + private void addItemData(Appendable appendable, DispoItem item) throws IOException, JSONException { + addData(appendable, item.getName()); + addData(appendable, item.getStatus(), true); + addData(appendable, String.valueOf(item.getDiscrepanciesList().length())); // change to total points + addData(appendable, String.valueOf(item.getDiscrepanciesList().length())); + addData(appendable, String.valueOf(getFailureLocations(item.getDiscrepanciesList()))); + addData(appendable, item.getAssignee()); + addData(appendable, item.getVersion()); // Change to Version + } + + private void addData(Appendable appendable, String data) throws IOException { + appendable.append("<td class=\"itemData\">"); + appendable.append(data); + appendable.append("</td>"); + } + + private void addData(Appendable appendable, String data, boolean isStatus) throws IOException { + if (data.equals(DispoStrings.Item_Complete)) { + appendable.append("<td class=\"itemData\">"); + } else if (data.equals(DispoStrings.Item_Pass)) { + appendable.append("<td class=\"itemDataPass\">"); + } else { + appendable.append("<td class=\"itemDataFail\">"); + } + appendable.append(data); + appendable.append("</td>"); + } + + private String getFailureLocations(JSONObject discrepanciesList) throws JSONException { + List<Integer> locations = new ArrayList<Integer>(); + @SuppressWarnings("unchecked") + Iterator<String> iterator = discrepanciesList.keys(); + while (iterator.hasNext()) { + String key = iterator.next(); + JSONObject discrepancyAsJson = discrepanciesList.getJSONObject(key); + Discrepancy discrepany = DispoUtil.jsonObjToDiscrepancy(discrepancyAsJson); + + locations.add(discrepany.getLocation()); + } + + return LocationRangesCompressor.compress(locations); + } + +} diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoInitResource.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoInitResource.java new file mode 100644 index 00000000000..3cda7cee87c --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoInitResource.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2013 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.resources; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriInfo; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; + +/** + * @author Angel Avila + */ +@Path("init") +public class DispoInitResource { + + private final DispoHtmlWriter writer; + + public DispoInitResource(DispoHtmlWriter writer) { + this.writer = writer; + } + + /** + * Get initial Dispo page + * + * @return Html for inital Dispo page + * @response.representation.200.doc OK, created HTML page + */ + @GET + @Produces(MediaType.TEXT_HTML) + public Response start(@Context UriInfo uriInfo) { + Response.Status status; + String html; + status = Status.OK; + String host = uriInfo.getAbsolutePath().getHost(); + int port = uriInfo.getAbsolutePath().getPort(); + String url = host + ":" + port; + html = writer.createMainTable(url); + return Response.status(status).entity(html).build(); + } + +}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoItemResource.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoItemResource.java index 96394145281..0cf33bdeded 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoItemResource.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoItemResource.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest.resources; +import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -20,26 +21,27 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.StreamingOutput; import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoMessages; import org.eclipse.osee.disposition.model.DispoProgram; import org.eclipse.osee.disposition.rest.DispoApi; -import org.eclipse.osee.disposition.rest.util.HtmlWriter; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; import org.eclipse.osee.framework.jdk.core.type.Identifiable; -import org.eclipse.osee.framework.jdk.core.type.ResultSet; /** * @author Angel Avila */ public class DispoItemResource { private final DispoApi dispoApi; - private final HtmlWriter writer; + private final DispoHtmlWriter writer; private final DispoProgram program; private final String setId; - public DispoItemResource(DispoApi dispoApi, HtmlWriter writer, DispoProgram program, String setId) { + public DispoItemResource(DispoApi dispoApi, DispoHtmlWriter writer, DispoProgram program, String setId) { this.dispoApi = dispoApi; this.program = program; this.setId = setId; @@ -56,23 +58,17 @@ public class DispoItemResource { * Get all Dispositionable Items under the Disposition Set * * @return The Dispositionable Items found under the Disposition Set + * @throws Exception * @response.representation.200.doc OK, Found Dispositionable Items * @response.representation.404.doc Not Found, Could not find any Dispositionable Items */ @GET @Produces(MediaType.TEXT_HTML) - public Response getAllDispoItems() { - ResultSet<DispoItemData> dispoItems = dispoApi.getDispoItems(program, setId); - Response.Status status; - String html; - if (dispoItems.isEmpty()) { - status = Status.NOT_FOUND; - html = "There are currently no disposition items available under this set"; - } else { - status = Status.OK; - html = writer.createDispositionPage("Dispositionable Items", "item/", dispoItems); - } - return Response.status(status).entity(html).build(); + public Response getAllDispoItems() throws Exception { + List<DispoItem> dispoItems = dispoApi.getDispoItems(program, setId); + StreamingOutput streamingOutput = new DispoHtmlOutputStream(dispoItems); + ResponseBuilder builder = Response.ok(streamingOutput); + return builder.build(); } /** @@ -98,33 +94,6 @@ public class DispoItemResource { } /** - * Get a specific Dispositionable Item given a itemId - * - * @param itemId The Id of the Dispositionable Item to search for - * @return The found Dispositionable Item if successful. Error Code otherwise - * @response.representation.200.doc OK, Found Dispositionable Item - * @response.representation.404.doc Not Found, Could not find any Dispositionable Items - */ - @Path("{itemId}") - @GET - @Produces(MediaType.TEXT_HTML) - public Response getDispoItemsByIdHtml(@PathParam("itemId") String itemId) { - String html; - Response.Status status; - DispoItem dispoItem = dispoApi.getDispoItemById(program, itemId); - if (dispoItem == null) { - status = Status.NOT_FOUND; - html = DispoMessages.Item_NotFound; - } else { - status = Status.OK; - String title = "Annotations"; - String prefixPath = itemId + "/annotation"; - html = writer.createDispoPage(dispoItem.getName(), prefixPath, title, "[]"); - } - return Response.status(status).entity(html).build(); - } - - /** * Edit a specific Dispositionable Item given a itemId and new Dispositionable Item Data * * @param itemId The Id of the Dispositionable Item to search for diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoProgramResource.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoProgramResource.java index 7c21fff14e3..1b8eeccb455 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoProgramResource.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoProgramResource.java @@ -20,7 +20,7 @@ import javax.ws.rs.core.Response.Status; import org.eclipse.osee.disposition.model.DispoMessages; import org.eclipse.osee.disposition.rest.DispoApi; import org.eclipse.osee.disposition.rest.util.DispoFactory; -import org.eclipse.osee.disposition.rest.util.HtmlWriter; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.jdk.core.type.ResultSet; @@ -31,13 +31,13 @@ import org.eclipse.osee.framework.jdk.core.type.ResultSet; public class DispoProgramResource { private final DispoApi dispoApi; - private final HtmlWriter writer; + private final DispoHtmlWriter writer; private final DispoFactory dispoFactory; - public DispoProgramResource(DispoApi dispoApi, HtmlWriter writer, DispoFactory factory) { + public DispoProgramResource(DispoApi dispoApi, DispoHtmlWriter writer, DispoFactory dispoFactory) { this.dispoApi = dispoApi; this.writer = writer; - this.dispoFactory = factory; + this.dispoFactory = dispoFactory; } /** @@ -58,39 +58,11 @@ public class DispoProgramResource { html = DispoMessages.Program_NoneFound; } else { status = Status.OK; - html = writer.createDispositionPage("Programs", "", allPrograms); + html = writer.createSelectPrograms(allPrograms); } return Response.status(status).entity(html).build(); } - /** - * Get a specific Disposition Program given a programId - * - * @param programId The Id of the Disposition Program to search for - * @return The found Disposition Program if successful. Error Code otherwise - * @response.representation.200.doc OK, Found Disposition Program - * @response.representation.404.doc Not Found, Could not find any Disposition Program - */ - @Path("{programId}") - @GET - @Produces(MediaType.TEXT_HTML) - public Response getProgramById(@PathParam("programId") String programId) { - IOseeBranch dispoBranch = dispoApi.getDispoProgramById(dispoFactory.createProgram(programId)); - Response.Status status; - String html; - if (dispoBranch == null) { - status = Status.NOT_FOUND; - html = DispoMessages.Program_NotFound; - } else { - status = Status.OK; - String subTitle = "Disposition Sets"; - String prefixPath = programId + "/set"; - html = writer.createDispoPage(dispoBranch.getName(), prefixPath, subTitle, "[]"); - } - - return Response.status(status).entity(html).build(); - } - @Path("{programId}/set") public DispoSetResource getAnnotation(@PathParam("programId") String programId) { return new DispoSetResource(dispoApi, writer, dispoFactory.createProgram(programId)); diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoSetResource.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoSetResource.java index bd8c0311be1..b6af0095311 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoSetResource.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/resources/DispoSetResource.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest.resources; +import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -27,8 +28,8 @@ import org.eclipse.osee.disposition.model.DispoSet; import org.eclipse.osee.disposition.model.DispoSetData; import org.eclipse.osee.disposition.model.DispoSetDescriptorData; import org.eclipse.osee.disposition.rest.DispoApi; -import org.eclipse.osee.disposition.rest.util.HtmlWriter; -import org.eclipse.osee.framework.jdk.core.type.ResultSet; +import org.eclipse.osee.disposition.rest.util.DispoHtmlWriter; +import org.eclipse.osee.disposition.rest.util.DispoUtil; /** * @author Angel Avila @@ -36,10 +37,10 @@ import org.eclipse.osee.framework.jdk.core.type.ResultSet; public class DispoSetResource { private final DispoApi dispoApi; - private final HtmlWriter writer; + private final DispoHtmlWriter writer; private final DispoProgram program; - public DispoSetResource(DispoApi dispoApi, HtmlWriter writer, DispoProgram program) { + public DispoSetResource(DispoApi dispoApi, DispoHtmlWriter writer, DispoProgram program) { this.dispoApi = dispoApi; this.writer = writer; this.program = program; @@ -67,9 +68,9 @@ public class DispoSetResource { boolean isUniqueSetName = dispoApi.isUniqueSetName(program, name); if (isUniqueSetName) { String createdSetId = dispoApi.createDispoSet(program, descriptor).getGuid(); - DispoSetData createdSet = dispoApi.getDispoSetById(program, createdSetId); + DispoSet createdSet = dispoApi.getDispoSetById(program, createdSetId); status = Status.CREATED; - response = Response.status(status).entity(createdSet).build(); + response = Response.status(status).entity(DispoUtil.setArtToSetData(createdSet)).build(); } else { status = Status.CONFLICT; response = Response.status(status).entity(DispoMessages.Set_ConflictingNames).build(); @@ -91,7 +92,7 @@ public class DispoSetResource { @GET @Produces(MediaType.TEXT_HTML) public Response getAllDispoSets() { - ResultSet<DispoSetData> allDispoSets = dispoApi.getDispoSets(program); + List<DispoSet> allDispoSets = dispoApi.getDispoSets(program); Response.Status status; String html; if (allDispoSets.isEmpty()) { @@ -99,7 +100,7 @@ public class DispoSetResource { html = DispoMessages.Set_NoneFound; } else { status = Status.OK; - html = writer.createDispositionPage("Disposition Sets", "set/", allDispoSets); + html = writer.createSelectSet(allDispoSets); } return Response.status(status).entity(html).build(); } @@ -121,7 +122,7 @@ public class DispoSetResource { if (result == null) { response = Response.status(Response.Status.NOT_FOUND).entity(DispoMessages.Set_NotFound).build(); } else { - response = Response.status(Response.Status.OK).entity(result).build(); + response = Response.status(Response.Status.OK).entity(DispoUtil.setArtToSetData(result)).build(); } return response; } @@ -129,28 +130,20 @@ public class DispoSetResource { /** * Get a specific Disposition Set given a setId * - * @param setId The Id of the Disposition Set to search for * @return The found Disposition Set if successful. Error Code otherwise * @response.representation.200.doc OK, Found Disposition Set * @response.representation.404.doc Not Found, Could not find any Disposition Sets */ - @Path("{setId}") + // Will go away once we implement the angular stuff + @Path("/admin") @GET - @Produces(MediaType.TEXT_HTML) - public Response getDispoSetByIdHtml(@PathParam("setId") String setId) { + @Produces(MediaType.APPLICATION_JSON) + public Response getAllDispoSetsAdmin() { + List<DispoSet> allDispoSets = dispoApi.getDispoSets(program); Response.Status status; String html; - DispoSet dispoSetArt = dispoApi.getDispoSetById(program, setId); - if (dispoSetArt == null) { - status = Status.NOT_FOUND; - html = DispoMessages.Set_NotFound; - } else { - String notesJsonString = dispoSetArt.getNotesList().toString(); - status = Status.OK; - String title = "Dispositionable Items"; - String prefixPath = setId + "/item"; - html = writer.createDispoPage(dispoSetArt.getName(), prefixPath, title, notesJsonString); - } + status = Status.OK; + html = writer.createAllSetsTableHTML(allDispoSets); return Response.status(status).entity(html).build(); } @@ -202,4 +195,5 @@ public class DispoSetResource { public DispoItemResource getDispositionableItems(@PathParam("setId") String setId) { return new DispoItemResource(dispoApi, writer, program, setId); } + } diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DiscrepancyComperator.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DiscrepancyComperator.java deleted file mode 100644 index b41aec14eeb..00000000000 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DiscrepancyComperator.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 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.util; - -import java.util.Comparator; -import org.eclipse.osee.disposition.model.Discrepancy; -/** - * @author Angel Avila - */ -public class DiscrepancyComperator implements Comparator<Discrepancy> { - - private final LocationRangeComparator rangeComp = new LocationRangeComparator(); - - @Override - public int compare(Discrepancy o1, Discrepancy o2) { - return rangeComp.compare(o1.getLocationRange(), o2.getLocationRange()); - } -} diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DispoHtmlWriter.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DispoHtmlWriter.java new file mode 100644 index 00000000000..dd565cb83fd --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/DispoHtmlWriter.java @@ -0,0 +1,287 @@ +/******************************************************************************* + * Copyright (c) 2014 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.util; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import org.eclipse.osee.disposition.model.Discrepancy; +import org.eclipse.osee.disposition.model.DispoAnnotationData; +import org.eclipse.osee.disposition.model.DispoItem; +import org.eclipse.osee.disposition.model.DispoSet; +import org.eclipse.osee.disposition.model.DispoStrings; +import org.eclipse.osee.disposition.rest.internal.LocationRangesCompressor; +import org.eclipse.osee.framework.core.data.IOseeBranch; +import org.eclipse.osee.framework.jdk.core.type.IResourceRegistry; +import org.eclipse.osee.template.engine.AppendableRule; +import org.eclipse.osee.template.engine.PageCreator; +import org.eclipse.osee.template.engine.PageFactory; +import org.eclipse.osee.template.engine.StringRule; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * @author Angel Avila + */ + +public class DispoHtmlWriter { +// @formatter:off + private final String subTableHeadersStart = " <tr>"+ + "<th class=\"spacer\" rowspan=\""; + + private final String subTableHeadersEnd ="\" width=\"20\"></th>"+ + "<th width=\"200\">Points</th>"+ + "<th width=\"100\">PCR</th>"+ + "<th width=\"600\">Notes</th>"+ + "</tr>"; +// @formatter:on + + private final IResourceRegistry registry; + + public DispoHtmlWriter(IResourceRegistry registry) { + this.registry = registry; + } + + public String createDispositionPage(String title, Iterable<? extends DispoItem> items) { + PageCreator page = PageFactory.newPageCreator(registry, "title", title); + page.addSubstitution(new StringRule("notes", "")); + page.addSubstitution(new TableRowRule("tableData", items)); + return page.realizePage(TemplateRegistry.DispositionHtml); + } + + public String createMainTable(String url) { + PageCreator page = PageFactory.newPageCreator(registry); + page.addSubstitution(new StringRule("serverPort", url)); + return page.realizePage(TemplateRegistry.DispositionUserHtml); + } + + public String createAdminTable(String url) { + PageCreator page = PageFactory.newPageCreator(registry); + page.addSubstitution(new StringRule("serverPort", url)); + return page.realizePage(TemplateRegistry.DispositionAdminHtml); + } + + public String createAllSetsTableHTML(Iterable<DispoSet> sets) { + int count = 0; + StringBuilder sb = new StringBuilder(); + for (DispoSet set : sets) { + sb.append("<tr id=\""); + sb.append(set.getGuid()); + sb.append("\">"); + + sb.append("<td class=\"setsTableData\">"); + sb.append("<input class=\"setsTableDataInput\" onclick=\"setFocused(this);\" type=\"text\" readonly value=\""); + sb.append(set.getName()); + sb.append("\">"); + sb.append("</input>"); + sb.append("</td>"); + + sb.append("<td class=\"setsTableData\">"); + sb.append("no summary available"); + sb.append("</td>"); + sb.append("</tr>"); + count++; + } + + // We want a table of 7 rows, fill in empty rows (if any) with fillers + + for (int i = 0; i < (7 - count); i++) { + sb.append("<tr>"); + sb.append("<td class=\"setsTableData\">"); + sb.append("</td>"); + sb.append("<td class=\"setsTableData\">"); + sb.append("</td>"); + sb.append("</tr>"); + } + + return sb.toString(); + } + + public String createSelectPrograms(Iterable<IOseeBranch> allPrograms) { + StringBuilder sb = new StringBuilder(); + sb.append("<option selected disabled>Choose One</option>"); + for (IOseeBranch option : allPrograms) { + sb.append("<option value=\""); + sb.append(option.getUuid()); + sb.append("\">"); + sb.append(option.getName()); + sb.append("</option>"); + } + + return sb.toString(); + } + + public String createSelectSet(Iterable<DispoSet> allSets) { + StringBuilder sb = new StringBuilder(); + sb.append("<option selected disabled>Choose One</option>"); + for (DispoSet option : allSets) { + sb.append("<option value=\""); + sb.append(option.getGuid()); + sb.append("\">"); + sb.append(option.getName()); + sb.append("</option>"); + } + + return sb.toString(); + } + + public String createSetTable(Iterable<DispoItem> dispoItems) throws IOException, JSONException { + StringBuilder writer = new StringBuilder(); + for (DispoItem item : dispoItems) { + if (item.getName().equalsIgnoreCase("WPS_X_wps_weapon_weight_moment_drag_download_processing_rkt3")) { + System.out.println(""); + } + writer.append("<tr id=\""); + writer.append(item.getGuid()); + if (item.getStatus().equals(DispoStrings.Item_Pass)) { + writer.append("\" class=\"itemRow\">"); + } else { + writer.append("\" class=\"itemRow\" ondblclick=\"showAnnotations(this)\">"); + } + addItemData(writer, item); + writer.append("</tr>"); + + writer.append("\n"); + } + + return writer.toString(); + + } + + private void addItemData(Appendable appendable, DispoItem item) throws IOException, JSONException { + addData(appendable, item.getName()); + addData(appendable, item.getStatus(), true); + addData(appendable, String.valueOf(item.getDiscrepanciesList().length())); // change to total points + addData(appendable, String.valueOf(item.getDiscrepanciesList().length())); + addData(appendable, String.valueOf(getFailureLocations(item.getDiscrepanciesList()))); + addData(appendable, item.getAssignee()); + addData(appendable, item.getVersion()); // Change to Version + } + + private void addData(Appendable appendable, String data) throws IOException { + appendable.append("<td class=\"itemData\">"); + appendable.append(data); + appendable.append("</td>"); + } + + private void addData(Appendable appendable, String data, boolean isStatus) throws IOException { + if (data.equals(DispoStrings.Item_Complete)) { + appendable.append("<td class=\"itemData\">"); + } else if (data.equals(DispoStrings.Item_Pass)) { + appendable.append("<td class=\"itemDataPass\">"); + } else { + appendable.append("<td class=\"itemDataFail\">"); + } + appendable.append(data); + appendable.append("</td>"); + } + + private String getFailureLocations(JSONObject discrepanciesList) throws JSONException { + List<Integer> locations = new ArrayList<Integer>(); + @SuppressWarnings("unchecked") + Iterator<String> iterator = discrepanciesList.keys(); + while (iterator.hasNext()) { + String key = iterator.next(); + JSONObject discrepancyAsJson = discrepanciesList.getJSONObject(key); + Discrepancy discrepany = DispoUtil.jsonObjToDiscrepancy(discrepancyAsJson); + + locations.add(discrepany.getLocation()); + } + + return LocationRangesCompressor.compress(locations); + } + + private void addSubTableData(Appendable appendable, String data, boolean isValid) throws IOException { + appendable.append("<td class=\"annotationData\" >"); + if (isValid) { + appendable.append("<textarea class=\"annotationInput"); + } else { + appendable.append("<textarea class=\"annotationInputInvalid"); + } + appendable.append("\" onchange=\"submitAnnotationData(this);\" ondblclick=\"annotationDblClick(this);\">"); + appendable.append(data); + appendable.append("</textarea></td>"); + } + +// @formatter:off + public String createSubTable(List<DispoAnnotationData> annotations) throws IOException { + StringBuilder sb = new StringBuilder(); + sb.append("<td colspan=\"7\">"); + sb.append("<table class=\"subTable\">"); + sb.append(createHeadersForSubTable(annotations.size())); + for(DispoAnnotationData annotation :annotations) { + sb.append("<tr id=\""); + sb.append(annotation.getId()); + sb.append("\">"); + boolean isResolutionValid = true; + if(!annotation.getResolution().isEmpty() && !annotation.getIsResolutionValid()){ + isResolutionValid = false; + } + addSubTableData(sb, annotation.getLocationRefs(), annotation.getIsConnected()); + addSubTableData(sb, annotation.getResolution(), isResolutionValid); + addSubTableData(sb, annotation.getNotes(), true); + addDeleteButton(sb); + sb.append("</tr>"); + } + // add on empty row + sb.append("<tr>"); + sb.append("<td class=\"annotationData\"><textarea class=\"annotationInput\" onchange=\"submitAnnotationData(this);\" ondblclick=\"annotationDblClick(this);\"></textarea></d>"); + sb.append("<td class=\"annotationData\"><textarea class=\"annotationInputDisabled\" onchange=\"submitAnnotationData(this);\" ondblclick=\"annotationDblClick(this);\" readonly=\"true\"></textarea></td>"); + sb.append("<td class=\"annotationData\"><textarea class=\"annotationInputDisabled\" onchange=\"submitAnnotationData(this);\" ondblclick=\"annotationDblClick(this);\" readonly=\"true\"></textarea></td>"); + sb.append("<td><button class=\"annotationDelete\" onclick=\"deleteAnnotation(this);\" disabled=\"true\">X</button></td>"); + sb.append("</tr>"); + sb.append("</table>"); + sb.append("</td>"); + return sb.toString(); + } + + private void addDeleteButton(Appendable appendable) throws IOException { + appendable.append("<td><button class=\"annotationDelete\" onclick=\"deleteAnnotation(this);\">X</button></td>"); + } + + private String createHeadersForSubTable(int numberOfAnnotations) { + return subTableHeadersStart + (numberOfAnnotations+2) + subTableHeadersEnd; + } + private static final class TableRowRule extends AppendableRule<Object> { + private final Iterable<? extends DispoItem> items; + + public TableRowRule(String ruleName, Iterable<? extends DispoItem> items) { + super(ruleName); + this.items = items; + } + + @Override + public void applyTo(Appendable appendable) throws IOException { + for (DispoItem item : items) { + appendable.append("<tr>"); + addItemData(appendable, item); + + appendable.append("<?subTable?>"); + } + } + + private void addItemData(Appendable appendable, DispoItem item) throws IOException { + addData(appendable, item.getName()); + addData(appendable, item.getStatus()); + addData(appendable, String.valueOf(item.getDiscrepanciesList().length())); // Change to TOtal Points + addData(appendable, String.valueOf(item.getDiscrepanciesList().length())); + addData(appendable, item.getAssignee()); + addData(appendable, item.getGuid()); // Change to Version + } + + private void addData(Appendable appendable, String data) throws IOException { + appendable.append("<td>"); + appendable.append(data); + appendable.append("</td>"); + } + } +} 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 2f35cbaa656..0d209b02b28 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 @@ -16,8 +16,8 @@ import org.eclipse.osee.disposition.model.DispoItem; import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoSet; import org.eclipse.osee.disposition.model.DispoSetData; -import org.eclipse.osee.disposition.model.DispoSetData.DispositionOperationsEnum; import org.eclipse.osee.disposition.model.LocationRange; +import org.eclipse.osee.disposition.model.Note; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.json.JSONArray; import org.json.JSONException; @@ -32,7 +32,7 @@ public final class DispoUtil { // } - public static JSONObject asJSONOjbect(String value) { + public static JSONObject asJSONObject(String value) { try { return new JSONObject(value); } catch (JSONException ex) { @@ -40,6 +40,24 @@ public final class DispoUtil { } } + public static JSONObject getById(JSONArray list, String id) { + try { + for (int i = 0; i < list.length(); i++) { + JSONObject object; + object = list.getJSONObject(i); + if (object.has("id")) { + if (object.getString("id").equals(id)) { + return object; + } + } + } + } catch (JSONException ex) { + throw new OseeCoreException(ex); + } + + return null; + } + public static JSONArray asJSONArray(String value) { try { return new JSONArray(value); @@ -74,7 +92,6 @@ public final class DispoUtil { dispoSetData.setImportPath(dispoSet.getImportPath()); dispoSetData.setNotesList(dispoSet.getNotesList()); dispoSetData.setGuid(dispoSet.getGuid()); - dispoSetData.setStatusCount(dispoSet.getStatusCount()); } else { dispoSetData = null; } @@ -82,14 +99,22 @@ public final class DispoUtil { } public static DispoItemData itemArtToItemData(DispoItem dispoItemArt) { + return itemArtToItemData(dispoItemArt, false); + } + + public static DispoItemData itemArtToItemData(DispoItem dispoItemArt, boolean withDetails) { DispoItemData dispoItemData = new DispoItemData(); dispoItemData.setName(dispoItemArt.getName()); dispoItemData.setGuid(dispoItemArt.getGuid()); dispoItemData.setCreationDate(dispoItemArt.getCreationDate()); + dispoItemData.setAssignee(dispoItemArt.getAssignee()); + dispoItemData.setVersion(dispoItemArt.getVersion()); dispoItemData.setLastUpdate(dispoItemArt.getLastUpdate()); dispoItemData.setStatus(dispoItemArt.getStatus()); - dispoItemData.setAnnotationsList(dispoItemArt.getAnnotationsList()); dispoItemData.setDiscrepanciesList(dispoItemArt.getDiscrepanciesList()); + if (withDetails) { + dispoItemData.setAnnotationsList(dispoItemArt.getAnnotationsList()); + } return dispoItemData; } @@ -105,11 +130,17 @@ public final class DispoUtil { if (jsonObject.has("itemStatus")) { dispoItem.setStatus(jsonObject.getString("itemStatus")); } + if (jsonObject.has("itemVersion")) { + dispoItem.setVersion(jsonObject.getString("itemVersion")); + } + if (jsonObject.has("assignee")) { + dispoItem.setAssignee(jsonObject.getString("assignee")); + } if (jsonObject.has("discrepanciesList")) { - dispoItem.setDiscrepanciesList(jsonObject.getJSONArray("discrepanciesList")); + dispoItem.setDiscrepanciesList(jsonObject.getJSONObject("discrepanciesList")); } if (jsonObject.has("annotationsList")) { - dispoItem.setAnnotationsList(jsonObject.getJSONObject("annotationsList")); + dispoItem.setAnnotationsList(jsonObject.getJSONArray("annotationsList")); } } catch (JSONException ex) { throw new OseeCoreException("Error deserializing a Dispositionable Item.", ex); @@ -128,7 +159,7 @@ public final class DispoUtil { dispoSet.setName(jsonObject.getString("name")); } if (jsonObject.has("operation")) { - dispoSet.setOperation((DispositionOperationsEnum) jsonObject.get("operation")); + dispoSet.setOperation(jsonObject.getString("operation")); } if (jsonObject.has("notesList")) { dispoSet.setNotesList(jsonObject.getJSONArray("notesList")); @@ -153,11 +184,6 @@ public final class DispoUtil { public static JSONObject discrepancyToJsonObj(Discrepancy discrepancy) { JSONObject toReturn = new JSONObject(discrepancy); - try { - toReturn.put("idsOfCoveringAnnotations", discrepancy.getIdsOfCoveringAnnotations()); - } catch (JSONException ex) { - throw new OseeCoreException(ex); - } return toReturn; } @@ -176,7 +202,6 @@ public final class DispoUtil { JSONObject toReturn = new JSONObject(annotation); try { toReturn.put("idsOfCoveredDiscrepancies", annotation.getIdsOfCoveredDiscrepancies()); - toReturn.put("notesList", annotation.getNotesList()); } catch (JSONException ex) { throw new OseeCoreException(ex); } @@ -189,6 +214,9 @@ public final class DispoUtil { if (object.has("id")) { dispoAnnotation.setId(object.getString("id")); } + if (object.has("index")) { + dispoAnnotation.setIndex(object.getInt("index")); + } if (object.has("locationRefs")) { dispoAnnotation.setLocationRefs(object.getString("locationRefs")); } @@ -198,12 +226,15 @@ public final class DispoUtil { if (object.has("isValid")) { dispoAnnotation.setIsConnected(object.getBoolean("isValid")); } - if (object.has("notesList")) { - dispoAnnotation.setNotesList(object.getJSONArray("notesList")); + if (object.has("notes")) { + dispoAnnotation.setNotes(object.getString("notes")); } if (object.has("resolution")) { dispoAnnotation.setResolution(object.getString("resolution")); } + if (object.has("isConnected")) { + dispoAnnotation.setIsConnected(object.getBoolean("isConnected")); + } if (object.has("isResolutionValid")) { dispoAnnotation.setIsResolutionValid(object.getBoolean("isResolutionValid")); } @@ -215,10 +246,9 @@ public final class DispoUtil { public static Discrepancy jsonObjToDiscrepancy(JSONObject object) throws JSONException { Discrepancy discrepancy = new Discrepancy(); - discrepancy.setLocationRange(jsonObjToLocationRagne(object.getJSONObject("locationRange"))); + discrepancy.setLocation(object.getInt("location")); discrepancy.setText(object.getString("text")); - discrepancy.setId(object.getInt("id")); - discrepancy.setIdsOfCoveringAnnotations(object.getJSONArray("idsOfCoveringAnnotations")); + discrepancy.setId(object.getString("id")); return discrepancy; } @@ -228,4 +258,12 @@ public final class DispoUtil { range.setEnd(object.getInt("end")); return range; } + + public static Note jsonObjToNote(JSONObject object) throws JSONException { + Note note = new Note(); + note.setContent(object.getString("content")); + note.setDateString(object.getString("dateString")); + note.setType(object.getString("type")); + return note; + } } diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/LocationRangeUtil.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/LocationRangeUtil.java index 58f10e161fe..edb980cf332 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/LocationRangeUtil.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/util/LocationRangeUtil.java @@ -50,7 +50,8 @@ public final class LocationRangeUtil { locationRef = locationRef.trim(); int startFromString; int endFromString; - if (locationRef.contains("-")) { + + if (locationRef.matches("\\d+-\\d+")) { StringTokenizer tokenizer = new StringTokenizer(locationRef, "-"); startFromString = Integer.valueOf(tokenizer.nextToken()); endFromString = Integer.valueOf(tokenizer.nextToken()); |