KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jeantessier > dependencyfinder > gui > MetricsExtractAction


1 /*
2  * Copyright (c) 2001-2005, Jean Tessier
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Jean Tessier nor the names of his contributors
17  * may be used to endorse or promote products derived from this software
18  * without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */

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 JavaDoc {
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 JavaDoc(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         // JDK 1.4 feature
91
// model.ProgressBar().setIndeterminate(true);
92

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         // JDK 1.4 feature
112
// model.ProgressBar().setIndeterminate(false);
113
model.setTitle("OO Metrics - Extractor");
114     }
115 }
116
Popular Tags