Skip to content

Commit

Permalink
#329 Show number of scenarios in scenario list.
Browse files Browse the repository at this point in the history
  • Loading branch information
adiherzog committed Sep 12, 2014
1 parent ab0c7fb commit 08ff1a8
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 36 deletions.
18 changes: 9 additions & 9 deletions scenarioo-client/app/views/usecase.html
Expand Up @@ -49,25 +49,25 @@ <h2 class="sc-pageTitle">{{useCase.description}}</h2>
</tr>
</thead>
<tbody>
<tr ng-class="{'selected':$index==selectedRowIndex}" ng-click="goToScenario(useCase.name, scenario.name)"
<tr ng-class="{'selected':$index==selectedRowIndex}" ng-click="goToScenario(useCase.name, scenarioSummary.scenario.name)"
class="link"
ng-repeat="scenario in filtered=(scenarios | scFilterArray: table.search.searchTerm | orderBy: table.sort.column: table.sort.reverse)">
ng-repeat="scenarioSummary in filtered=(scenarios | scFilterArray: table.search.searchTerm | orderBy: table.sort.column: table.sort.reverse)">
<td>
<span class="label state" ng-class="getStatusStyleClass(scenario.status)">{{scenario.status}}</span>
<span class="label state" ng-class="getStatusStyleClass(scenarioSummary.scenario.status)">{{scenarioSummary.scenario.status}}</span>
</td>
<td>
{{scenario.name | scHumanReadable }}
<span ng-repeat="label in scenario.labels.labels" class="label label-info sc-label" ng-style="getLabelStyle(label)">{{label}}</span>
{{scenarioSummary.scenario.name | scHumanReadable }}
<span ng-repeat="label in scenarioSummary.scenario.labels.labels" class="label label-info sc-label" ng-style="getLabelStyle(label)">{{label}}</span>
</td>
<td>
<a><i class="icon-list-ul icon-with-padding" tooltip="Go to scenario overview"
tooltip-placement="bottom"></i></a>
<a ng-click="goToFirstStep(useCase.name, scenario.name)" tooltip="Go to first step"
<a ng-click="goToFirstStep(useCase.name, scenarioSummary.scenario.name)" tooltip="Go to first step"
tooltip-placement="bottom"><i class="icon-tablet icon-with-padding"></i></a>
</td>
<td>{{scenario.description}}</td>
<td ng-repeat="property in propertiesToShow">{{scenario.details[property]}}</td>
<td>{{scenario.calculatedData.numberOfSteps}}</td>
<td>{{scenarioSummary.scenario.description}}</td>
<td ng-repeat="property in propertiesToShow">{{scenarioSummary.scenario.details[property]}}</td>
<td>{{scenarioSummary.numberOfSteps}}</td>
</tr>
</tbody>
</table>
Expand Down
Expand Up @@ -32,6 +32,7 @@
import org.scenarioo.model.docu.aggregates.objects.LongObjectNamesResolver;
import org.scenarioo.model.docu.aggregates.scenarios.PageSteps;
import org.scenarioo.model.docu.aggregates.scenarios.ScenarioPageSteps;
import org.scenarioo.model.docu.aggregates.usecases.ScenarioSummary;
import org.scenarioo.model.docu.aggregates.usecases.UseCaseScenarios;
import org.scenarioo.model.docu.aggregates.usecases.UseCaseScenariosList;
import org.scenarioo.model.docu.entities.Scenario;
Expand Down Expand Up @@ -63,7 +64,7 @@ public class ScenarioDocuAggregator {
* Version of the file format in filesystem. The data aggregator checks whether the file format is the same,
* otherwise the data has to be recalculated.
*/
public static final String CURRENT_FILE_FORMAT_VERSION = "0.35";
public static final String CURRENT_FILE_FORMAT_VERSION = "0.36";

private final static Logger LOGGER = Logger.getLogger(ScenarioDocuAggregator.class);

Expand Down Expand Up @@ -137,40 +138,56 @@ private UseCaseScenariosList calculateUseCaseScenariosList() {
List<UseCaseScenarios> useCaseScenarios = new ArrayList<UseCaseScenarios>();
List<UseCase> usecases = reader.loadUsecases(buildIdentifier.getBranchName(), buildIdentifier.getBuildName());
for (UseCase usecase : usecases) {
UseCaseScenarios item = new UseCaseScenarios();
UseCaseScenarios useCaseWithScenarios = new UseCaseScenarios();
List<Scenario> scenarios = reader.loadScenarios(buildIdentifier.getBranchName(),
buildIdentifier.getBuildName(), usecase.getName());

boolean atLeastOneScenarioFailed = false;
for (Scenario scenario : scenarios) {
if (StringUtils.equals(scenario.getStatus(), FAILED_STATE)) {
atLeastOneScenarioFailed = true;
break;
}
}

if (usecase.getStatus() == null) {
usecase.setStatus(atLeastOneScenarioFailed ? FAILED_STATE : SUCCESS_STATE);
}
item.setScenarios(scenarios);
item.setUseCase(usecase);
useCaseScenarios.add(item);
useCaseWithScenarios.setScenarios(createScenarioSummaries(scenarios));
useCaseWithScenarios.setUseCase(usecase);
useCaseScenarios.add(useCaseWithScenarios);
}
result.setUseCaseScenarios(useCaseScenarios);
return result;
}

private List<ScenarioSummary> createScenarioSummaries(final List<Scenario> scenarios) {
List<ScenarioSummary> scenarioSummaries = new ArrayList<ScenarioSummary>(scenarios.size());
for (Scenario scenario : scenarios) {
scenarioSummaries.add(createSummary(scenario));
}
return scenarioSummaries;
}

private ScenarioSummary createSummary(final Scenario scenario) {
ScenarioSummary summary = new ScenarioSummary();
summary.setScenario(scenario);
return summary;
}

private void calulateAggregatedDataForUseCase(final UseCaseScenarios useCaseScenarios) {

LOGGER.info(" calculating aggregated data for use case : " + useCaseScenarios.getUseCase().getName());

List<ObjectReference> referencePath = objectRepository.addReferencedUseCaseObjects(useCaseScenarios
.getUseCase());

for (Scenario scenario : useCaseScenarios.getScenarios()) {
for (ScenarioSummary scenario : useCaseScenarios.getScenarios()) {
try {
calculateAggregatedDataForScenario(referencePath, useCaseScenarios.getUseCase(), scenario);
addScenarioStatistics(scenario);
addScenarioStatistics(scenario.getScenario());
} catch (ResourceNotFoundException ex) {
LOGGER.warn("could not load scenario " + scenario.getName() + " in use case"
LOGGER.warn("could not load scenario " + scenario.getScenario().getName() + " in use case"
+ useCaseScenarios.getUseCase().getName());
}
}
Expand All @@ -189,13 +206,16 @@ private void addScenarioStatistics(final Scenario scenario) {
}

private void calculateAggregatedDataForScenario(List<ObjectReference> referencePath, final UseCase usecase,
final Scenario scenario) {
final ScenarioSummary scenarioSummary) {
Scenario scenario = scenarioSummary.getScenario();

referencePath = objectRepository.addReferencedScenarioObjects(referencePath, scenario);

LOGGER.info(" calculating aggregated data for scenario : " + scenario.getName());
ScenarioPageSteps scenarioPageSteps = calculateAggregatedDataForSteps(usecase, scenario, referencePath);

scenarioSummary.setNumberOfSteps(scenarioPageSteps.getTotalNumberOfStepsInScenario());

dao.saveScenarioPageSteps(buildIdentifier, scenarioPageSteps);
}

Expand Down
Expand Up @@ -46,10 +46,10 @@
import org.scenarioo.model.docu.aggregates.scenarios.ScenarioPageSteps;
import org.scenarioo.model.docu.aggregates.steps.StepLink;
import org.scenarioo.model.docu.aggregates.steps.StepNavigation;
import org.scenarioo.model.docu.aggregates.usecases.ScenarioSummary;
import org.scenarioo.model.docu.aggregates.usecases.UseCaseScenarios;
import org.scenarioo.model.docu.aggregates.usecases.UseCaseScenariosList;
import org.scenarioo.model.docu.entities.Build;
import org.scenarioo.model.docu.entities.Scenario;
import org.scenarioo.model.docu.entities.generic.ObjectDescription;
import org.scenarioo.model.docu.entities.generic.ObjectList;
import org.scenarioo.model.docu.entities.generic.ObjectReference;
Expand Down Expand Up @@ -151,13 +151,15 @@ private void enrichWithBuildDatesIfThisIsTheLastSuccessfulScenariosBuild(final B

Date latestImportedBuildDate = index.getLatestImportedBuildDate();

for (Scenario scenario : useCaseWithScenarios.getScenarios()) {
Date buildDate = index.getBuildDateForScenario(useCaseName, scenario.getName());
for (ScenarioSummary scenario : useCaseWithScenarios.getScenarios()) {
// TODO Add the "old build date" to the ScenarioSummary on aggregation time and as a separate field.
Date buildDate = index.getBuildDateForScenario(useCaseName, scenario.getScenario().getName());
if (buildDate == null || buildDate.equals(latestImportedBuildDate)) {
continue;
}
scenario.setDescription("Scenario is from an old build (" + dateFormatter.format(buildDate) + ")! "
+ scenario.getDescription());
scenario.getScenario().setDescription(
"Scenario is from an old build (" + dateFormatter.format(buildDate) + ")! "
+ scenario.getScenario().getDescription());
}
}

Expand Down
@@ -0,0 +1,29 @@
package org.scenarioo.model.docu.aggregates.usecases;

import org.scenarioo.model.docu.entities.Scenario;

/**
* An imported Scenario in the scenario list of a use case.
*/
public class ScenarioSummary {

private Scenario scenario;
private int numberOfSteps;

public Scenario getScenario() {
return scenario;
}

public void setScenario(final Scenario scenario) {
this.scenario = scenario;
}

public int getNumberOfSteps() {
return numberOfSteps;
}

public void setNumberOfSteps(final int numberOfSteps) {
this.numberOfSteps = numberOfSteps;
}

}
Expand Up @@ -26,7 +26,6 @@
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

import org.scenarioo.model.docu.entities.Scenario;
import org.scenarioo.model.docu.entities.UseCase;

/**
Expand All @@ -35,27 +34,27 @@
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class UseCaseScenarios {

private UseCase useCase;

@XmlElementWrapper(name = "scenarios")
@XmlElement(name = "scenario")
private List<Scenario> scenarios = new ArrayList<Scenario>();

@XmlElement(name = "scenarioSummary")
private List<ScenarioSummary> scenarios = new ArrayList<ScenarioSummary>();
public UseCase getUseCase() {
return useCase;
}

public void setUseCase(UseCase useCase) {
public void setUseCase(final UseCase useCase) {
this.useCase = useCase;
}

public List<Scenario> getScenarios() {
public List<ScenarioSummary> getScenarios() {
return scenarios;
}

public void setScenarios(List<Scenario> scenarios) {
public void setScenarios(final List<ScenarioSummary> scenarios) {
this.scenarios = scenarios;
}

}

0 comments on commit 08ff1a8

Please sign in to comment.