1 |
| |
2 |
| |
3 |
| |
4 |
| |
5 |
| |
6 |
| |
7 |
| |
8 |
| |
9 |
| |
10 |
| |
11 |
| |
12 |
| |
13 |
| |
14 |
| |
15 |
| |
16 |
| |
17 |
| |
18 |
| |
19 |
| |
20 |
| |
21 |
| |
22 |
| |
23 |
| |
24 |
| |
25 |
| |
26 |
| |
27 |
| |
28 |
| |
29 |
| |
30 |
| |
31 |
| |
32 |
| |
33 |
| package com.jeantessier.dependencyfinder.gui; |
34 |
| |
35 |
| import java.awt.event.*; |
36 |
| import java.io.*; |
37 |
| import java.util.*; |
38 |
| import javax.swing.*; |
39 |
| |
40 |
| import com.jeantessier.classreader.*; |
41 |
| |
42 |
| public class MetricsExtractAction extends AbstractAction implements Runnable { |
43 |
| private OOMetrics model; |
44 |
| private Collection<String> filenames; |
45 |
| |
46 |
0
| public MetricsExtractAction(OOMetrics model) {
|
47 |
0
| this.model = model;
|
48 |
| |
49 |
0
| putValue(Action.LONG_DESCRIPTION, "Extract metrics from compiled classes");
|
50 |
0
| putValue(Action.NAME, "Extract");
|
51 |
0
| putValue(Action.SMALL_ICON, new ImageIcon(getClass().getResource("icons/extract.gif")));
|
52 |
| } |
53 |
| |
54 |
0
| public void actionPerformed(ActionEvent e) {
|
55 |
0
| JFileChooser chooser = new JFileChooser(model.getInputFile());
|
56 |
0
| chooser.addChoosableFileFilter(new JavaBytecodeFileFilter());
|
57 |
0
| chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
|
58 |
0
| chooser.setMultiSelectionEnabled(true);
|
59 |
0
| int returnValue = chooser.showDialog(model, "Extract");
|
60 |
0
| if (returnValue == JFileChooser.APPROVE_OPTION) {
|
61 |
0
| File[] selectedFiles = chooser.getSelectedFiles();
|
62 |
0
| filenames = new LinkedList<String>();
|
63 |
0
| for (File file : selectedFiles) {
|
64 |
0
| filenames.add(file.toString());
|
65 |
| } |
66 |
0
| model.setInputFile(selectedFiles[0]);
|
67 |
0
| new Thread(this).start();
|
68 |
| } |
69 |
| } |
70 |
| |
71 |
0
| public void run() {
|
72 |
0
| Date start = new Date();
|
73 |
| |
74 |
0
| model.getStatusLine().showInfo("Scanning ...");
|
75 |
0
| ClassfileScanner scanner = new ClassfileScanner();
|
76 |
0
| scanner.load(filenames);
|
77 |
| |
78 |
0
| model.getProgressBar().setMaximum(scanner.getNbFiles() + scanner.getNbClasses());
|
79 |
| |
80 |
0
| MetricsVerboseListener verboseListener = new MetricsVerboseListener(model.getStatusLine(), model.getProgressBar());
|
81 |
| |
82 |
0
| com.jeantessier.metrics.MetricsGatherer gatherer = new com.jeantessier.metrics.MetricsGatherer(model.getMetricsFactory());
|
83 |
0
| gatherer.addMetricsListener(verboseListener);
|
84 |
| |
85 |
0
| if (model.isEnableCrossClassMeasurements()) {
|
86 |
0
| ClassfileLoader loader = new AggregatingClassfileLoader();
|
87 |
0
| loader.addLoadListener(verboseListener);
|
88 |
0
| loader.load(filenames);
|
89 |
| |
90 |
0
| gatherer.visitClassfiles(loader.getAllClassfiles());
|
91 |
| } else { |
92 |
0
| ClassfileLoader loader = new TransientClassfileLoader();
|
93 |
0
| loader.addLoadListener(verboseListener);
|
94 |
0
| loader.addLoadListener(new LoadListenerVisitorAdapter(gatherer));
|
95 |
| |
96 |
0
| loader.load(filenames);
|
97 |
| } |
98 |
| |
99 |
0
| model.getProgressBar().setIndeterminate(true);
|
100 |
| |
101 |
0
| model.getStatusLine().showInfo("Generating method results ...");
|
102 |
0
| model.getMethodsModel().setMetrics(model.getMetricsFactory().getMethodMetrics());
|
103 |
| |
104 |
0
| model.getStatusLine().showInfo("Generating class results ...");
|
105 |
0
| model.getClassesModel().setMetrics(model.getMetricsFactory().getClassMetrics());
|
106 |
| |
107 |
0
| model.getStatusLine().showInfo("Generating group results ...");
|
108 |
0
| model.getGroupsModel().setMetrics(model.getMetricsFactory().getGroupMetrics());
|
109 |
| |
110 |
0
| model.getStatusLine().showInfo("Generating project results ...");
|
111 |
0
| StringWriter out = new StringWriter();
|
112 |
0
| com.jeantessier.metrics.Printer printer = new com.jeantessier.metrics.TextPrinter(new PrintWriter(out), model.getMetricsFactory().getConfiguration().getProjectMeasurements());
|
113 |
0
| printer.visitMetrics(model.getMetricsFactory().getProjectMetrics());
|
114 |
0
| model.getProjectArea().setText(out.toString());
|
115 |
| |
116 |
0
| Date stop = new Date();
|
117 |
| |
118 |
0
| model.getStatusLine().showInfo("Done (" + ((stop.getTime() - start.getTime()) / (double) 1000) + " secs).");
|
119 |
0
| model.getProgressBar().setIndeterminate(false);
|
120 |
0
| model.setTitle("OO Metrics - Extractor");
|
121 |
| } |
122 |
| } |