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.dependency.*; 43 44 public class DependencyExtractAction extends AbstractAction implements Runnable { 45 private DependencyFinder model; 46 47 public DependencyExtractAction(DependencyFinder model) { 48 this.model = model; 49 50 putValue(Action.LONG_DESCRIPTION, "Extract dependencies from compiled classes"); 51 putValue(Action.NAME, "Extract"); 52 putValue(Action.SMALL_ICON, new ImageIcon(getClass().getResource("icons/extract.gif"))); 53 } 54 55 public void actionPerformed(ActionEvent e) { 56 JFileChooser chooser; 57 if (model.getInputFiles().isEmpty()) { 58 chooser = new JFileChooser(new File(".")); 59 } else { 60 chooser = new JFileChooser((File) model.getInputFiles().iterator().next()); 61 } 62 chooser.addChoosableFileFilter(new JavaBytecodeFileFilter()); 63 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 64 chooser.setMultiSelectionEnabled(true); 65 int returnValue = chooser.showDialog(model, "Extract"); 66 if (returnValue == JFileChooser.APPROVE_OPTION) { 67 model.addInputFiles(Arrays.asList(chooser.getSelectedFiles())); 68 new Thread (this).start(); 69 } 70 } 71 72 public void run() { 73 Date start = new Date(); 74 75 model.getStatusLine().showInfo("Scanning ..."); 76 ClassfileScanner scanner = new ClassfileScanner(); 77 scanner.load(model.getInputFiles()); 78 79 model.getProgressBar().setMaximum(scanner.getNbFiles()); 80 81 model.getMonitor().setClosedSession(false); 82 83 ClassfileLoader loader = new TransientClassfileLoader(model.getClassfileLoaderDispatcher()); 84 loader.addLoadListener(new VerboseListener(model.getStatusLine(), model.getProgressBar())); 85 loader.addLoadListener(model.getMonitor()); 86 loader.load(model.getInputFiles()); 87 88 if (model.getMaximize()) { 89 model.getStatusLine().showInfo("Maximizing ..."); 90 new LinkMaximizer().traverseNodes(model.getPackages()); 91 } else if (model.getMinimize()) { 92 model.getStatusLine().showInfo("Minimizing ..."); 93 new LinkMinimizer().traverseNodes(model.getPackages()); 94 } 95 96 Date stop = new Date(); 97 98 model.getStatusLine().showInfo("Done (" + ((stop.getTime() - start.getTime()) / (double) 1000) + " secs)."); 99 model.setTitle("Dependency Finder - Extractor"); 100 } 101 } 102 | Popular Tags |