package metrics; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FilenameFilter; import java.io.IOException; import util.Log; public class GatherMetrics { /** * Diret�rio raiz (onde se inicia a varredura). * */ private String rootDir; /** * Processador de m�tricas. */ private MetricsProcessor metricsProcessor; /** * Contador de pacotes Java */ private static Integer PACKAGE_COUNTER; /** * Informa se o diret�rio possui arquivos Java v�lidos, para ser usado na contabiliza��o de pacotes. */ private static Boolean HasValidJavaFile; /** * Informa se � para processar apenas m�tricas b�sicas: LOC, AND, OR, SD. */ private static Boolean OnlyBasicMetrics; /** * Filtro de diret�rios. * */ FilenameFilter dirFilter = new FilenameFilter() { public boolean accept(File dir, String name) { name = name.toLowerCase(); return (!name.startsWith(".") && !name.startsWith("build") && !name.endsWith(".properties") && !name.endsWith(".xml") && !name.endsWith(".launch") && !name.endsWith(".log") && !name.endsWith(".txt") && !name.endsWith(".ico") && !name.endsWith(".bat") && !name.endsWith(".sh") && !name.endsWith(".mf") && !name.endsWith(".ini") && !name.endsWith(".class") && !name.endsWith(".java") && !name.endsWith(".html") && !name.endsWith(".gif") && !name.equals("meta-inf") && !name.equals("lib") && !name.equals("bin") && !name.equals("templates") && !name.equals("staging") && !name.equals("tests") && !name.equals("argouml-build") && !name.equals("argouml-core-tools") && !name.equals("argouml-core-infra") && !name.startsWith("argouml-core-model") ); } }; /** * Filtro para listar apenas os arquivos .java * */ FilenameFilter javaFileFilter = new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".java"); } }; /** * Construtor padr�o * @param rootDir Diret�rio raiz (onde se inicia a varredura). */ public GatherMetrics(String rootDir) { this.rootDir = rootDir.replace("\\", File.separator); metricsProcessor = new MetricsProcessor(); PACKAGE_COUNTER = 0; HasValidJavaFile = false; OnlyBasicMetrics = false; } /** * Construtor padr�o * @param rootDir Diret�rio raiz (onde se inicia a varredura) * @param onlyBasicMetrics Informa se � para processar apenas m�tricas b�sicas. */ public GatherMetrics(String rootDir, Boolean onlyBasicMetrics) { this(rootDir); OnlyBasicMetrics = onlyBasicMetrics; } /** * Colhe as m�tricas e as salva em arquivo. * @param filename Nome do arquivo que conter� as m�tricas */ public void gatherMetrics(String filename) { this.listDir(new File(rootDir)); metricsProcessor.insertMetric(MetricType.PACKAGE_NUMBER, PACKAGE_COUNTER); metricsProcessor.processGatheredMetrics(OnlyBasicMetrics); metricsProcessor.saveGatheredMetrics(filename); } /** * Lista os diret�rios e subdiret�rios. * @param dir */ private void listDir(File dir) { if (dir.isDirectory()) { listDirFiles(dir); String[] children = dir.list(dirFilter); for (int i=0; i<children.length; i++) { listDir(new File(dir, children[i])); } } } /** * Lista os arquivos .java de um diret�rio. * @param dir Diret�rio a ser lido. */ private void listDirFiles(File dir) { Log.debug(dir.toString()); String[] children = dir.list(javaFileFilter); int i; for (i=0; i<children.length; i++) { Log.debug(children[i]); processFile(new File(dir, children[i])); } // Se foi processado algum arquivo do diret�rio, considerar o pacote if (HasValidJavaFile && (i > 0)) { PACKAGE_COUNTER++; } HasValidJavaFile = false; } /** * Efetua a leitura dos arquivos .java * @param file Arguivo Java a ser lido. */ private void processFile(File file) { try { BufferedReader br = new BufferedReader(new FileReader(file)); Boolean hasData = false; while (br.ready()) { String line = br.readLine().trim(); if (!line.isEmpty()) { metricsProcessor.insertMetric(line); HasValidJavaFile = true; } } br.close(); } catch (FileNotFoundException e) { Log.error(e.getMessage()); e.printStackTrace(); } catch (IOException e) { Log.error(e.getMessage()); e.printStackTrace(); } } }