/* * 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 com.jeantessier.classreader.ClassfileLoader; import com.jeantessier.classreader.LoadListenerVisitorAdapter; import com.jeantessier.classreader.TransientClassfileLoader; import com.jeantessier.metrics.Measurement; import com.jeantessier.metrics.Metrics; import com.jeantessier.metrics.MetricsConfiguration; import com.jeantessier.metrics.MetricsConfigurationLoader; import com.jeantessier.metrics.MetricsFactory; import java.io.InputStream; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; /** * * @author wallace */ public class ClassInterfaceSizeExtractorJava extends AbstractMetricExtractor { public ClassInterfaceSizeExtractorJava() { } public MetricValue extractMetric(Revision revision) throws MetricException { return extractMetricWithMetricService(revision); } @Override public MetricValue extractMetric(Revision revision, String path) throws MetricException { try { final InputStream configStream = this.getClass().getResourceAsStream("MetricsConfig.xml"); MetricsConfigurationLoader configLoader = new MetricsConfigurationLoader(false); MetricsConfiguration configuration = configLoader.load(configStream); MetricsFactory factory = new MetricsFactory("Project", configuration); com.jeantessier.metrics.MetricsGatherer gatherer = new com.jeantessier.metrics.MetricsGatherer(factory); ClassfileLoader loader = new TransientClassfileLoader(); loader.addLoadListener(new LoadListenerVisitorAdapter(gatherer)); //Collection<String> filenames = FileUtils.getAllFilesInFolderAndSubFolders(new File(path), ".class"); Collection<String> filenames = new LinkedList<String>(); filenames.add(path); loader.load(filenames); Collection<Metrics> col = factory.getClassMetrics(); Iterator<Metrics> it = col.iterator(); int result = 0; final String pum = "PuM"; while (it.hasNext()) { Metrics m = it.next(); Measurement medida = m.getMeasurement(pum); result += medida.getValue().intValue(); } return createMetricValue(revision, result); } catch (Exception e) { throw new MetricException(e); } } }