/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package br.uff.ic.oceano.core.tools.metrics.extractors.java; import br.uff.ic.oceano.core.tools.metrics.MetricException; import br.uff.ic.oceano.core.model.MetricValue; import br.uff.ic.oceano.core.model.Revision; import br.uff.ic.oceano.core.tools.metrics.extractors.AbstractMetricExtractor; import br.uff.ic.oceano.util.file.FileUtils; import com.jeantessier.classreader.ClassfileLoader; import com.jeantessier.classreader.ClassfileScanner; import com.jeantessier.classreader.LoadListenerVisitorAdapter; import com.jeantessier.classreader.TransientClassfileLoader; import com.jeantessier.commandline.CommandLine; import com.jeantessier.commandline.CommandLineUsage; import com.jeantessier.commandline.NullParameterStrategy; import com.jeantessier.metrics.Measurement; import com.jeantessier.metrics.Metrics; import com.jeantessier.metrics.MetricsConfigurationLoader; import com.jeantessier.metrics.MetricsFactory; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Collection; import java.util.Iterator; /** * refactored by dheraclio * * @author wallace */ public class NumberOfStaticMethodsExtractorJava extends AbstractMetricExtractor { public NumberOfStaticMethodsExtractorJava() { } public MetricValue extractMetric(Revision revision) throws MetricException { return extractMetricWithMetricService(revision); } public MetricValue extractMetric(Revision revision, String path) throws MetricException { Iterator i; Metrics m; Measurement medida; Number number; int num = 0; Collection col; CommandLine commandLine = new CommandLine(new NullParameterStrategy()); commandLine.addSingleValueSwitch("default-configuration", true); commandLine.addSingleValueSwitch("configuration"); commandLine.addToggleSwitch("validate"); commandLine.addToggleSwitch("enable-cross-class-measurements"); commandLine.addToggleSwitch("help"); File arquivo = new File("MetricsConfig.xml"); String caminho = arquivo.getAbsolutePath(); try { FileOutputStream saida = new FileOutputStream(arquivo); Class cl = commandLine.getClass(); InputStream fin = cl.getResourceAsStream("MetricsConfig.xml"); int n = 0; n = fin.read(); while (n != -1) { saida.write(n); n = fin.read(); } fin.close(); saida.close(); } catch (Exception e) { throw new MetricException(e); } String[] arg = {"-default-configuration", caminho}; CommandLineUsage usage = new CommandLineUsage("OOMetrics"); commandLine.accept(usage); try { commandLine.parse(arg); } catch (IllegalArgumentException ex) { // System.exit(1); throw new MetricException(ex); } // if (commandLine.getToggleSwitch("help")) { // System.exit(1); // } MetricsFactory factory; try { if (commandLine.isPresent("configuration")) { factory = new com.jeantessier.metrics.MetricsFactory("Project", new MetricsConfigurationLoader(commandLine.getToggleSwitch("validate")).load(commandLine.getSingleSwitch("configuration"))); } else { factory = new com.jeantessier.metrics.MetricsFactory("Project", new MetricsConfigurationLoader(commandLine.getToggleSwitch("validate")).load(commandLine.getSingleSwitch("default-configuration"))); } File ark = new File(path); Collection filenames = FileUtils.getAllFilesInFolderAndSubFolders(ark, ".class"); ClassfileScanner scanner = new ClassfileScanner(); scanner.load(filenames); com.jeantessier.metrics.MetricsGatherer gatherer = new com.jeantessier.metrics.MetricsGatherer(factory); ClassfileLoader loader = new TransientClassfileLoader(); loader.addLoadListener(new LoadListenerVisitorAdapter(gatherer)); loader.load(filenames); col = factory.getClassMetrics(); i = col.iterator(); while (i.hasNext()) { m = (Metrics) i.next(); medida = m.getMeasurement("SM"); number = medida.getValue(); num = num + number.intValue(); } } catch (Exception e) { throw new MetricException(e); } arquivo.delete(); return createMetricValue(revision, num); } }