package br.uff.ic.oceano.experiments.ostra; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ import br.uff.ic.oceano.contexto.ConstantesAplicacao; import br.uff.ic.oceano.core.control.ApplicationConstants; import br.uff.ic.oceano.core.dao.OceanoUserDao; import br.uff.ic.oceano.core.dao.controle.JPAUtil; import br.uff.ic.oceano.core.dao.impl.OceanoUserDaoImpl; import br.uff.ic.oceano.core.exception.ObjetoNaoEncontradoException; import br.uff.ic.oceano.core.exception.ServiceException; import br.uff.ic.oceano.core.factory.MetricManagerFactory; import br.uff.ic.oceano.core.factory.ObjectFactory; import br.uff.ic.oceano.core.model.Metric; import br.uff.ic.oceano.core.model.OceanoUser; import br.uff.ic.oceano.core.model.SoftwareProject; import br.uff.ic.oceano.core.model.ProjectUser; import br.uff.ic.oceano.core.service.SoftwareProjectService; import br.uff.ic.oceano.core.service.ProjectUserService; import br.uff.ic.oceano.core.tools.metrics.MetricManager; import br.uff.ic.oceano.util.DateUtil; import br.uff.ic.oceano.ostra.model.DataBaseSnapshot; import br.uff.ic.oceano.ostra.discretizer.DayOfWeekDiscretizer; import br.uff.ic.oceano.ostra.discretizer.Discretizer; import br.uff.ic.oceano.ostra.discretizer.DiscretizerFactory; import br.uff.ic.oceano.ostra.discretizer.NegativePositiveDiscretizer; import br.uff.ic.oceano.ostra.discretizer.NumberOfFilesDiscretizer; import br.uff.ic.oceano.ostra.service.DeltaMetricsRevisionDataBaseService; import br.uff.ic.oceano.ostra.service.OstraMetricService; import br.uff.ic.oceano.ostra.tools.datamining.util.DatabaseToArffService; import br.uff.ic.oceano.util.file.FileUtils; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; //import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory; /** * * @author Dancastellani */ public class TestDeltaMetricsDataBase { private SoftwareProjectService projectService; private DeltaMetricsRevisionDataBaseService dataBaseService; private List<SoftwareProject> projects = new ArrayList<SoftwareProject>(); private List<MetricManager> metricManagers = new ArrayList<MetricManager>(); private OceanoUser userDanielOceano; private OceanoUserDao oceanoUserDao; private OstraMetricService ostraMetricService; private boolean calculateStandardDeviation = false; private boolean extractOnlyQmoodMetrics = true; private void initializeProjectList() throws ServiceException { /*this.projects.add(projectService.getProjectToDetailById(1L));*/ //oceano - fora de execução // this.projects.add(projectService.getProjectToDetailById(2L)); //iduff this.projects.add(projectService.getProjectToDetailById(3L)); //publico-core this.projects.add(projectService.getProjectToDetailById(4L)); //commons-utils this.projects.add(projectService.getProjectToDetailById(5L)); //monitoria // this.projects.add(projectService.getProjectToDetailById(7L)); //academico-pos this.projects.add(projectService.getProjectToDetailById(8L)); //oceano-core this.projects.add(projectService.getProjectToDetailById(9L)); //oceano-web // this.projects.add(projectService.getProjectToDetailById(12L)); //iduff-svn-local this.projects.add(projectService.getProjectToDetailById(14L)); //iduff 2 - para o artigo seke // this.projects.add(projectService.getProjectToDetailById(15L)); //hudson-maven-plugin-branch // this.projects.add(projectService.getProjectToDetailById(17L)); //Eclipse IAM // this.projects.add(projectService.getProjectToDetailById(18L)); //Animal Sniffer } // @Test public void extracMetrics() throws Throwable { // measure projects for (SoftwareProject project : projects) { ostraMetricService.extractAndSaveMetricsFromAllFilesInProjectRevisions(project, userDanielOceano, metricManagers); } } @Test public void calculateRevisionMetricValues() throws Throwable { // measure projects for (SoftwareProject project : projects) { ostraMetricService.calculateRevisionMetricValuesFromVersionedItemMetricValues(project, getMetrics(metricManagers)); } } // @Test public void buildDeltaMetricsDatabase() throws Throwable { System.out.println("********************** testBuildDeltaMetricsDatabase - INICIO"); List<Discretizer> discretizers = new ArrayList<Discretizer>(); discretizers.add(DiscretizerFactory.getDiscretizer("rdate", DayOfWeekDiscretizer.class)); discretizers.add(DiscretizerFactory.getDiscretizer("#files", NumberOfFilesDiscretizer.class)); initializePositiveNegativeDiscretizersDiscretizers(discretizers); // initializeDoubleDecimalDiscretizers(discretizers); DataBaseSnapshot baseSnapshot = dataBaseService.buildDeltaMetricsDataBase(projects, discretizers, calculateStandardDeviation, true, getMetrics(MetricManagerFactory.getQmoodQualityAttributes()), true); showAttributes(baseSnapshot); showInstances(baseSnapshot); System.out.println("_________________________________________________"); String arffContent = DatabaseToArffService.dataBaseToARFF(baseSnapshot, discretizers); System.out.println("********************** testBuildDeltaMetricsDatabase - FIM"); saveArffFile(baseSnapshot, arffContent); } @BeforeClass public static void setUpClass() throws Exception { System.out.println("----------------------------------------"); if (ApplicationConstants.CLEAN_CHECKOUT_DIRECTORY) { File file = new File(ConstantesAplicacao.DIR_BASE_CHECKOUTS); FileUtils.deleteDirectory(file); System.out.println(">>>> Cleaning checkout directory... " + !file.exists()); } System.out.println("----------------------------------------"); System.out.println(""); } @AfterClass public static void tearDownClass() throws Exception { } @BeforeMethod public void setUp() throws ObjetoNaoEncontradoException, ServiceException { this.ostraMetricService = ObjectFactory.getObjectWithDataBaseDependencies(OstraMetricService.class); this.dataBaseService = ObjectFactory.getObjectWithDataBaseDependencies(DeltaMetricsRevisionDataBaseService.class); this.projectService = ObjectFactory.getObjectWithDataBaseDependencies(SoftwareProjectService.class); this.oceanoUserDao = ObjectFactory.getObjectWithDataBaseDependencies(OceanoUserDaoImpl.class); initializeProjectList(); initializeMetricsList(); this.userDanielOceano = oceanoUserDao.getByLogin("xan"); // // System.out.println("OceanoUser: " + userDanielOceano.getName()); // associateProjectsToOceanoUserWhenInMemoryDatabase(); MetricManagerFactory.getInstance(); } private void initializePositiveNegativeDiscretizersDiscretizers(List<Discretizer> discretizers) throws ServiceException { for (Metric metric : ostraMetricService.getAll()) { discretizers.add(DiscretizerFactory.getDiscretizer("dAvg-" + metric.getName(), NegativePositiveDiscretizer.class)); } } // private void initializeDoubleDecimalDiscretizers(List<Discretizer> discretizers) throws ServiceException { // for (Metric metric : ostraMetricService.getAll()) { // discretizers.add(DiscretizerFactory.getDiscretizer("dAvg-" + metric.getName(), DoubleDecimalCaseDiscretizer.class)); // } // } private void saveArffFile(DataBaseSnapshot baseSnapshot, String arffContent) throws IOException { final int projectsSize = projects.size(); final int attributesSize = baseSnapshot.getAttributes().size(); final String projectName = (projectsSize == 1 ? projects.get(0).getConfigurationItem().getName() + "_" : ""); final String fileName = "./Oceano_" + projectName + DateUtil.format(Calendar.getInstance()).replace("/", "-").replace(" ", "_").replace(":", "-") + "_p" + projectsSize + "_a" + attributesSize + ".arff"; System.out.println("fileName = " + fileName); BufferedWriter bw = new BufferedWriter(new FileWriter(new File(fileName))); bw.append(arffContent); bw.close(); } private void showInstances(DataBaseSnapshot baseSnapshot) { System.out.println(""); System.out.println("Instancias"); System.out.println("_________________________________________________"); for (String instance : baseSnapshot.getInstances()) { System.out.println(instance); } } private void showAttributes(DataBaseSnapshot baseSnapshot) { System.out.println(""); System.out.println(""); System.out.println("Attributes"); System.out.println("_________________________________________________"); for (String attribute : baseSnapshot.getAttributes()) { System.out.println("attribute: " + attribute); } } private void associateProjectsToOceanoUserWhenInMemoryDatabase() throws ServiceException { if (!JPAUtil.isRunningOnMemoryDB()) { return; } for (SoftwareProject project : projects) { //inserindo um novo usuario de projeto ProjectUser pu = new ProjectUser(); pu.setOceanoUser(userDanielOceano); pu.setLogin("login"); pu.setPassword("pass"); pu.setProject(project); ((ProjectUserService) ObjectFactory.getObjectWithDataBaseDependencies(ProjectUserService.class)).save(pu); } } private void initializeMetricsList() { if (extractOnlyQmoodMetrics) { metricManagers = MetricManagerFactory.getQmoodMetrics(); } else { metricManagers.add((MetricManager) MetricManagerFactory.getInstance().getTools()); } } private List<Metric> getMetrics(List<MetricManager> metricManagers) { List<Metric> metrics = new ArrayList(metricManagers.size()); for (MetricManager metricManager : metricManagers) { metrics.add(metricManager.getMetric()); } return metrics; } }