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