Skip to content

Commit

Permalink
Merge pull request #66 from q-rapids/develop
Browse files Browse the repository at this point in the history
Release 0.3.5
  • Loading branch information
AleixBalletbo authored Jul 2, 2019
2 parents 1d41312 + e12dcfe commit 16e0548
Show file tree
Hide file tree
Showing 38 changed files with 1,455 additions and 244 deletions.
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ apply plugin: 'org.springframework.boot'
apply plugin: 'war'

group = 'com.upc.gessi.qrapids'
version = '0.3.4'
version = '0.3.5'
sourceCompatibility = 1.8

war {
Expand Down Expand Up @@ -66,10 +66,10 @@ dependencies {
compile('org.elasticsearch.client:transport:5.6.3')
compile('org.elasticsearch:elasticsearch:5.6.3')
compile('org.elasticsearch.client:elasticsearch-rest-high-level-client:5.6.3')
compile files('libs/qrapids-qma-elastic-0.13.jar')
compile files('libs/qrapids-qma-elastic-0.14.jar')

//API QR Generator
compile files('libs/qrapids-qr_generator-0.1.jar')
compile files('libs/qrapids-qr_generator-0.2.jar')


testCompile('org.springframework.boot:spring-boot-starter-test')
Expand Down
Binary file not shown.
Binary file added libs/qrapids-qr_generator-0.2.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.upc.gessi.qrapids.app.dto.DTOMetric;
import evaluation.Factor;
import evaluation.Metric;
import org.apache.tomcat.jni.Local;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -73,13 +74,24 @@ public List<DTOMetric> HistoricalData(String id, LocalDate from, LocalDate to, S
return result;
}

public List<DTOMetric> SingleHistoricalData (String metricId, LocalDate from, LocalDate to, String prj) throws IOException {
qmacon.initConnexion();
MetricEvaluationDTO metricEvaluationDTO = Metric.getSingleEvaluation(prj, metricId, from, to);
List<MetricEvaluationDTO> metricEvaluationDTOList = new ArrayList<>();
metricEvaluationDTOList.add(metricEvaluationDTO);
return MetricEvaluationDTOListToDTOMetricList(metricEvaluationDTOList);
}


public static List<DTOMetric> MetricEvaluationDTOListToDTOMetricList(List<MetricEvaluationDTO> evals) {
List<DTOMetric> m = new ArrayList<>();
for (Iterator<MetricEvaluationDTO> iterMetrics = evals.iterator(); iterMetrics.hasNext(); ) {
MetricEvaluationDTO metric = iterMetrics.next();
for (Iterator<EvaluationDTO> iterEvals = metric.getEvaluations().iterator(); iterEvals.hasNext(); ) {
EvaluationDTO evaluation = iterEvals.next();
m.add(MetricEvaluationDTOToDTOMetric(metric, evaluation));
if (metric != null) {
for (Iterator<EvaluationDTO> iterEvals = metric.getEvaluations().iterator(); iterEvals.hasNext(); ) {
EvaluationDTO evaluation = iterEvals.next();
m.add(MetricEvaluationDTOToDTOMetric(metric, evaluation));
}
}
}
return m;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.upc.gessi.qrapids.app.domain.repositories.QR;

import com.upc.gessi.qrapids.app.domain.models.Project;
import com.upc.gessi.qrapids.app.domain.models.QualityRequirement;
import com.upc.gessi.qrapids.app.dto.DTODecisionQualityRequirement;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;

import java.time.LocalDate;
import java.util.Date;
import java.util.List;

public interface QRRepository extends JpaRepository<QualityRequirement, Long>, PagingAndSortingRepository<QualityRequirement,Long>, CustomQRRepository {
Expand All @@ -16,7 +17,10 @@ public interface QRRepository extends JpaRepository<QualityRequirement, Long>, P

List<QualityRequirement> findByProjectIdOrderByDecision_DateDesc (Long projectId);

@Query("SELECT new com.upc.gessi.qrapids.app.dto.DTODecisionQualityRequirement(d.id, d.type, d.date, a.username, d.rationale, d.patternId, q.requirement, q.description, q.goal, q.backlogId, q.backlogUrl) FROM QualityRequirement q RIGHT JOIN q.decision d LEFT JOIN d.author a WHERE d.project.id = :projectId ORDER BY d.date DESC")
List<DTODecisionQualityRequirement> getAllDecisionsAndQRsByProject_Id(@Param("projectId") Long projectId);
@Query("SELECT new com.upc.gessi.qrapids.app.dto.DTODecisionQualityRequirement(d.id, d.type, d.date, a.username, d.rationale, d.patternId, q.requirement, q.description, q.goal, q.backlogId, q.backlogUrl)" +
"FROM QualityRequirement q RIGHT JOIN q.decision d LEFT JOIN d.author a " +
"WHERE d.project.id = :projectId AND d.date <= :to AND d.date >= :from " +
"ORDER BY d.date DESC")
List<DTODecisionQualityRequirement> getAllDecisionsAndQRsByProject_Id(@Param("projectId") Long projectId, @Param("from") Date from, @Param("to") Date to);

}
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ DTOQualityRequirement newQRFromAlert(@PathVariable String id, @RequestParam(valu
QualityRequirement qualityRequirement = addQR(requirement, description, goal, rationale, patternId, id, user, prj);
DTOQualityRequirement dtoQualityRequirement = new DTOQualityRequirement(
qualityRequirement.getId(),
new java.sql.Date(qualityRequirement.getAlert().getDate().getTime()),
qualityRequirement.getRequirement(),
qualityRequirement.getDescription(),
qualityRequirement.getGoal(),
Expand Down Expand Up @@ -204,6 +205,7 @@ public DTOQualityRequirement newQR (@RequestParam(value = "prj") String prj, Htt
QualityRequirement qualityRequirement = addQR(requirement, description, goal, rationale, patternId, null, user, prj);
DTOQualityRequirement dtoQualityRequirement = new DTOQualityRequirement(
qualityRequirement.getId(),
new java.sql.Date(qualityRequirement.getAlert().getDate().getTime()),
qualityRequirement.getRequirement(),
qualityRequirement.getDescription(),
qualityRequirement.getGoal(),
Expand Down Expand Up @@ -246,13 +248,35 @@ public List<DTOQualityRequirement> getQRs(@RequestParam(value = "prj") String pr
List<DTOQualityRequirement> dtoQualityRequirements = new ArrayList<>();
List<QualityRequirement> qualityRequirements = qrRepository.findByProjectIdOrderByDecision_DateDesc(project.getId());
for (QualityRequirement qualityRequirement : qualityRequirements) {
dtoQualityRequirements.add(new DTOQualityRequirement(
DTOQualityRequirement dtoQualityRequirement = new DTOQualityRequirement(
qualityRequirement.getId(),
new java.sql.Date(qualityRequirement.getAlert().getDate().getTime()),
qualityRequirement.getRequirement(),
qualityRequirement.getDescription(),
qualityRequirement.getGoal(),
qualityRequirement.getBacklogId(),
qualityRequirement.getBacklogUrl()));
qualityRequirement.getBacklogUrl());

Alert alert = qualityRequirement.getAlert();
if (alert != null) {
DTOAlert dtoAlert = new DTOAlert(
alert.getId(),
alert.getId_element(),
alert.getName(),
alert.getType(),
alert.getValue(),
alert.getThreshold(),
alert.getCategory(),
new java.sql.Date(alert.getDate().getTime()),
alert.getStatus(),
alert.isReqAssociat(),
null);
dtoQualityRequirement.setAlert(dtoAlert);
}

dtoQualityRequirement.setBacklogProjectId(project.getBacklogId());

dtoQualityRequirements.add(dtoQualityRequirement);
}
return dtoQualityRequirements;
}
Expand Down Expand Up @@ -309,10 +333,13 @@ public QualityRequirementPattern getQRPattern (@PathVariable String id) {
return gen.getQRPattern(Long.parseLong(id));
}

@GetMapping("/api/qrPatterns/{id}/metrics")
public List<String> getMetricsForQRPattern (@PathVariable String id) {
@GetMapping("/api/qrPatterns/{id}/metric")
public String getMetricsForQRPattern (@PathVariable String id) {
QRGenerator gen = new QRGenerator(pabreUrl);
return gen.getMetricsForPattern(Integer.parseInt(id));
List<Integer> ids = new ArrayList<>();
Integer patternId = Integer.parseInt(id);
ids.add(patternId);
return gen.getMetricsForPatterns(ids).get(patternId);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.upc.gessi.qrapids.app.domain.repositories.QR.QRRepository;
import com.upc.gessi.qrapids.app.dto.DTODecision;
import com.upc.gessi.qrapids.app.dto.DTODecisionQualityRequirement;
import org.apache.tomcat.jni.Local;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -16,11 +17,11 @@
import qr.models.QualityRequirementPattern;

import java.sql.Date;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
public class Decisions {
Expand All @@ -38,18 +39,33 @@ public class Decisions {
String pabreUrl;

@GetMapping("/api/decisions")
public List<DTODecision> getDecisions (@RequestParam(value = "prj") String prj, @RequestParam(required = false, defaultValue = "false") boolean qrs) throws Exception {
public List<DTODecision> getDecisions (@RequestParam(value = "prj") String prj, @RequestParam(required = false, defaultValue = "false") boolean qrs, @RequestParam(required = false) String from, @RequestParam(required = false) String to) throws Exception {
LocalDate fromDate = LocalDate.ofEpochDay(0);
if (from != null) {
fromDate = LocalDate.parse(from);
}
LocalDate toDate = LocalDate.now();
if (to != null) {
toDate = LocalDate.parse(to);
}
toDate = toDate.plusDays(1);

Project project = projectRepository.findByExternalId(prj);
List<DTODecision> DTODecisions = new ArrayList<>();
QRGenerator qrGenerator = new QRGenerator(pabreUrl);
if (qrs) {
QRGenerator qrGenerator = new QRGenerator(pabreUrl);
List<QualityRequirementPattern> qualityRequirementPatterns = qrGenerator.getAllQRPatterns();
Map<Integer, QualityRequirementPattern> qualityRequirementPatternMap = new HashMap<>();
for (QualityRequirementPattern qualityRequirementPattern : qualityRequirementPatterns) {
qualityRequirementPatternMap.put(qualityRequirementPattern.getId(), qualityRequirementPattern);
}
List<DTODecisionQualityRequirement> dtoDecisionQualityRequirements = qrRepository.getAllDecisionsAndQRsByProject_Id(project.getId());
List<Integer> patternIds = new ArrayList<>();
patternIds.addAll(qualityRequirementPatternMap.keySet());
Map<Integer, String> metricForPatternMap = qrGenerator.getMetricsForPatterns(patternIds);

List<DTODecisionQualityRequirement> dtoDecisionQualityRequirements = qrRepository.getAllDecisionsAndQRsByProject_Id(project.getId(), Date.valueOf(fromDate), Date.valueOf(toDate));
for (DTODecisionQualityRequirement dtoDecisionQualityRequirement : dtoDecisionQualityRequirements) {
dtoDecisionQualityRequirement.setElementId(metricForPatternMap.get(dtoDecisionQualityRequirement.getPatternId()));
if (dtoDecisionQualityRequirement.getRequirement() != null) {
DTODecisions.add(dtoDecisionQualityRequirement);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ List<DTOMetric> getMetricsHistoricalData(@RequestParam(value = "prj", required=f
return qmam.HistoricalData(id, LocalDate.parse(from), LocalDate.parse(to), prj);
}

@RequestMapping("/api/Metrics/{id}/HistoricalData")
public @ResponseBody
List<DTOMetric> getHistoricalDataForMetric(@RequestParam(value = "prj", required=false) String prj, @PathVariable String id, @RequestParam("from") String from, @RequestParam("to") String to) throws IOException {
return qmam.SingleHistoricalData(id, LocalDate.parse(from), LocalDate.parse(to), prj);
}

@RequestMapping("/api/Metrics/PredictionData/{id}")
public @ResponseBody
List<DTOMetric> getMetricsPredicitionData(@RequestParam(value = "prj", required=false) String prj, @RequestParam("technique") String technique, @RequestParam("horizon") String horizon, @PathVariable String id) throws IOException {
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/com/upc/gessi/qrapids/app/dto/DTODecision.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class DTODecision {
private String author;
private String rationale;
private int patternId;
private String elementId;

public DTODecision(long id, DecisionType type, Date date, String author, String rationale, int patternId) {
this.id = id;
Expand Down Expand Up @@ -69,4 +70,12 @@ public int getPatternId() {
public void setPatternId(int patternId) {
this.patternId = patternId;
}

public String getElementId() {
return elementId;
}

public void setElementId(String elementId) {
this.elementId = elementId;
}
}
9 changes: 8 additions & 1 deletion src/main/java/com/upc/gessi/qrapids/app/dto/DTOMetric.java
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,14 @@ public String getId() {
}

public String getName() {
return this.name.isEmpty() ? this.id : this.name;
if (this.name.isEmpty()) {
return this.id;
} else {
if (this.name.startsWith("\"") && this.name.endsWith("\"")) {
return this.name.substring(1, this.name.length()-1);
}
else return this.name;
}
}

public String getDescription() { return description;}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
package com.upc.gessi.qrapids.app.dto;

import java.sql.Date;

public class DTOQualityRequirement {

private Long id;
private Date date;
private String requirement;
private String description;
private String goal;
private String backlogId;
private String backlogUrl;
private String backlogProjectId;
private DTOAlert alert;

public DTOQualityRequirement(Long id, String requirement, String description, String goal, String backlogId, String backlogUrl) {
public DTOQualityRequirement(Long id, Date date, String requirement, String description, String goal, String backlogId, String backlogUrl) {
this.id = id;
this.date = date;
this.requirement = requirement;
this.description = description;
this.goal = goal;
Expand All @@ -26,6 +32,14 @@ public void setId(Long id) {
this.id = id;
}

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

public String getRequirement() {
return requirement;
}
Expand Down Expand Up @@ -65,4 +79,20 @@ public String getBacklogUrl() {
public void setBacklogUrl(String backlogUrl) {
this.backlogUrl = backlogUrl;
}

public String getBacklogProjectId() {
return backlogProjectId;
}

public void setBacklogProjectId(String backlogProjectId) {
this.backlogProjectId = backlogProjectId;
}

public void setAlert(DTOAlert alert) {
this.alert = alert;
}

public DTOAlert getAlert() {
return alert;
}
}
24 changes: 24 additions & 0 deletions src/main/resources/static/css/stylesDashboard.css
Original file line number Diff line number Diff line change
Expand Up @@ -154,4 +154,28 @@ canvas {
.input-group-addon-qr {
min-width: 115px;
text-align: left;
}

#chartjs-tooltip {
opacity: 1;
position: absolute;
background: rgba(0, 0, 0, .7);
color: white;
border-radius: 3px;
-webkit-transition: all .1s ease;
transition: all .1s ease;
pointer-events: none;
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
}

.chartjs-tooltip-key {
display: inline-block;
width: 10px;
height: 10px;
margin-right: 10px;
}

[ng-click] {
cursor: pointer;
}
Loading

0 comments on commit 16e0548

Please sign in to comment.