diff options
author | megumi.telles | 2017-11-08 14:54:39 +0000 |
---|---|---|
committer | megumi.telles | 2017-11-28 17:12:58 +0000 |
commit | df46aead154115407876927592697d9fc143e2c6 (patch) | |
tree | e71af70939cea697b95d6992574fb5f9d1e56c84 | |
parent | 8e082af162e65f086b4b0cea25e7d62f922a7abe (diff) | |
download | org.eclipse.osee-df46aead154115407876927592697d9fc143e2c6.tar.gz org.eclipse.osee-df46aead154115407876927592697d9fc143e2c6.tar.xz org.eclipse.osee-df46aead154115407876927592697d9fc143e2c6.zip |
feature[ats_TW3987]: Provide coverage rerun list
Change-Id: I85005b50723798be9308b8680a1dc299a7fea682
17 files changed, 259 insertions, 17 deletions
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 4ab251ed855..5a6c69d6d2f 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 @@ -31,4 +31,6 @@ public interface DispoSet extends Identifiable<String> { OperationReport getOperationSummary(); String getCiSet(); + + String getRerunList(); } 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 0381a58fa81..ff565f2b659 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 @@ -27,6 +27,7 @@ public class DispoSetData extends DispoSetDescriptorData implements DispoSet { private String importState; private OperationReport operationSummary; private String ciSet; + private String rerunList; public DispoSetData() { @@ -85,4 +86,12 @@ public class DispoSetData extends DispoSetDescriptorData implements DispoSet { return ciSet; } + public String getRerunList() { + return rerunList; + } + + public void setRerunList(String rerunList) { + this.rerunList = rerunList; + } + } 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 67c224936f6..66cfa748de5 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 @@ -54,4 +54,14 @@ public class DispoStrings { public static final String Test_Unit_Resolution = "Test_Script"; public static final String Exception_Handling_Resolution = "Exception_Handling"; + public static final String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; + public static final String BATCH_RERUN_LIST = + XML_HEADER + "<TestManagerConfig>\n" + "\t<ScriptPageConfig>\n" + "\t\t<ServicesSettings/>\n"; + public static final String BATCH_RERUN_LIST_END = "\t</ScriptPageConfig>\n" + "</TestManagerConfig>"; + public static final String SCRIPT_ENTRY = "\t\t<ScriptEntry>\n"; + public static final String SCRIPT_ENTRY_END = "\t\t</ScriptEntry>\n"; + public static final String IS_RUNNABLE = "\t\t\t<IsRunnable>true</IsRunnable>\n"; + public static final String SCRIPT_NAME = "\t\t\t<Name>%s</Name>\n"; + public static final String SCRIPT_PATH = "\t\t\t<Path>%s</Path>\n"; + } diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/importer/AnnotationCopierTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/importer/AnnotationCopierTest.java index 69733710ecd..f05982c35ed 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/importer/AnnotationCopierTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/importer/AnnotationCopierTest.java @@ -162,7 +162,7 @@ public class AnnotationCopierTest { Map<String, Set<DispoItemData>> nameToItems = new HashMap<>(); nameToItems.put(destItem.getName(), Collections.singleton(destItem)); List<DispoItem> toModify = - copier.copyAllDispositions(nameToItems, Collections.singletonList((DispoItem) sourceItem), true, report); + copier.copyAllDispositions(nameToItems, Collections.singletonList((DispoItem) sourceItem), true, null, report); DispoItem modifiedItem = toModify.get(0); List<DispoAnnotationData> modifiedItemAnnotations = modifiedItem.getAnnotationsList(); @@ -215,7 +215,7 @@ public class AnnotationCopierTest { Map<String, Set<DispoItemData>> nameToItems = new HashMap<>(); nameToItems.put(destItem.getName(), Collections.singleton(destItem)); List<DispoItem> toModify = - copier.copyAllDispositions(nameToItems, Collections.singletonList((DispoItem) sourceItem), true, report); + copier.copyAllDispositions(nameToItems, Collections.singletonList((DispoItem) sourceItem), true, null, report); DispoItem modifiedItem = toModify.get(0); List<DispoAnnotationData> modifiedItemAnnotations = modifiedItem.getAnnotationsList(); diff --git a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/importer/DispoSetCopierTest.java b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/importer/DispoSetCopierTest.java index db7a645d638..38592577c3d 100644 --- a/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/importer/DispoSetCopierTest.java +++ b/plugins/org.eclipse.osee.disposition.rest.test/src/org/eclipse/osee/disposition/rest/importer/DispoSetCopierTest.java @@ -162,7 +162,7 @@ public class DispoSetCopierTest { DispoSetCopier copier = new DispoSetCopier(dispoConnector); List<DispoItem> copyResults = copier.copyAllDispositions(getNameToDestItemsMap(Collections.singletonList(destItem)), - Collections.singletonList(sourceItem), false, report); + Collections.singletonList(sourceItem), false, null, report); DispoItem resultItem = copyResults.get(0); 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 ec0ae5bce8f..4c47c390cfb 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 @@ -50,6 +50,7 @@ public final class DispoConstants { public static final AttributeTypeToken DispoItemFileNumber = AttributeTypeToken.valueOf(3458764513820541715L, "dispo.File Number"); public static final AttributeTypeToken DispoItemMethodNumber = AttributeTypeToken.valueOf(3458764513820541460L, "dispo.Method Number"); public static final AttributeTypeToken DispoCiSet = AttributeTypeToken.valueOf(5225296359986133054L, "dispo.Ci Set"); + public static final AttributeTypeToken DispoRerunList = AttributeTypeToken.valueOf(3587660131087940587L, "dispo.Rerun List"); public static final ArtifactToken DISPO_ARTIFACT = ArtifactToken.valueOf(4757831, "DispositionTypes", COMMON, CoreArtifactTypes.OseeTypeDefinition); 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 e4343f2439f..3b243bfc5a7 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 @@ -19,6 +19,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.eclipse.osee.disposition.model.CopySetParams; import org.eclipse.osee.disposition.model.Discrepancy; @@ -610,12 +611,13 @@ public class DispoApiImpl implements DispoApi { namesToDestItems.put(name, itemsWithSameName); } } + HashMap<String, String> reruns = new HashMap<>(); Map<String, DispoItem> namesToToEditItems = new HashMap<>(); OperationReport report = new OperationReport(); DispoSetCopier copier = new DispoSetCopier(dispoConnector); if (!params.getAnnotationParam().isNone()) { - List<DispoItem> copyResults = copier.copyAllDispositions(namesToDestItems, sourceItems, true, report); + List<DispoItem> copyResults = copier.copyAllDispositions(namesToDestItems, sourceItems, true, reruns, report); for (DispoItem item : copyResults) { namesToToEditItems.put(item.getName(), item); } @@ -630,7 +632,22 @@ public class DispoApiImpl implements DispoApi { editDispoItems(branch, destSetId, namesToToEditItems.values(), false, operation); storageProvider.get().updateOperationSummary(getQuery().findUser(), branch, destSetId, report); } + storeRerunData(branch, destSetId, reruns); + } + private void storeRerunData(BranchId branch, String destSetId, HashMap<String, String> reruns) { + StringBuilder sb = new StringBuilder(); + for (Entry<String, String> entry : reruns.entrySet()) { + sb = sb.append(DispoStrings.SCRIPT_ENTRY); + sb = sb.append(String.format(DispoStrings.SCRIPT_NAME, entry.getKey())); + sb = sb.append(String.format(DispoStrings.SCRIPT_PATH, entry.getValue())); + sb = sb.append(DispoStrings.IS_RUNNABLE); + sb = sb.append(DispoStrings.SCRIPT_ENTRY_END); + } + DispoSetData dispoSetData = new DispoSetData(); + dispoSetData.setRerunList(DispoStrings.BATCH_RERUN_LIST + sb.toString() + DispoStrings.BATCH_RERUN_LIST_END); + ArtifactReadable author = getQuery().findUser(); + storageProvider.get().updateDispoSet(author, branch, destSetId, dispoSetData); } @Override 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 c3db4bfa3ec..4a94a54edb6 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 @@ -92,4 +92,9 @@ public class DispoSetArtifact extends BaseIdentity<String> implements DispoSet { return artifact.getSoleAttributeAsString(DispoConstants.DispoCiSet, ""); } + @Override + public String getRerunList() { + return artifact.getSoleAttributeAsString(DispoConstants.DispoRerunList, ""); + } + } 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 f877163514e..1828cc41e1a 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 @@ -237,6 +237,7 @@ public class OrcsStorageImpl implements Storage { JSONArray notesJarray = DispoUtil.noteListToJsonObj(descriptor.getNotesList()); tx.setSoleAttributeFromString(creatdArtId, DispoConstants.DispoNotesJson, notesJarray.toString()); tx.setSoleAttributeFromString(creatdArtId, DispoConstants.DispoCiSet, descriptor.getCiSet()); + tx.setSoleAttributeFromString(creatdArtId, DispoConstants.DispoRerunList, descriptor.getRerunList()); tx.commit(); return creatdArtId.getUuid(); } @@ -272,6 +273,7 @@ public class OrcsStorageImpl implements Storage { String name = newData.getName(); String importPath = newData.getImportPath(); String ciSet = newData.getCiSet(); + String rerunList = newData.getRerunList(); JSONArray notesList = null; if (newData.getNotesList() != null) { @@ -291,6 +293,9 @@ public class OrcsStorageImpl implements Storage { if (ciSet != null && !ciSet.equals(origSetAs.getCiSet())) { tx.setSoleAttributeFromString(dispoSet, DispoConstants.DispoCiSet, ciSet); } + if (rerunList != null && !rerunList.equals(origSetAs.getRerunList())) { + tx.setSoleAttributeFromString(dispoSet, DispoConstants.DispoRerunList, rerunList); + } tx.commit(); } diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/importer/DispoSetCopier.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/importer/DispoSetCopier.java index 3dbfe39315d..b551d888fbc 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/importer/DispoSetCopier.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/importer/DispoSetCopier.java @@ -19,6 +19,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.eclipse.osee.disposition.model.CopySetParamOption; import org.eclipse.osee.disposition.model.Discrepancy; @@ -28,6 +29,7 @@ import org.eclipse.osee.disposition.model.DispoItemData; import org.eclipse.osee.disposition.model.DispoStrings; import org.eclipse.osee.disposition.model.OperationReport; import org.eclipse.osee.disposition.rest.internal.DispoConnector; +import org.eclipse.osee.disposition.rest.internal.report.FindReruns; import org.eclipse.osee.disposition.rest.util.DispoUtil; import org.eclipse.osee.framework.jdk.core.util.Strings; @@ -38,11 +40,14 @@ public class DispoSetCopier { private final DispoConnector connector; + private final List<DispoAnnotationData> needsRerun = new ArrayList<>(); + String batchRunList = ""; + public DispoSetCopier(DispoConnector connector) { this.connector = connector; } - public List<DispoItem> copyAllDispositions(Map<String, Set<DispoItemData>> nameToDestItems, Collection<DispoItem> sourceItems, boolean isCoverageCopy, OperationReport report) { + public List<DispoItem> copyAllDispositions(Map<String, Set<DispoItemData>> nameToDestItems, Collection<DispoItem> sourceItems, boolean isCoverageCopy, HashMap<String, String> reruns, OperationReport report) { List<DispoItem> modifiedItems = new ArrayList<>(); // Iterate through every source item since we want to try to find a match for every item in the source @@ -52,7 +57,8 @@ public class DispoSetCopier { if (destItem != null) { // Only try to copy over annotations if matching dest item is NOT PASS if (!destItem.getStatus().equals(DispoStrings.Item_Pass)) { - DispoItemData newItem = createNewItemWithCopiedAnnotations(destItem, sourceItem, isCoverageCopy, report); + DispoItemData newItem = + createNewItemWithCopiedAnnotations(destItem, sourceItem, isCoverageCopy, reruns, report); if (newItem != null) { modifiedItems.add(newItem); @@ -100,7 +106,7 @@ public class DispoSetCopier { return destItem; } - private DispoItemData createNewItemWithCopiedAnnotations(DispoItemData destItem, DispoItem sourceItem, boolean isCoverageCopy, OperationReport report) { + private DispoItemData createNewItemWithCopiedAnnotations(DispoItemData destItem, DispoItem sourceItem, boolean isCoverageCopy, HashMap<String, String> reruns, OperationReport report) { DispoItemData toReturn = null; boolean isSameDiscrepancies = matchAllDiscrepancies(destItem, sourceItem); if (!isSameDiscrepancies) { @@ -109,11 +115,11 @@ public class DispoSetCopier { WARNING); } - toReturn = buildNewItem(destItem, sourceItem, isCoverageCopy, report, isSameDiscrepancies); + toReturn = buildNewItem(destItem, sourceItem, isCoverageCopy, reruns, report, isSameDiscrepancies); return toReturn; } - private DispoItemData buildNewItem(DispoItemData destItem, DispoItem sourceItem, boolean isCoverageCopy, OperationReport report, boolean isSameDiscrepancies) { + private DispoItemData buildNewItem(DispoItemData destItem, DispoItem sourceItem, boolean isCoverageCopy, HashMap<String, String> reruns, OperationReport report, boolean isSameDiscrepancies) { boolean isChangesMade = false; DispoItemData newItem = initNewItem(destItem, sourceItem); List<DispoAnnotationData> newAnnotations = newItem.getAnnotationsList(); @@ -133,6 +139,10 @@ public class DispoSetCopier { * user should be aware.Currently only for Coverage */ if (!destDefaultAnntationLocations.contains(sourceLocation)) { + if (!nonDefaultAnnotationLocations.containsKey(sourceLocation)) { + newItem.setNeedsRerun(true); + needsRerun.add(sourceAnnotation); + } report.addEntry(destItem.getName(), String.format("Did not copy annotations for location(s) [%s] because they are default annotations", sourceAnnotation.getLocationRefs()), @@ -205,6 +215,14 @@ public class DispoSetCopier { // 2. None of the non-default Annotations cover a Discrepancy in the new import, in which case don't copy them over: MIGHT CHANGE THIS newItem = destItem; newItem.setGuid(sourceItem.getGuid()); + } else if (newItem.getNeedsRerun() != null && newItem.getNeedsRerun()) { + report.addEntry(destItem.getName(), "Needs Rerun", UPDATE); + if (reruns != null) { + HashMap<String, String> tmpList = new FindReruns().createList(needsRerun); + for (Entry<String, String> entry : tmpList.entrySet()) { + reruns.put(entry.getKey(), entry.getValue()); + } + } } else { report.addEntry(destItem.getName(), "Nothing to copy", IGNORE); newItem = null; diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/importer/coverage/LisFileParser.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/importer/coverage/LisFileParser.java index 29866b05e94..fa2e7e5393f 100644 --- a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/importer/coverage/LisFileParser.java +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/importer/coverage/LisFileParser.java @@ -146,7 +146,7 @@ public class LisFileParser implements DispoImporterApi { } } - toReturn = copier.copyAllDispositions(namesToDestItems, exisitingItems.values(), false, report); + toReturn = copier.copyAllDispositions(namesToDestItems, exisitingItems.values(), false, null, report); } else { toReturn = new ArrayList<>(); toReturn.addAll(values); diff --git a/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/report/FindReruns.java b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/report/FindReruns.java new file mode 100644 index 00000000000..f54a64cc825 --- /dev/null +++ b/plugins/org.eclipse.osee.disposition.rest/src/org/eclipse/osee/disposition/rest/internal/report/FindReruns.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2017 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.report; + +import java.util.HashMap; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.eclipse.osee.disposition.model.DispoAnnotationData; + +/** + * @author Megumi Telles + */ +public class FindReruns { + Pattern removeLastDot = Pattern.compile("[^\\.]([^.]*)$", Pattern.CASE_INSENSITIVE); + + public HashMap<String, String> createList(List<DispoAnnotationData> annotations) { + HashMap<String, String> reruns = new HashMap<>(); + for (DispoAnnotationData data : annotations) { + String name = "", path = "", comment = ""; + String resolution = data.getResolution(); + if (!resolution.isEmpty()) { + String[] split = resolution.split("___"); + if (split.length > 1) { + path = split[0]; + comment = split[1]; + } else { + path = split.toString(); + } + path = path.replaceFirst("results", ""); + Matcher matcher = removeLastDot.matcher(path); + while (matcher.find()) { + name = matcher.group() + ".java"; + } + path = path.replaceAll("\\.", "/"); + } + reruns.put(name, path); + } + return reruns; + } +} 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 3f528dcbe65..72cf60cad4b 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 @@ -12,6 +12,7 @@ artifactType "Disposition Set" extends "Artifact" { attribute "dispo.Dispo Config" attribute "dispo.Operation Summary" attribute "dispo.CI Set" + attribute "dispo.Rerun List" } artifactType "dispo.Dispositionable Item" extends "Artifact" { @@ -297,4 +298,13 @@ attributeType "dispo.CI Set" extends StringAttribute { max 1 defaultValue "" mediaType "text/plain" +} + +attributeType "dispo.Rerun List" extends StringAttribute { + id 3587660131087940587 + dataProvider DefaultAttributeDataProvider + min 0 + max 1 + defaultValue "" + mediaType "text/plain" }
\ No newline at end of file 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 index eb2fc601e90..6801d837f68 100644 --- 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 @@ -10,8 +10,11 @@ *******************************************************************************/ package org.eclipse.osee.disposition.rest.resources; +import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; import java.text.SimpleDateFormat; import java.util.Date; import javax.annotation.security.RolesAllowed; @@ -35,6 +38,7 @@ import org.eclipse.osee.disposition.rest.DispoRoles; import org.eclipse.osee.disposition.rest.internal.report.ExportSet; import org.eclipse.osee.disposition.rest.internal.report.STRSReport; import org.eclipse.osee.framework.core.data.BranchId; +import org.eclipse.osee.framework.jdk.core.util.Lib; /** * @author Angel Avila @@ -122,9 +126,8 @@ public class DispoAdminResource { @RolesAllowed(DispoRoles.ROLES_ADMINISTRATOR) @Produces(MediaType.APPLICATION_JSON) public Response getDispoSetCopy(@QueryParam("destinationSet") String destinationSet, @QueryParam("sourceProgram") BranchId sourceBranch, @QueryParam("sourceSet") String sourceSet, CopySetParams params) { - Response.Status status; dispoApi.copyDispoSet(branch, destinationSet, sourceBranch, sourceSet, params); - status = Status.OK; + Response.Status status = Status.OK; return Response.status(status).build(); } @@ -140,4 +143,34 @@ public class DispoAdminResource { return Response.status(status).build(); } + @Path("/rerun") + @GET + @RolesAllowed(DispoRoles.ROLES_ADMINISTRATOR) + @Produces(MediaType.APPLICATION_XML) + public Response getRerunReport(@QueryParam("primarySet") String primarySet) { + DispoSet set = dispoApi.getDispoSetById(branch, primarySet); + String rerunList = set.getRerunList(); + + StreamingOutput streamingOutput = new StreamingOutput() { + + @Override + public void write(OutputStream outputStream) throws IOException, WebApplicationException { + Writer writer = new OutputStreamWriter(outputStream, "UTF-8"); + BufferedWriter out = new BufferedWriter(writer); + try { + out.write(rerunList); + } finally { + Lib.close(out); + } + outputStream.flush(); + } + + }; + + String contentDisposition = + String.format("attachment; filename=\"%s.xml\"; creation-date=\"%s\"", "batch-list", new Date()); + return Response.ok(streamingOutput).header("Content-Disposition", contentDisposition).type( + "application/xml").build(); + } + } diff --git a/plugins/org.eclipse.osee.web.ui/src/dispo/js/adminController.js b/plugins/org.eclipse.osee.web.ui/src/dispo/js/adminController.js index 375fad1ea31..226a337434e 100644 --- a/plugins/org.eclipse.osee.web.ui/src/dispo/js/adminController.js +++ b/plugins/org.eclipse.osee.web.ui/src/dispo/js/adminController.js @@ -8,8 +8,9 @@ app.controller('adminController', [ 'CopySet', 'CopySetCoverage', 'MultiItemEdit', + 'Config', 'uiGridConstants', - function($scope, $rootScope, $modal, Program, Set, Report, CopySet, CopySetCoverage, MultiItemEdit, uiGridConstants) { + function($scope, $rootScope, $modal, Program, Set, Report, CopySet, CopySetCoverage, MultiItemEdit, Config, uiGridConstants) { $scope.readOnly = true; $scope.programSelection = null; $scope.modalShown = false; @@ -21,13 +22,14 @@ app.controller('adminController', [ $scope.selectedItems = []; $scope.isRunningOperation = false; $scope.cachedValue = ""; - + $scope.types = []; + $scope.isCoverage = $rootScope.type == 'codeCoverage'; $scope.programs = Program.query(); var isPrimary = function(importState) { return row.entity.importState != "Warnings" && row.entity.importState != "Failed"; } - + $scope.createNewProgram = function() { if ($scope.newProgramName != "") { var loadingModal = $scope.showLoadingModal(); @@ -218,6 +220,12 @@ app.controller('adminController', [ loadingModal.close(); alert(data.statusText); }); + Config.get({ + programId: $scope.programSelection, + type: $rootScope.type + }, function(data) { + $scope.types = data.validResolutions; + }); }; $scope.editSet = function editSet(set) { @@ -354,6 +362,21 @@ app.controller('adminController', [ }; + $scope.rerunReportStatus = function rerunReportStatus (input) { + var newSet = $scope.getSetById(input.rerunDispositionSet); + var request = []; + request.push( + "/dispo/program/", + $scope.programSelection, + "/admin/rerun?primarySet=", + newSet.guid + ); + var url = request.join(""); + window.open(url); + }; + + + // -------------------- Summary Grids ----------------------\\ var filterBarPlugin = { init: function(scope, grid) { @@ -742,5 +765,44 @@ app.controller('adminController', [ $modalInstance.dismiss('cancel'); }; } + + + // Report Reruns + $scope.openRerunReportStatusModal = function() { + var modalInstance = $modal.open({ + templateUrl: 'rerunReportStatus.html', + controller: RerunReportStatusCtrl, + size: 'sm', + windowClass: 'rerunReportStatusModal', + resolve: { + sets: function() { + return $scope.sets; + }, + types: function() { + return $scope.types; + } + } + }); + + modalInstance.result.then(function(inputs) { + $scope.rerunReportStatus(inputs); + }); + } + + var RerunReportStatusCtrl = function($scope, $modalInstance, sets, types) { + $scope.rerunDispositionSet = ""; + $scope.setsLocal = angular.copy(sets); + $scope.typesLocal = angular.copy(types); + $scope.ok = function() { + var inputs = {}; + inputs.rerunDispositionSet = this.dispositionSet; + inputs.rerunResolutionTypes = this.resolutionTypes; + $modalInstance.close(inputs); + }; + + $scope.cancel = function() { + $modalInstance.dismiss('cancel'); + }; + } } ]);
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.web.ui/src/dispo/js/dispoApp.js b/plugins/org.eclipse.osee.web.ui/src/dispo/js/dispoApp.js index 5dd107798cb..f689c66cf7f 100644 --- a/plugins/org.eclipse.osee.web.ui/src/dispo/js/dispoApp.js +++ b/plugins/org.eclipse.osee.web.ui/src/dispo/js/dispoApp.js @@ -279,4 +279,3 @@ app.provider('Annotation', function() { ]; }); - diff --git a/plugins/org.eclipse.osee.web.ui/src/dispo/views/admin.html b/plugins/org.eclipse.osee.web.ui/src/dispo/views/admin.html index 0d10da4dde3..8f3de586ca5 100644 --- a/plugins/org.eclipse.osee.web.ui/src/dispo/views/admin.html +++ b/plugins/org.eclipse.osee.web.ui/src/dispo/views/admin.html @@ -51,7 +51,8 @@ <button ng-disabled="isRunningOperation" ng-click="openCopySetModal()" ng-show="sets.length > 0" class="btn btn-primary" id=generateReportBtn>Merge Annotations</button> <button ng-disabled="isRunningOperation" ng-click="openMassAssignTeamModal()" ng-show="sets.length > 0" class="btn btn-primary" id=generateReportBtn>Mass Assign Team</button> <button ng-disabled="isRunningOperation" ng-click="openConfigureCiSetModal()" ng-show="sets.length > 0" class="btn btn-primary" id=generateReportBtn>Configure CI Set</button> - <button ng-disabled="isRunningOperation" ng-click="openMassSendDispoItemStatusModal()" ng-show="sets.length > 0" class="btn btn-primary" id=generateReportBtn>Mass Send Dispo Item Status</button> + <button ng-disabled="isRunningOperation" ng-click="openMassSendDispoItemStatusModal()" ng-show="!isCoverage && sets.length > 0" class="btn btn-primary" id=generateReportBtn>Mass Send Dispo Item Status</button> + <button ng-disabled="isRunningOperation" ng-click="openRerunReportStatusModal()" ng-show="isCoverage && sets.length > 0" class="btn btn-primary" id=generateReportBtn>Get Rerun Report</button> </div> </div> </div> @@ -242,6 +243,27 @@ </script> + <script type="text/ng-template" id="rerunReportStatus.html"> + <div class="modal-header"> + <h3 class="modal-title">Get Rerun Report</h3> + </div> + <div class="modal-body" overflow: auto;"> + <div class="form-group"> + Retrieves the rerun list from last known merge. + </div> + <div class="form-group"> + Select Disposition Set + <select class="form-control" ng-model="dispositionSet" ng-options="obj.guid as obj.name for obj in setsLocal"> + </select> + </div> + </div> + <div class="modal-footer"> + <button class="btn btn-primary" ng-click="ok()">OK</button> + <button class="btn btn-warning" ng-click="cancel()">Cancel</button> + </div> + + </script> + </body> </html> |