Skip to content
Snippets Groups Projects
Commit 38a3288c authored by ginquin's avatar ginquin
Browse files

Visualizar estadísticas sobre validation evidence.

parent 5dad26a9
No related branches found
No related tags found
No related merge requests found
Showing
with 359 additions and 9 deletions
...@@ -39,6 +39,9 @@ public class StatisticsDesignSmellsController extends SelectorComposer<Component ...@@ -39,6 +39,9 @@ public class StatisticsDesignSmellsController extends SelectorComposer<Component
case "tools_statistics": case "tools_statistics":
locationUri = "/pages/user/StatisticsTools.zul"; locationUri = "/pages/user/StatisticsTools.zul";
break; break;
case "validation_statistics":
locationUri = "/pages/user/StatisticsValidation.zul";
break;
default: default:
alert("Pendiente de implementar la funcionalidad del menu " + menuItemLabel); alert("Pendiente de implementar la funcionalidad del menu " + menuItemLabel);
break; break;
......
...@@ -192,7 +192,7 @@ public class StatisticsSmellController extends SelectorComposer<Component>{ ...@@ -192,7 +192,7 @@ public class StatisticsSmellController extends SelectorComposer<Component>{
} }
/** /**
* Permite crear un gráfico de lineas y barras. * Permite crear un gráfico de barras.
* @param title titulo del gráfico * @param title titulo del gráfico
* @param compChart componente gráfico donde pintarlo. * @param compChart componente gráfico donde pintarlo.
* @param datos datos con los que realizar el gráfico. * @param datos datos con los que realizar el gráfico.
......
...@@ -40,7 +40,6 @@ public class StatisticsToolsController extends SelectorComposer<Component>{ ...@@ -40,7 +40,6 @@ public class StatisticsToolsController extends SelectorComposer<Component>{
@Override @Override
public void doAfterCompose(Component comp) throws Exception { public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp); super.doAfterCompose(comp);
//gráfico de lineas y barras
String title=""; String title="";
String cYAxes=""; String cYAxes="";
......
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.EvidenceService;
@VariableResolver(DelegatingVariableResolver.class)
public class StatisticsValidationController extends SelectorComposer<Component> {
/**
*
*/
private static final long serialVersionUID = 1L;
@Wire
Chart chart1;
@Wire
Chart chart2;
@Wire
Chart chart3;
@Wire
Chart chart4;
@WireVariable
EvidenceService evidenceService;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
String title="";
String cYAxis="";
Map<String, Integer> datos=null;
//gráfico circular
datos = evidenceService.getStatiticsTypeofValidation();
title= Labels.getLabel("statisticsValidation.title1");
createPieChart(title,chart1, datos);
//gráfico circular
datos = evidenceService.getStatiticsLanguagesProjectsUsedValidation();
title= Labels.getLabel("statisticsValidation.title2");
createPieChart(title,chart2, datos);
//gráfico circular
datos = evidenceService.getStatiticsTheMostUsedProjectsValidation();
cYAxis=Labels.getLabel("graphic.projectFrequency");
title= Labels.getLabel("statisticsValidation.title3");
createBarChart(title,cYAxis ,chart3, datos);
//gráfico circular
datos = evidenceService.getStatiticsIndicatorTypeValidation();
title= Labels.getLabel("statisticsValidation.title4");
cYAxis=Labels.getLabel("graphic.measureFrequency");
createBarChart(title, cYAxis ,chart4, 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,String cyAxis,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 = cyAxis;
//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; package es.uva.inf.tfg.ginquin.smellswisdom.services;
import java.util.List; import java.util.List;
import java.util.Map;
import es.uva.inf.tfg.ginquin.smellswisdom.domain.Article; import es.uva.inf.tfg.ginquin.smellswisdom.domain.Article;
import es.uva.inf.tfg.ginquin.smellswisdom.domain.Validationevidence; import es.uva.inf.tfg.ginquin.smellswisdom.domain.Validationevidence;
...@@ -27,4 +28,28 @@ public interface EvidenceService { ...@@ -27,4 +28,28 @@ public interface EvidenceService {
*/ */
List<Validationevidence> getEvidencesByArticle(Article article); List<Validationevidence> getEvidencesByArticle(Article article);
/**
* Permite obtener la distribución de los tipos de validación.
* @return datos de los tipos de validación.
*/
Map<String,Integer> getStatiticsTypeofValidation();
/**
* Permite obtener la distribución de los lenguajes de proyectos usados en la validación.
* @return datos de los lenguajes de proyectos usados en la validación.
*/
Map<String,Integer> getStatiticsLanguagesProjectsUsedValidation();
/**
* Permite obtener la distribución de los lenguajes de proyectos usados en la validación.
* @return datos de los lenguajes de proyectos usados en la validación.
*/
Map<String,Integer> getStatiticsTheMostUsedProjectsValidation();
/**
* Permite obtener la distribución de los indicadores utilizados en ela evidencia.
* @return datos de los indicadores utilizados en la evidencia
*/
Map<String,Integer> getStatiticsIndicatorTypeValidation();
} }
package es.uva.inf.tfg.ginquin.smellswisdom.services.impl; 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.List;
import java.util.Map;
import java.util.TreeMap;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -47,4 +53,89 @@ public class EvidenceDao { ...@@ -47,4 +53,89 @@ public class EvidenceDao {
return validationEvidences; return validationEvidences;
} }
@SuppressWarnings("unchecked")
public Map<String, Integer> getStatiticsTypeofValidation() {
Query query = em.createNativeQuery(
"SELECT tos.type,count(*) as num "
+ "FROM validationevidence ve,typeofstudy tos "
+ "WHERE ve.type_id=tos.typeofstudy_id "
+ "GROUP BY tos.type");
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> getStatiticsLanguagesProjectsUsedValidation() {
Query query = em.createNativeQuery(
"SELECT l.type,count(*) as num "
+ "FROM project p,language l "
+ "WHERE p.project_id in(SELECT distinct(project_id) from project projectvevidence) "
+ "AND p.mainlanguage_id= l.language_id "
+ "GROUP BY l.type");
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> getStatiticsTheMostUsedProjectsValidation(){
Query query = em.createNativeQuery("SELECT p.name, count(*) as num "
+"FROM projectvevidence pevi, project p "
+"WHERE pevi.project_id=p.project_id "
+"GROUP BY p.name "
+"HAVING count(*)>=15");
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;
}
@SuppressWarnings("unchecked")
public Map<String,Integer> getStatiticsIndicatorType(){
Query query = em.createNativeQuery("SELECT tabla.type,count(*) "
+"FROM (SELECT ve.validationevidence_id, it.type\n" +
"FROM validationevidence ve, measure m,indicatortype it\n" +
"WHERE ve.validationevidence_id=m.validationevidence_id\n" +
"AND m.typemeasure_id=it.indicatortype_id\n" +
"GROUP BY(ve.validationevidence_id, it.type)) tabla "
+"GROUP BY tabla.type");
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; package es.uva.inf.tfg.ginquin.smellswisdom.services.impl;
import java.util.List; import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
...@@ -34,4 +35,24 @@ public class EvidenceServiceImpl implements EvidenceService { ...@@ -34,4 +35,24 @@ public class EvidenceServiceImpl implements EvidenceService {
return dao.findByArticle(article); return dao.findByArticle(article);
} }
@Override
public Map<String, Integer> getStatiticsTypeofValidation() {
return dao.getStatiticsTypeofValidation();
}
@Override
public Map<String, Integer> getStatiticsLanguagesProjectsUsedValidation() {
return dao.getStatiticsLanguagesProjectsUsedValidation();
}
@Override
public Map<String, Integer> getStatiticsTheMostUsedProjectsValidation() {
return dao.getStatiticsTheMostUsedProjectsValidation();
}
@Override
public Map<String, Integer> getStatiticsIndicatorTypeValidation() {
return dao.getStatiticsIndicatorType();
}
} }
...@@ -176,6 +176,7 @@ statistics.menu.publication=Publicación ...@@ -176,6 +176,7 @@ statistics.menu.publication=Publicación
statistics.menu.designSmell=Design smells 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
#Labels para gráficos #Labels para gráficos
graphic.absoFrecuency=Frecuencia absoluta graphic.absoFrecuency=Frecuencia absoluta
...@@ -192,6 +193,8 @@ graphic.typeApproach=Tipo de enfoque ...@@ -192,6 +193,8 @@ graphic.typeApproach=Tipo de enfoque
graphic.total=total graphic.total=total
graphic.toolFrequency=Frecuencia de la herramienta 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.measureFrequency=Frecuencia de la medida
#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..
...@@ -212,3 +215,14 @@ statisticsApproaches.title0=Distribución de los enfoques a lo largo de los año ...@@ -212,3 +215,14 @@ statisticsApproaches.title0=Distribución de los enfoques a lo largo de los año
statisticsApproaches.title1=Grado de automatización sobre los artículos seleccionados. statisticsApproaches.title1=Grado de automatización sobre los artículos seleccionados.
statisticsApproaches.title2=Distribución de la actividad relacionada con los Design smells en los artículos seleccionados. statisticsApproaches.title2=Distribución de la actividad relacionada con los Design smells en los artículos seleccionados.
statisticsApproaches.title3=Distribución de los artefactos de software sobre los artículos seleccionados. statisticsApproaches.title3=Distribución de los artefactos de software sobre los artículos seleccionados.
#StatisticsTools.zul
statisticsTools.title1=Frecuencia de las herramientas de detección más mencionadas.
statisticsTools.title2=Distribución de los tipos de presencia de herramientas en los artículos del estudio.
statisticsTools.title3=Distribución de la representación interna del software sobre las herramientas de detección.
#StatisticsValidation.zul
statisticsValidation.title1=Distribución de la evidencia de validación sobre los artículos seleccionados.
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.title4=Distribución de indicadores de rendimiento o mediciones de calidad utilizadas como evidencia sobre los artículos selecionados.
\ No newline at end of file
...@@ -176,6 +176,7 @@ statistics.menu.publication=Publication ...@@ -176,6 +176,7 @@ statistics.menu.publication=Publication
statistics.menu.designSmell=Design smells 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
#Labels para gráficos #Labels para gráficos
graphic.absoFrecuency=Absolute frequency graphic.absoFrecuency=Absolute frequency
...@@ -192,6 +193,8 @@ graphic.typeApproach=Type of approach ...@@ -192,6 +193,8 @@ graphic.typeApproach=Type of approach
graphic.total=total graphic.total=total
graphic.toolFrequency=Tool frequency graphic.toolFrequency=Tool frequency
graphic.repreFrequency=Representation frequency graphic.repreFrequency=Representation frequency
graphic.projectFrequency=Project frequency
graphic.measureFrequency=Measure 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.
...@@ -214,6 +217,12 @@ statisticsApproaches.title2=Distribution of the Design Smell related activity ov ...@@ -214,6 +217,12 @@ statisticsApproaches.title2=Distribution of the Design Smell related activity ov
statisticsApproaches.title3=Distribution of the software artifacts over the selected papers. statisticsApproaches.title3=Distribution of the software artifacts over the selected papers.
#StatisticsTools.zul #StatisticsTools.zul
statisticsTools.title1=Frecuencia de las herramientas de detección más mencionadas. statisticsTools.title1=Frequency of the most mentioned detection tools.
statisticsTools.title2=Distribución de los tipos de presencia de herramientas en los artículos del estudio. statisticsTools.title2=Distribution of the kinds of presence of tools across the papers in the study.
statisticsTools.title3=Distribución de la representación interna del software sobre las herramientas de detección. statisticsTools.title3=Distribution of internal software representation over the detection tools.
\ No newline at end of file
#StatisticsValidation.zul
statisticsValidation.title1=Distribution of validation evidence over the selected paper.
statisticsValidation.title2=Distribution of implementation languages over the number of projects.
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.
\ No newline at end of file
...@@ -127,7 +127,7 @@ smellsDetail.affects=Afecta ...@@ -127,7 +127,7 @@ smellsDetail.affects=Afecta
smellDetail.qfactor=Factor de calidad smellDetail.qfactor=Factor de calidad
smellsDetail.qmodel=Modelo de calidad smellsDetail.qmodel=Modelo de calidad
smellsDetail.kOfImpact=Tipo de impacto smellsDetail.kOfImpact=Tipo de impacto
smellsDetail.bProjects=se puede encontrar en proyectos smellsDetail.bProjects=can be found in projects
#EvidencesArticleDetail.zul #EvidencesArticleDetail.zul
evidencesDetail.title=Evidencias de validación evidencesDetail.title=Evidencias de validación
...@@ -169,13 +169,14 @@ projectDetail.loc=LOC ...@@ -169,13 +169,14 @@ projectDetail.loc=LOC
projectDetail.numberofclasses=Número de clases projectDetail.numberofclasses=Número de clases
projectDetail.yes= projectDetail.yes=
projectDetail.no=No projectDetail.no=No
projectDetail.frecuency=Frecuencia absoluta projectDetail.frecuency=Absolute frequency
#StatiticsDesignSmells.zul #StatiticsDesignSmells.zul
statistics.menu.publication=Publicación statistics.menu.publication=Publicación
statistics.menu.designSmell=Design smells 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
#Labels para gráficos #Labels para gráficos
graphic.absoFrecuency=Frecuencia absoluta graphic.absoFrecuency=Frecuencia absoluta
...@@ -192,6 +193,8 @@ graphic.typeApproach=Tipo de enfoque ...@@ -192,6 +193,8 @@ graphic.typeApproach=Tipo de enfoque
graphic.total=total graphic.total=total
graphic.toolFrequency=Frecuencia de la herramienta 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.measureFrequency=Frecuencia de la medida
#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..
...@@ -212,3 +215,14 @@ statisticsApproaches.title0=Distribución de los enfoques a lo largo de los año ...@@ -212,3 +215,14 @@ statisticsApproaches.title0=Distribución de los enfoques a lo largo de los año
statisticsApproaches.title1=Grado de automatización sobre los artículos seleccionados. statisticsApproaches.title1=Grado de automatización sobre los artículos seleccionados.
statisticsApproaches.title2=Distribución de la actividad relacionada con los Design smells en los artículos seleccionados. statisticsApproaches.title2=Distribución de la actividad relacionada con los Design smells en los artículos seleccionados.
statisticsApproaches.title3=Distribución de los artefactos de software sobre los artículos seleccionados. statisticsApproaches.title3=Distribución de los artefactos de software sobre los artículos seleccionados.
#StatisticsTools.zul
statisticsTools.title1=Frecuencia de las herramientas de detección más mencionadas.
statisticsTools.title2=Distribución de los tipos de presencia de herramientas en los artículos del estudio.
statisticsTools.title3=Distribución de la representación interna del software sobre las herramientas de detección.
#StatisticsValidation.zul
statisticsValidation.title1=Distribución de la evidencia de validación sobre los artículos seleccionados.
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.title4=Distribución de indicadores de rendimiento o mediciones de calidad utilizadas como evidencia sobre los artículos selecionados.
\ No newline at end of file
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
label="${labels.statistics.menu.aprroach}" /> label="${labels.statistics.menu.aprroach}" />
<menuitem id="tools_statistics" <menuitem id="tools_statistics"
label="${labels.statistics.menu.tool}" /> label="${labels.statistics.menu.tool}" />
<menuitem id="validation_statistics"
label="${labels.statistics.menu.validation}" />
</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.StatisticsValidationController">
<groupbox mold="3d" width="100%">
<caption label="${labels.statisticsValidation.title1}"/>
<hchart id="chart1"/>
</groupbox>
<groupbox mold="3d" width="100%">
<caption label="${labels.statisticsValidation.title2}"/>
<hchart id="chart2"/>
</groupbox>
<groupbox mold="3d" width="100%">
<caption label="${labels.statisticsValidation.title3}"/>
<hchart id="chart3"/>
</groupbox>
<groupbox mold="3d" width="100%">
<caption label="${labels.statisticsValidation.title4}"/>
<hchart id="chart4"/>
</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