Skip to content
Snippets Groups Projects
Commit 6b107051 authored by ginquin's avatar ginquin
Browse files

Visualizar estadísticas sobre quality factor.

parent 38a3288c
No related branches found
No related tags found
No related merge requests found
Showing
with 283 additions and 3 deletions
...@@ -42,6 +42,9 @@ public class StatisticsDesignSmellsController extends SelectorComposer<Component ...@@ -42,6 +42,9 @@ public class StatisticsDesignSmellsController extends SelectorComposer<Component
case "validation_statistics": case "validation_statistics":
locationUri = "/pages/user/StatisticsValidation.zul"; locationUri = "/pages/user/StatisticsValidation.zul";
break; break;
case "qFactors_statistics":
locationUri = "/pages/user/StatisticsQualityFactor.zul";
break;
default: default:
alert("Pendiente de implementar la funcionalidad del menu " + menuItemLabel); alert("Pendiente de implementar la funcionalidad del menu " + menuItemLabel);
break; break;
......
package es.uva.inf.tfg.ginquin.smellswisdom.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.carewebframework.ui.highcharts.Axis;
import org.carewebframework.ui.highcharts.Chart;
import org.carewebframework.ui.highcharts.DataPoint;
import org.carewebframework.ui.highcharts.Series;
import org.zkoss.util.resource.Labels;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zkplus.spring.DelegatingVariableResolver;
import es.uva.inf.tfg.ginquin.smellswisdom.services.QualityFactorService;
@VariableResolver(DelegatingVariableResolver.class)
public class StatisticsQualityFactorController extends SelectorComposer<Component> {
/**
*
*/
private static final long serialVersionUID = 1L;
@Wire
Chart chart1;
@Wire
Chart chart2;
@WireVariable
QualityFactorService qFactorService;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
String title="";
Map<String, Integer> datos=null;
//gráfico circular
datos = qFactorService.getStatiticsQualityFactor();
title= Labels.getLabel("statisticsQFactor.title1");
createPieChart(title,chart1, datos);
//gráfico de barras
datos = qFactorService.getStatiticsQualityFactorImpact();
title= Labels.getLabel("statisticsQFactor.title2");
createBarChart(title,chart2, datos);
}
/**
* Permite crear un gráfico circular.
* @param title titulo del gráfico
* @param compChart componente gráfico donde pintarlo.
* @param datos datos con los que realizar el gráfico.
*/
private void createPieChart(String title,Chart compChart, Map<String, Integer> datos) {
compChart.setType("pie");
compChart.setTitle(title);
compChart.options.plotOptions.allowPointSelect=true;
compChart.options.plotOptions.cursor="pointer";
compChart.options.plotOptions.showInLegend=true;
compChart.options.plotOptions.dataLabels.
formatter="{return this.point.name+': '+Highcharts.numberFormat(this.percentage, 2)+'%'}";
//dividimos el mapa de datos.
List<String> keys = new ArrayList<String>();
List<Integer> data = new ArrayList<Integer>();
for (Map.Entry<String, Integer> entry : datos.entrySet()) {
keys.add(entry.getKey());
data.add(entry.getValue());
}
//series para el gráfico
Series series = compChart.addSeries();
series.name = Labels.getLabel("graphic.total");
for (int j = 0; j < data.size(); j++) {
DataPoint dataPoint = series.addDataPoint(data.get(j).doubleValue());
dataPoint.name=keys.get(j);
}
compChart.run();
}
/**
* Permite crear un gráfico de barras.
* @param title titulo del gráfico
* @param compChart componente gráfico donde pintarlo.
* @param datos datos con los que realizar el gráfico.
*/
private void createBarChart(String title,Chart compChart, Map<String, Integer> datos) {
compChart.setTitle(title);
//dividimos el mapa de datos.
List<String> keys = new ArrayList<String>();
List<Integer> data = new ArrayList<Integer>();
for (Map.Entry<String, Integer> entry : datos.entrySet()) {
keys.add(entry.getKey());
data.add(entry.getValue());
}
// Creamos las x axis
Axis xAxis = compChart.getXAxis();
xAxis.categories.addAll(keys);
//primer yAxis
Axis yAxis = compChart.getYAxis();
yAxis.title.text = Labels.getLabel("graphic.qFactorFrequency");
//serie para el primer yAxis
Series series = compChart.addSeries("column");
series.name = Labels.getLabel("graphic.frequency");
for (int j = 0; j < data.size(); j++) {
series.addDataPoint(j, data.get(j).doubleValue());
}
compChart.run();
}
}
package es.uva.inf.tfg.ginquin.smellswisdom.services;
import java.util.Map;
public interface QualityFactorService {
/**
* Permite obtener la distribución de los quality factor mencionados en los design smells.
* @return datos de los quality factor mencionados en los design smells.
*/
Map<String,Integer> getStatiticsQualityFactor();
/**
* Permite obtener la distribución de los quality factor sobre los impactos de los design smells.
* @return datos de los quality factor sobre los impactos de los design smells
*/
Map<String,Integer> getStatiticsQualityFactorImpact();
}
package es.uva.inf.tfg.ginquin.smellswisdom.services.impl;
import java.math.BigInteger;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
@Repository
public class QualityFactorDao {
@PersistenceContext
private EntityManager em;
@SuppressWarnings("unchecked")
public Map<String, Integer> getStatiticsQualityFactor() {
Query query = em.createNativeQuery(
"SELECT qf.qualitymodel,count(*) "
+ "FROM qfactorsmell qfs,qualityfactor qf "
+ "WHERE qfs.qualityfactor_id=qf.qualityfactor_id "
+ "GROUP BY qf.qualitymodel");
List<Object[]> datos = query.getResultList();
Map<String, Integer> map = new TreeMap<>();
for (Object[] dato : datos) {
map.put((String) dato[0], ((BigInteger) dato[1]).intValue());
}
return map;
}
@SuppressWarnings("unchecked")
public Map<String,Integer> getStatiticsQualityFactorImpact(){
Query query = em.createNativeQuery(
"SELECT qf.name,count(*) "
+ "FROM qfactorsmell qfs,qualityfactor qf "
+ "WHERE qfs.qualityfactor_id=qf.qualityfactor_id "
+ "GROUP BY qf.name");
List<Object[]> datos = query.getResultList();
Map<String,Integer> unSortedMap = new TreeMap<>();
for (Object[] dato : datos) {
unSortedMap.put((String)dato[0], ((BigInteger)dato[1]).intValue());
}
LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>();
unSortedMap.entrySet().stream().sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));
return sortedMap;
}
}
package es.uva.inf.tfg.ginquin.smellswisdom.services.impl;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Service;
import es.uva.inf.tfg.ginquin.smellswisdom.services.QualityFactorService;
@Service("qFactorService")
@Scope(value="singleton",proxyMode=ScopedProxyMode.TARGET_CLASS)
public class QualityFactorServiceImpl implements QualityFactorService {
@Autowired
QualityFactorDao dao;
@Override
public Map<String, Integer> getStatiticsQualityFactor() {
return dao.getStatiticsQualityFactor();
}
@Override
public Map<String, Integer> getStatiticsQualityFactorImpact() {
return dao.getStatiticsQualityFactorImpact();
}
}
...@@ -177,6 +177,7 @@ statistics.menu.designSmell=Design smells ...@@ -177,6 +177,7 @@ statistics.menu.designSmell=Design smells
statistics.menu.aprroach=Enfoques statistics.menu.aprroach=Enfoques
statistics.menu.tool=Herramientas statistics.menu.tool=Herramientas
statistics.menu.validation=Validación statistics.menu.validation=Validación
statistics.menu.qFactor=Factor de calidad
#Labels para gráficos #Labels para gráficos
graphic.absoFrecuency=Frecuencia absoluta graphic.absoFrecuency=Frecuencia absoluta
...@@ -195,6 +196,7 @@ graphic.toolFrequency=Frecuencia de la herramienta ...@@ -195,6 +196,7 @@ graphic.toolFrequency=Frecuencia de la herramienta
graphic.repreFrequency=Frecuencia de la respresentación graphic.repreFrequency=Frecuencia de la respresentación
graphic.projectFrequency=Frecuencia del proyecto graphic.projectFrequency=Frecuencia del proyecto
graphic.measureFrequency=Frecuencia de la medida graphic.measureFrequency=Frecuencia de la medida
graphic.qFactorFrequency=Frecuencia del factor de calidad
#StatiticsPublication.zul #StatiticsPublication.zul
statisticsPubli.title0=Distribución de artículos relevantes a lo largo del período de tiempo por tipo de publicación.. statisticsPubli.title0=Distribución de artículos relevantes a lo largo del período de tiempo por tipo de publicación..
...@@ -226,3 +228,7 @@ statisticsValidation.title1=Distribución de la evidencia de validación sobre l ...@@ -226,3 +228,7 @@ statisticsValidation.title1=Distribución de la evidencia de validación sobre l
statisticsValidation.title2=Distribución de lenguajes de implementación sobre el número de proyectos. statisticsValidation.title2=Distribución de lenguajes de implementación sobre el número de proyectos.
statisticsValidation.title3=Proyectos más utilizados en validación de herramientas/estrategias. statisticsValidation.title3=Proyectos más utilizados en validación de herramientas/estrategias.
statisticsValidation.title4=Distribución de indicadores de rendimiento o mediciones de calidad utilizadas como evidencia sobre los artículos selecionados. statisticsValidation.title4=Distribución de indicadores de rendimiento o mediciones de calidad utilizadas como evidencia sobre los artículos selecionados.
#StatisticsQualityFactor.zul
statisticsQFactor.title1=Distribución de los factores de calidad mencionados con respecto a los Design smells en los artículos relevantes agrupados por modelos de calidad.
statisticsQFactor.title2=Factores de calidad más mencionados como afectados por el número de Design Smells que analizan su impacto en ellos.
\ No newline at end of file
...@@ -177,6 +177,7 @@ statistics.menu.designSmell=Design smells ...@@ -177,6 +177,7 @@ statistics.menu.designSmell=Design smells
statistics.menu.aprroach=Approaches statistics.menu.aprroach=Approaches
statistics.menu.tool=Tools statistics.menu.tool=Tools
statistics.menu.validation=Validation statistics.menu.validation=Validation
statistics.menu.qFactor=Quality factor
#Labels para gráficos #Labels para gráficos
graphic.absoFrecuency=Absolute frequency graphic.absoFrecuency=Absolute frequency
...@@ -195,6 +196,7 @@ graphic.toolFrequency=Tool frequency ...@@ -195,6 +196,7 @@ graphic.toolFrequency=Tool frequency
graphic.repreFrequency=Representation frequency graphic.repreFrequency=Representation frequency
graphic.projectFrequency=Project frequency graphic.projectFrequency=Project frequency
graphic.measureFrequency=Measure frequency graphic.measureFrequency=Measure frequency
graphic.qFactorFrequency=Quality factor frequency
#StatiticsPublication.zul #StatiticsPublication.zul
statisticsPubli.title0=Distribution of relevant papers over time period per publication type. statisticsPubli.title0=Distribution of relevant papers over time period per publication type.
...@@ -226,3 +228,7 @@ statisticsValidation.title1=Distribution of validation evidence over the selecte ...@@ -226,3 +228,7 @@ statisticsValidation.title1=Distribution of validation evidence over the selecte
statisticsValidation.title2=Distribution of implementation languages over the number of projects. statisticsValidation.title2=Distribution of implementation languages over the number of projects.
statisticsValidation.title3=Most used projects in validation of tools/strategies. statisticsValidation.title3=Most used projects in validation of tools/strategies.
statisticsValidation.title4=Distribution of performance indicators or quality measurements used as evidence over the selected paper. statisticsValidation.title4=Distribution of performance indicators or quality measurements used as evidence over the selected paper.
#StatisticsQualityFactor.zul
statisticsQFactor.title1=Distribution of quality factors mentioned regarding the Design Smells in the relevant papers grouped by quality models.
statisticsQFactor.title2=Quality factors most mentioned as affected by the number of Design Smells that analyze their impact on them.
\ No newline at end of file
...@@ -177,6 +177,7 @@ statistics.menu.designSmell=Design smells ...@@ -177,6 +177,7 @@ statistics.menu.designSmell=Design smells
statistics.menu.aprroach=Enfoques statistics.menu.aprroach=Enfoques
statistics.menu.tool=Herramientas statistics.menu.tool=Herramientas
statistics.menu.validation=Validación statistics.menu.validation=Validación
statistics.menu.qFactor=Factor de calidad
#Labels para gráficos #Labels para gráficos
graphic.absoFrecuency=Frecuencia absoluta graphic.absoFrecuency=Frecuencia absoluta
...@@ -195,6 +196,7 @@ graphic.toolFrequency=Frecuencia de la herramienta ...@@ -195,6 +196,7 @@ graphic.toolFrequency=Frecuencia de la herramienta
graphic.repreFrequency=Frecuencia de la respresentación graphic.repreFrequency=Frecuencia de la respresentación
graphic.projectFrequency=Frecuencia del proyecto graphic.projectFrequency=Frecuencia del proyecto
graphic.measureFrequency=Frecuencia de la medida graphic.measureFrequency=Frecuencia de la medida
graphic.qFactorFrequency=Frecuencia del factor de calidad
#StatiticsPublication.zul #StatiticsPublication.zul
statisticsPubli.title0=Distribución de artículos relevantes a lo largo del período de tiempo por tipo de publicación.. statisticsPubli.title0=Distribución de artículos relevantes a lo largo del período de tiempo por tipo de publicación..
...@@ -226,3 +228,7 @@ statisticsValidation.title1=Distribución de la evidencia de validación sobre l ...@@ -226,3 +228,7 @@ statisticsValidation.title1=Distribución de la evidencia de validación sobre l
statisticsValidation.title2=Distribución de lenguajes de implementación sobre el número de proyectos. statisticsValidation.title2=Distribución de lenguajes de implementación sobre el número de proyectos.
statisticsValidation.title3=Proyectos más utilizados en validación de herramientas/estrategias. statisticsValidation.title3=Proyectos más utilizados en validación de herramientas/estrategias.
statisticsValidation.title4=Distribución de indicadores de rendimiento o mediciones de calidad utilizadas como evidencia sobre los artículos selecionados. statisticsValidation.title4=Distribución de indicadores de rendimiento o mediciones de calidad utilizadas como evidencia sobre los artículos selecionados.
#StatisticsQualityFactor.zul
statisticsQFactor.title1=Distribución de los factores de calidad mencionados con respecto a los Design smells en los artículos relevantes agrupados por modelos de calidad.
statisticsQFactor.title2=Factores de calidad más mencionados como afectados por el número de Design Smells que analizan su impacto en ellos.
\ No newline at end of file
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
label="${labels.statistics.menu.tool}" /> label="${labels.statistics.menu.tool}" />
<menuitem id="validation_statistics" <menuitem id="validation_statistics"
label="${labels.statistics.menu.validation}" /> label="${labels.statistics.menu.validation}" />
<menuitem id="qFactors_statistics"
label="${labels.statistics.menu.qFactor}" />
</menubar> </menubar>
</div> </div>
</west> </west>
......
<?page title="new page title" contentType="text/html;charset=UTF-8"?>
<div hflex="1" vflex="1"
apply="es.uva.inf.tfg.ginquin.smellswisdom.controller.StatisticsQualityFactorController">
<groupbox mold="3d" width="100%">
<caption label="${labels.statisticsQFactor.title1}"/>
<hchart id="chart1"/>
</groupbox>
<groupbox mold="3d" width="100%">
<caption label="${labels.statisticsQFactor.title2}"/>
<hchart id="chart2"/>
</groupbox>
</div>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment