1 32 33 package com.jeantessier.dependencyfinder.gui; 34 35 import java.awt.event.*; 36 import java.io.*; 37 import java.util.*; 38 39 import javax.swing.*; 40 41 import com.jeantessier.classreader.*; 42 import com.jeantessier.metrics.*; 43 44 public class MetricsExtractAction extends AbstractAction implements Runnable { 45 private OOMetrics model; 46 private File[] files; 47 48 private ClassfileLoader loader; 49 50 public MetricsExtractAction(OOMetrics model) { 51 this.model = model; 52 53 putValue(Action.LONG_DESCRIPTION, "Extract metrics from compiled classes"); 54 putValue(Action.NAME, "Extract"); 55 putValue(Action.SMALL_ICON, new ImageIcon(getClass().getResource("icons/extract.gif"))); 56 } 57 58 public void actionPerformed(ActionEvent e) { 59 JFileChooser chooser = new JFileChooser(model.getInputFile()); 60 chooser.addChoosableFileFilter(new JavaBytecodeFileFilter()); 61 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 62 chooser.setMultiSelectionEnabled(true); 63 int returnValue = chooser.showDialog(model, "Extract"); 64 if (returnValue == JFileChooser.APPROVE_OPTION) { 65 files = chooser.getSelectedFiles(); 66 model.setInputFile(files[0]); 67 new Thread (this).start(); 68 } 69 } 70 71 public void run() { 72 Date start = new Date(); 73 74 model.getStatusLine().showInfo("Scanning ..."); 75 ClassfileScanner scanner = new ClassfileScanner(); 76 scanner.load(Arrays.asList(files)); 77 78 model.getProgressBar().setMaximum(scanner.getNbFiles() + scanner.getNbClasses()); 79 80 MetricsVerboseListener verboseListener = new MetricsVerboseListener(model.getStatusLine(), model.getProgressBar()); 81 82 loader = new AggregatingClassfileLoader(); 83 loader.addLoadListener(verboseListener); 84 loader.load(Arrays.asList(files)); 85 86 com.jeantessier.metrics.MetricsGatherer gatherer = new com.jeantessier.metrics.MetricsGatherer("Project", model.getMetricsFactory()); 87 gatherer.addMetricsListener(verboseListener); 88 gatherer.visitClassfiles(loader.getAllClassfiles()); 89 90 93 model.getStatusLine().showInfo("Generating method results ..."); 94 model.getMethodsModel().setMetrics(model.getMetricsFactory().getMethodMetrics()); 95 96 model.getStatusLine().showInfo("Generating class results ..."); 97 model.getClassesModel().setMetrics(model.getMetricsFactory().getClassMetrics()); 98 99 model.getStatusLine().showInfo("Generating group results ..."); 100 model.getGroupsModel().setMetrics(model.getMetricsFactory().getGroupMetrics()); 101 102 model.getStatusLine().showInfo("Generating project results ..."); 103 StringWriter out = new StringWriter(); 104 com.jeantessier.metrics.Printer printer = new com.jeantessier.metrics.TextPrinter(new PrintWriter(out), model.getMetricsFactory().getConfiguration().getProjectMeasurements()); 105 printer.visitMetrics(model.getMetricsFactory().getProjectMetrics()); 106 model.getProjectArea().setText(out.toString()); 107 108 Date stop = new Date(); 109 110 model.getStatusLine().showInfo("Done (" + ((stop.getTime() - start.getTime()) / (double) 1000) + " secs)."); 111 model.setTitle("OO Metrics - Extractor"); 114 } 115 } 116 | Popular Tags |