public class StatVisualizer extends AbstractVisualizer implements Clearable, ActionListener { private static final Logger log = LoggingManager.getLoggerForClass(); private final String[] COLUMNS = { JMeterUtils.getResString("sampler_label"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_count"), //$NON-NLS-1$ JMeterUtils.getResString("average"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_median"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_90%_line"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_min"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_max"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_error%"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_rate"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_bandwidth") }; //$NON-NLS-1$ private final String TOTAL_ROW_LABEL = JMeterUtils.getResString("aggregate_report_total_label"); //$NON-NLS-1$ protected JTable myJTable; protected JScrollPane myScrollPane; protected JButton saveTable = new JButton(JMeterUtils.getResString("aggregate_graph_save_table")); //$NON-NLS-1$ private JCheckBox useGroupName = new JCheckBox(JMeterUtils.getResString("aggregate_graph_use_group_name")); //$NON-NLS-1$ private transient ObjectTableModel model; Map tableRows = Collections.synchronizedMap(new HashMap()); public StatVisualizer() { super(); model = new ObjectTableModel(COLUMNS, SamplingStatCalculator.class, new Functor[] { new Functor("getLabel"), //$NON-NLS-1$ new Functor("getCount"), //$NON-NLS-1$ new Functor("getMeanAsNumber"), //$NON-NLS-1$ new Functor("getMedian"), //$NON-NLS-1$ new Functor("getPercentPoint", //$NON-NLS-1$ new Object[] { new Float(.900) }), new Functor("getMin"), //$NON-NLS-1$ new Functor("getMax"), //$NON-NLS-1$ new Functor("getErrorPercentage"), //$NON-NLS-1$ new Functor("getRate"), //$NON-NLS-1$ new Functor("getKBPerSecond") //$NON-NLS-1$ }, new Functor[] { null, null, null, null, null, null, null, null, null, null }, new Class[] { String.class, Long.class, Long.class, Long.class, Long.class, Long.class, Long.class, String.class, String.class, String.class }); clearData(); init(); } // Column renderers private static final TableCellRenderer[] RENDERERS = new TableCellRenderer[]{ null, // Label null, // count null, // Mean null, // median null, // 90% null, // Min null, // Max new NumberRenderer("#0.00%"), // Error %age //$NON-NLS-1$ new RateRenderer("#.0"), // Throughput //$NON-NLS-1$ new NumberRenderer("#.0"), // pageSize //$NON-NLS-1$ }; public static boolean testFunctors(){ StatVisualizer instance = new StatVisualizer(); return instance.model.checkFunctors(null,instance.getClass()); } public String getLabelResource() { return "aggregate_report"; //$NON-NLS-1$ } public void add(SampleResult res) { SamplingStatCalculator row = null; final String sampleLabel = res.getSampleLabel(useGroupName.isSelected()); synchronized (tableRows) { row = (SamplingStatCalculator) tableRows.get(sampleLabel); if (row == null) { row = new SamplingStatCalculator(sampleLabel); tableRows.put(row.getLabel(), row); model.insertRow(row, model.getRowCount() - 1); } } /* * Synch is needed because multiple threads can update the counts. */ synchronized(row) { row.addSample(res); } SamplingStatCalculator tot = (SamplingStatCalculator) tableRows.get(TOTAL_ROW_LABEL); synchronized(tot) { tot.addSample(res); } model.fireTableDataChanged(); } /** * Clears this visualizer and its model, and forces a repaint of the table. */ public void clearData() { synchronized (tableRows) { model.clearData(); tableRows.clear(); tableRows.put(TOTAL_ROW_LABEL, new SamplingStatCalculator(TOTAL_ROW_LABEL)); model.addRow(tableRows.get(TOTAL_ROW_LABEL)); } } /** * Main visualizer setup. */ private void init() { this.setLayout(new BorderLayout()); // MAIN PANEL JPanel mainPanel = new JPanel(); Border margin = new EmptyBorder(10, 10, 5, 10); mainPanel.setBorder(margin); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); mainPanel.add(makeTitlePanel()); // SortFilterModel mySortedModel = // new SortFilterModel(myStatTableModel); myJTable = new JTable(model); myJTable.setPreferredScrollableViewportSize(new Dimension(500, 70)); RendererUtils.applyRenderers(myJTable, RENDERERS); myScrollPane = new JScrollPane(myJTable); this.add(mainPanel, BorderLayout.NORTH); this.add(myScrollPane, BorderLayout.CENTER); saveTable.addActionListener(this); JPanel opts = new JPanel(); opts.add(useGroupName, BorderLayout.WEST); opts.add(saveTable, BorderLayout.CENTER); this.add(opts,BorderLayout.SOUTH); } public void actionPerformed(ActionEvent ev) { if (ev.getSource() == saveTable) { JFileChooser chooser = FileDialoger.promptToSaveFile("aggregate.csv");//$NON-NLS-1$ if (chooser == null) { return; } FileWriter writer = null; try { writer = new FileWriter(chooser.getSelectedFile()); CSVSaveService.saveCSVStats(model,writer); } catch (FileNotFoundException e) { log.warn(e.getMessage()); } catch (IOException e) { log.warn(e.getMessage()); } finally { JOrphanUtils.closeQuietly(writer);
public class SummaryReport extends AbstractVisualizer implements Clearable, ActionListener { private static final Logger log = LoggingManager.getLoggerForClass(); private final String[] COLUMNS = { JMeterUtils.getResString("sampler_label"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_count"), //$NON-NLS-1$ JMeterUtils.getResString("average"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_min"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_max"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_stddev"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_error%"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_rate"), //$NON-NLS-1$ JMeterUtils.getResString("aggregate_report_bandwidth"), //$NON-NLS-1$ JMeterUtils.getResString("average_bytes"), //$NON-NLS-1$ }; private final String TOTAL_ROW_LABEL = JMeterUtils.getResString("aggregate_report_total_label"); //$NON-NLS-1$ protected JTable myJTable; protected JScrollPane myScrollPane; protected JButton saveTable = new JButton(JMeterUtils.getResString("aggregate_graph_save_table")); //$NON-NLS-1$ private JCheckBox useGroupName = new JCheckBox(JMeterUtils.getResString("aggregate_graph_use_group_name")); //$NON-NLS-1$ private transient ObjectTableModel model; Map tableRows = Collections.synchronizedMap(new HashMap()); // Column renderers private static final TableCellRenderer[] RENDERERS = new TableCellRenderer[]{ null, // Label null, // count null, // Mean null, // Min null, // Max new NumberRenderer("#0.00"), // Std Dev. new NumberRenderer("#0.00%"), // Error %age new RateRenderer("#.0"), // Throughpur new NumberRenderer("#0.00"), // kB/sec new NumberRenderer("#.0"), // avg. pageSize }; public SummaryReport() { super(); model = new ObjectTableModel(COLUMNS, Calculator.class,// All rows have this class new Functor[] { new Functor("getLabel"), //$NON-NLS-1$ new Functor("getCount"), //$NON-NLS-1$ new Functor("getMeanAsNumber"), //$NON-NLS-1$ new Functor("getMin"), //$NON-NLS-1$ new Functor("getMax"), //$NON-NLS-1$ new Functor("getStandardDeviation"), //$NON-NLS-1$ new Functor("getErrorPercentage"), //$NON-NLS-1$ new Functor("getRate"), //$NON-NLS-1$ new Functor("getKBPerSecond"), //$NON-NLS-1$ new Functor("getAvgPageBytes"), //$NON-NLS-1$ }, new Functor[] { null, null, null, null, null, null, null, null , null, null }, new Class[] { String.class, Long.class, Long.class, Long.class, Long.class, String.class, String.class, String.class, String.class, String.class }); clearData(); init(); } public static boolean testFunctors(){ SummaryReport instance = new SummaryReport(); return instance.model.checkFunctors(null,instance.getClass()); } public String getLabelResource() { return "summary_report"; //$NON-NLS-1$ } public void add(SampleResult res) { Calculator row = null; final String sampleLabel = res.getSampleLabel(useGroupName.isSelected()); synchronized (tableRows) { row = (Calculator) tableRows.get(sampleLabel); if (row == null) { row = new Calculator(sampleLabel); tableRows.put(row.getLabel(), row); model.insertRow(row, model.getRowCount() - 1); } } /* * Synch is needed because multiple threads can update the counts. */ synchronized(row) { row.addSample(res); } Calculator tot = ((Calculator) tableRows.get(TOTAL_ROW_LABEL)); synchronized(tot) { tot.addSample(res); } model.fireTableDataChanged(); } /** * Clears this visualizer and its model, and forces a repaint of the table. */ public void clearData() { synchronized (tableRows) { model.clearData(); tableRows.clear(); tableRows.put(TOTAL_ROW_LABEL, new Calculator(TOTAL_ROW_LABEL)); model.addRow(tableRows.get(TOTAL_ROW_LABEL)); } } /** * Main visualizer setup. */ private void init() { this.setLayout(new BorderLayout()); // MAIN PANEL JPanel mainPanel = new JPanel(); Border margin = new EmptyBorder(10, 10, 5, 10); mainPanel.setBorder(margin); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); mainPanel.add(makeTitlePanel()); myJTable = new JTable(model); myJTable.setPreferredScrollableViewportSize(new Dimension(500, 70)); RendererUtils.applyRenderers(myJTable, RENDERERS); myScrollPane = new JScrollPane(myJTable); this.add(mainPanel, BorderLayout.NORTH); this.add(myScrollPane, BorderLayout.CENTER); saveTable.addActionListener(this); JPanel opts = new JPanel(); opts.add(useGroupName, BorderLayout.WEST); opts.add(saveTable, BorderLayout.CENTER); this.add(opts,BorderLayout.SOUTH); } public void actionPerformed(ActionEvent ev) { if (ev.getSource() == saveTable) { JFileChooser chooser = FileDialoger.promptToSaveFile("summary.csv");//$NON-NLS-1$ if (chooser == null) { return; } FileWriter writer = null; try { writer = new FileWriter(chooser.getSelectedFile()); CSVSaveService.saveCSVStats(model,writer); } catch (FileNotFoundException e) { log.warn(e.getMessage()); } catch (IOException e) { log.warn(e.getMessage()); } finally { JOrphanUtils.closeQuietly(writer);
Clone fragments detected by clone detection tool
File path: /jakarta-jmeter-2.3.2/src/org/apache/jmeter/visualizers/StatVisualizer.java File path: /jakarta-jmeter-2.3.2/src/org/apache/jmeter/visualizers/SummaryReport.java
Method name: Method name:
Number of AST nodes: 0 Number of AST nodes: 0
1
public class StatVisualizer extends AbstractVisualizer implements Clearable, ActionListener {
1
public class SummaryReport extends AbstractVisualizer implements Clearable, ActionListener {
2
    
2
	
3
	private static final Logger log = LoggingManager.getLoggerForClass();
3
	private static final Logger log = LoggingManager.getLoggerForClass();
4
    private final String[] COLUMNS = { 
4
	private final String[] COLUMNS = { 
5
            JMeterUtils.getResString("sampler_label"),  //$NON-NLS-1$
5
            JMeterUtils.getResString("sampler_label"),               //$NON-NLS-1$
6
			JMeterUtils.getResString("aggregate_report_count"),  //$NON-NLS-1$
6
			JMeterUtils.getResString("aggregate_report_count"),      //$NON-NLS-1$
7
            JMeterUtils.getResString("average"),  //$NON-NLS-1$
7
            JMeterUtils.getResString("average"),                     //$NON-NLS-1$
8
			JMeterUtils.getResString("aggregate_report_median"),  //$NON-NLS-1$
8
			JMeterUtils.getResString("aggregate_report_min"),        //$NON-NLS-1$
9
            JMeterUtils.getResString("aggregate_report_90%_line"),  //$NON-NLS-1$
9
            JMeterUtils.getResString("aggregate_report_max"),        //$NON-NLS-1$
10
			JMeterUtils.getResString("aggregate_report_min"),  //$NON-NLS-1$
10
            JMeterUtils.getResString("aggregate_report_stddev"),     //$NON-NLS-1$
11
            JMeterUtils.getResString("aggregate_report_max"),  //$NON-NLS-1$
11
			JMeterUtils.getResString("aggregate_report_error%"),     //$NON-NLS-1$
12
			JMeterUtils.getResString("aggregate_report_error%"),  //$NON-NLS-1$
12
            JMeterUtils.getResString("aggregate_report_rate"),       //$NON-NLS-1$
13
            JMeterUtils.getResString("aggregate_report_rate"),  //$NON-NLS-1$
13
			JMeterUtils.getResString("aggregate_report_bandwidth"),  //$NON-NLS-1$
14
			JMeterUtils.getResString("aggregate_report_bandwidth") };  //$NON-NLS-1$
14
            JMeterUtils.getResString("average_bytes"),               //$NON-NLS-1$
15
            };
15
	private final String TOTAL_ROW_LABEL 
16
	private final String TOTAL_ROW_LABEL 
16
        = JMeterUtils.getResString("aggregate_report_total_label");  //$NON-NLS-1$
17
        = JMeterUtils.getResString("aggregate_report_total_label");  //$NON-NLS-1$
17
	protected JTable myJTable;
18
	protected JTable myJTable;
18
	protected JScrollPane myScrollPane;
19
	protected JScrollPane myScrollPane;
19
    protected JButton saveTable = 
20
    protected JButton saveTable = 
20
        new JButton(JMeterUtils.getResString("aggregate_graph_save_table"));			//$NON-NLS-1$
21
        new JButton(JMeterUtils.getResString("aggregate_graph_save_table"));            //$NON-NLS-1$
21
    
22
    
22
    private JCheckBox useGroupName = 
23
    private JCheckBox useGroupName = 
23
        new JCheckBox(JMeterUtils.getResString("aggregate_graph_use_group_name"));            //$NON-NLS-1$
24
        new JCheckBox(JMeterUtils.getResString("aggregate_graph_use_group_name"));            //$NON-NLS-1$
24
    
25
    
25
	private transient ObjectTableModel model;
26
	private transient ObjectTableModel model;
26
	Map tableRows = Collections.synchronizedMap(new HashMap());
27
	Map tableRows = Collections.synchronizedMap(new HashMap());
27
	public StatVisualizer
28
	// Column renderers
29
	private static final TableCellRenderer[] RENDERERS = 
30
		new TableCellRenderer[]{
31
		    null, // Label
32
		    null, // count
33
		    null, // Mean
34
		    null, // Min
35
		    null, // Max
36
		    new NumberRenderer("#0.00"), // Std Dev.
37
		    new NumberRenderer("#0.00%"), // Error %age
38
		    new RateRenderer("#.0"),      // Throughpur
39
		    new NumberRenderer("#0.00"),  // kB/sec
40
		    new NumberRenderer("#.0"),    // avg. pageSize
41
		};
28
() {
42
    public SummaryReport() {
29
		super();
43
		super();
30
		model = new ObjectTableModel(COLUMNS, 
44
		model = new ObjectTableModel(COLUMNS,
31
				SamplingStatCalculator.class,
45
				Calculator.class,// All rows have this class
32
                new Functor[] { 
46
                new Functor[] { 
33
                    new Functor("getLabel"),   //$NON-NLS-1$
47
                    new Functor("getLabel"),              //$NON-NLS-1$
34
                    new Functor("getCount"),  //$NON-NLS-1$
48
                    new Functor("getCount"),              //$NON-NLS-1$
35
    				new Functor("getMeanAsNumber"),   //$NON-NLS-1$
49
    				new Functor("getMeanAsNumber"),       //$NON-NLS-1$
36
                    new Functor("getMedian"),  //$NON-NLS-1$
50
                    new Functor("getMin"),  
37
    				new Functor("getPercentPoint",  //$NON-NLS-1$
38
                            new Object[] { new Float(.900) }), 
39
                    new Functor("getMin"),
51
              //$NON-NLS-1$
40
  //$NON-NLS-1$
52
                    new Functor("getMax"),                //$NON-NLS-1$
41
                    new Functor("getMax"),   //$NON-NLS-1$
53
                    new Functor("getStandardDeviation"),  //$NON-NLS-1$
42
                    new Functor("getErrorPercentage"),   //$NON-NLS-1$
54
                    new Functor("getErrorPercentage"),    //$NON-NLS-1$
43
                    new Functor("getRate"),  //$NON-NLS-1$
55
                    new Functor("getRate"),               //$NON-NLS-1$
44
    				new Functor("getKBPerSecond")
56
    				new Functor("getKBPerSecond"),        //$NON-NLS-1$
45
   //$NON-NLS-1$
57
                    new Functor("getAvgPageBytes"),       //$NON-NLS-1$
46
                },
58
                },
47
                new Functor[] { null, null, null, null, null, null, null, null, null, null }, 
59
                new Functor[] { null, null, null, null, null, null, null, null , null, null }, 
48
                new Class[] { String.class, Long.class, Long.class, Long.class, Long.class, 
60
                new Class[] { String.class, Long.class, Long.class, Long.class, Long.class, 
49
                              Long.class, Long.class, String.class, String.class, String.class });
61
                              String.class, String.class, String.class, String.class, String.class });
50
		clearData();
62
		clearData();
51
		init();
63
		init();
52
	}
64
	}
53
	// Column renderers
54
	private static final TableCellRenderer[] RENDERERS = 
55
		new TableCellRenderer[]{
56
		    null, // Label
57
		    null, // count
58
		    null, // Mean
59
		    null, // median
60
		    null, // 90%
61
		    null, // Min
62
		    null, // Max
63
		    new NumberRenderer("#0.00%"), // Error %age //$NON-NLS-1$
64
		    new RateRenderer("#.0"),      // Throughput //$NON-NLS-1$
65
		    new NumberRenderer("#.0"),    // pageSize   //$NON-NLS-1$
66
		};
65
    
67
	public static boolean testFunctors(){
66
	public static boolean testFunctors(){
68
		StatVisualizer instance = new StatVisualizer();
67
		SummaryReport instance = new SummaryReport();
69
		return instance.model.checkFunctors(null,instance.getClass());
68
		return instance.model.checkFunctors(null,instance.getClass());
70
	}
69
	}
71
	
70
	
72
	public String getLabelResource() {
71
	public String getLabelResource() {
73
		return "aggregate_report";  //$NON-NLS-1$
72
		return "summary_report";  //$NON-NLS-1$
74
	}
73
	}
75
	public void add(SampleResult res) {
74
	public void add(SampleResult res) {
76
		SamplingStatCalculator row = null;
75
		Calculator row = null;
77
        final String sampleLabel = res.getSampleLabel(useGroupName.isSelected());
76
        final String sampleLabel = res.getSampleLabel(useGroupName.isSelected());
78
		synchronized (tableRows) {
77
		synchronized (tableRows) {
79
            row = (SamplingStatCalculator) tableRows.get(sampleLabel);
78
            row = (Calculator) tableRows.get(sampleLabel);
80
			if (row == null) {
79
			if (row == null) {
81
				row = new SamplingStatCalculator(sampleLabel);
80
				row = new Calculator(sampleLabel);
82
				tableRows.put(row.getLabel(), row);
81
				tableRows.put(row.getLabel(), row);
83
				model.insertRow(row, model.getRowCount() - 1);
82
				model.insertRow(row, model.getRowCount() - 1);
84
			}
83
			}
85
		}
84
		}
86
        /*
87
        
85
		/*
88
 * Synch is needed because multiple threads can update the counts.
86
		 * Synch is needed because multiple threads can update the counts.
89
         */
90
        
87
		 */
91
synchronized(row) { 
88
		synchronized(row) {
92
            row.addSample(res);
89
		    row.addSample(res);
93
        }
94
		SamplingStat
90
		}
95
Calculator tot = (SamplingStatCalculator) tableRows.get(TOTAL_ROW_LABEL);
91
		Calculator tot = ((Calculator) tableRows.get(TOTAL_ROW_LABEL));
96
		synchronized(tot) {
92
		synchronized(tot) {
97
		    tot.addSample(res);
93
		    tot.addSample(res);
98
		}
94
		}
99
		model.fireTableDataChanged();
95
		model.fireTableDataChanged();
100
	}
96
	}
101
	/**
97
	/**
102
	 * Clears this visualizer and its model, and forces a repaint of the table.
98
	 * Clears this visualizer and its model, and forces a repaint of the table.
103
	 */
99
	 */
104
	public void clearData() {
100
	public void clearData() {
105
	    synchronized (tableRows) {
101
        synchronized (tableRows) {
106
    		model.clearData();
102
    		model.clearData();
107
    		tableRows.clear();
103
    		tableRows.clear();
108
    		tableRows.put(TOTAL_ROW_LABEL, new SamplingStatCalculator(TOTAL_ROW_LABEL));
104
    		tableRows.put(TOTAL_ROW_LABEL, new Calculator(TOTAL_ROW_LABEL));
109
    		model.addRow(tableRows.get(TOTAL_ROW_LABEL));
105
    		model.addRow(tableRows.get(TOTAL_ROW_LABEL));
110
	    }
106
        }
111
	}
107
	}
112
	/**
108
	/**
113
	 * Main visualizer setup.
109
	 * Main visualizer setup.
114
	 */
110
	 */
115
	private void init() {
111
	private void init() {
116
		this.setLayout(new BorderLayout());
112
		this.setLayout(new BorderLayout());
117
		// MAIN PANEL
113
		// MAIN PANEL
118
		JPanel mainPanel = new JPanel();
114
		JPanel mainPanel = new JPanel();
119
		Border margin = new EmptyBorder(10, 10, 5, 10);
115
		Border margin = new EmptyBorder(10, 10, 5, 10);
120
		mainPanel.setBorder(margin);
116
		mainPanel.setBorder(margin);
121
		mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
117
		mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
122
		mainPanel.add(makeTitlePanel());
118
		mainPanel.add(makeTitlePanel());
123
		// SortFilterModel mySortedModel =
124
		// new SortFilterModel(myStatTableModel);
125
		myJTable = new JTable(model);
119
		myJTable = new JTable(model);
126
		myJTable.setPreferredScrollableViewportSize(new Dimension(500, 70));
120
		myJTable.setPreferredScrollableViewportSize(new Dimension(500, 70));
127
		RendererUtils.applyRenderers(myJTable, RENDERERS);
121
		RendererUtils.applyRenderers(myJTable, RENDERERS);
128
		myScrollPane = new JScrollPane(myJTable);
122
		myScrollPane = new JScrollPane(myJTable);
129
		this.add(mainPanel, BorderLayout.NORTH);
123
		this.add(mainPanel, BorderLayout.NORTH);
130
		this.add(myScrollPane, BorderLayout.CENTER);
124
		this.add(myScrollPane, BorderLayout.CENTER);
131
		saveTable.addActionListener(this);
125
		saveTable.addActionListener(this);
132
        JPanel opts = new JPanel();
126
		JPanel opts = new JPanel();
133
        opts.add(useGroupName, BorderLayout.WEST);
127
        opts.add(useGroupName, BorderLayout.WEST);
134
        opts.add(saveTable, BorderLayout.CENTER);
128
		opts.add(saveTable, BorderLayout.CENTER);
135
        this.add(opts,BorderLayout.SOUTH);
129
		this.add(opts,BorderLayout.SOUTH);
136
	}
130
	}
137
	public void actionPerformed(ActionEvent ev) {
131
	public void actionPerformed(ActionEvent ev) {
138
		if (ev.getSource() == saveTable) {
132
		if (ev.getSource() == saveTable) {
139
	        JFileChooser chooser = FileDialoger.promptToSaveFile("aggregate.csv");//$NON-NLS-1$
133
	        JFileChooser chooser = FileDialoger.promptToSaveFile("summary.csv");//$NON-NLS-1$
140
	        if (chooser == null) {
134
            if (chooser == null) {
141
	            return;
135
                return;
142
	        }
136
            }
143
			FileWriter writer = null;
137
			FileWriter writer = null;
144
			try {
138
			try {
145
			    writer = new FileWriter(chooser.getSelectedFile());
139
			    writer = new FileWriter(chooser.getSelectedFile());
146
			    CSVSaveService.saveCSVStats(model,writer);
140
			    CSVSaveService.saveCSVStats(model,writer);
147
			} catch (FileNotFoundException e) {
141
			} catch (FileNotFoundException e) {
148
			    log.warn(e.getMessage());
142
			    log.warn(e.getMessage());
149
			} catch (IOException e) {
143
			} catch (IOException e) {
150
			    log.warn(e.getMessage());
144
			    log.warn(e.getMessage());
151
			} finally {
145
			} finally {
152
			    JOrphanUtils.closeQuietly(writer);
146
			    JOrphanUtils.closeQuietly(writer);
153
			
147
			
Summary
Number of common nesting structure subtrees0
Number of refactorable cases0
Number of non-refactorable cases0
Time elapsed for finding largest common nesting structure subtrees (ms)0.0
Clones location
Number of node comparisons0