/**
*
* Copyright (C) norad.fr
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package fr.norad.visuwall.core.business.process.capabilities;
import java.util.Map.Entry;
import fr.norad.visuwall.api.domain.SoftwareProjectId;
import fr.norad.visuwall.api.domain.TestResult;
import fr.norad.visuwall.api.domain.quality.QualityMeasure;
import fr.norad.visuwall.api.domain.quality.QualityResult;
import fr.norad.visuwall.api.exception.BuildNotFoundException;
import fr.norad.visuwall.api.plugin.capability.BasicCapability;
import fr.norad.visuwall.api.plugin.capability.MetricCapability;
import fr.norad.visuwall.api.plugin.capability.TestCapability;
import fr.norad.visuwall.core.business.domain.Build;
import fr.norad.visuwall.core.business.domain.Project;
import org.springframework.stereotype.Component;
@Component
public class MetricCapabilityProcess {
public static String[] metrics = new String[] { "coverage", "ncloc", "violations_density", "it_coverage" };
public void updateLastBuildMetrics(Project project) {
for (SoftwareProjectId softwareProjectId : project.getCapabilities().keySet()) {
BasicCapability capability = project.getCapabilities().get(softwareProjectId);
}
}
void enhanceWithQualityAnalysis(Project analyzedProject, BasicCapability plugin, String... metrics) {
SoftwareProjectId projectId = null;// analyzedProject.getProjectId();
Build build = null;
try {
build = analyzedProject.getLastBuild();
} catch (BuildNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TestResult unitTestResultToMerge = null;
TestResult integrationTestResultToMerge = null;
if (build != null) {
// unitTestResultToMerge = build.getUnitTestResult();
// integrationTestResultToMerge = build.getIntegrationTestResult();
}
//TODO remove all function
// QualityResult qualityResultToMerge = analyzedProject.getQualityResult();
QualityResult qualityResultToMerge = null;
if (plugin instanceof MetricCapability) {
addQualityAnalysis((MetricCapability) plugin, projectId, qualityResultToMerge, metrics);
}
if (plugin instanceof TestCapability) {
addUnitTestsAnalysis((TestCapability) plugin, projectId, unitTestResultToMerge);
addIntegrationTestsAnalysis((TestCapability) plugin, projectId, integrationTestResultToMerge);
}
}
void addQualityAnalysis(MetricCapability metricPlugin, SoftwareProjectId projectId,
QualityResult qualityResultToMerge, String... metrics) {
QualityResult qualityAnalysis = metricPlugin.analyzeQuality(projectId, metrics);
if (qualityAnalysis != null) {
mergeQualityAnalysis(qualityResultToMerge, qualityAnalysis);
}
}
void mergeQualityAnalysis(QualityResult qualityResultToMerge, QualityResult qualityAnalysis) {
for (Entry<String, QualityMeasure> entry : qualityAnalysis.getMeasures()) {
qualityResultToMerge.add(entry.getKey(), entry.getValue());
}
}
void addIntegrationTestsAnalysis(TestCapability testsPlugin, SoftwareProjectId projectId,
TestResult integrationTestResultToMerge) {
TestResult integrationTestsAnalysis = testsPlugin.analyzeIntegrationTests(projectId);
if (integrationTestsAnalysis != null && integrationTestResultToMerge != null) {
mergeTestAnalysis(integrationTestResultToMerge, integrationTestsAnalysis);
}
}
void addUnitTestsAnalysis(TestCapability testsPlugin, SoftwareProjectId projectId,
TestResult unitTestResultToMerge) {
TestResult unitTestsAnalysis = testsPlugin.analyzeUnitTests(projectId);
if (unitTestsAnalysis != null && unitTestResultToMerge != null) {
mergeTestAnalysis(unitTestResultToMerge, unitTestsAnalysis);
}
}
void mergeTestAnalysis(TestResult testResultToMerge, TestResult testsAnalysis) {
if (testsAnalysis.getCoverage() > 0) {
testResultToMerge.setCoverage(testsAnalysis.getCoverage());
}
if (testsAnalysis.getFailCount() > 0) {
testResultToMerge.setFailCount(testsAnalysis.getFailCount());
}
if (testsAnalysis.getPassCount() > 0) {
testResultToMerge.setPassCount(testsAnalysis.getPassCount());
}
if (testsAnalysis.getSkipCount() > 0) {
testResultToMerge.setSkipCount(testsAnalysis.getSkipCount());
}
}
}