Revision 45716

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/dispose/DisposableManagementExtension.java
34 34
import java.util.Collections;
35 35
import java.util.List;
36 36
import java.util.Set;
37

  
38 37
import javax.swing.JScrollPane;
39 38
import javax.swing.JTable;
40 39
import javax.swing.JTextPane;
......
44 43
import javax.swing.table.AbstractTableModel;
45 44
import javax.swing.table.DefaultTableColumnModel;
46 45
import javax.swing.table.TableColumn;
47
import javax.swing.table.TableColumnModel;
48

  
49 46
import org.gvsig.andami.plugins.Extension;
50 47
import org.gvsig.tools.ToolsLocator;
51 48
import org.gvsig.tools.dispose.Disposable;
......
55 52
import org.gvsig.tools.swing.api.ToolsSwingLocator;
56 53
import org.gvsig.tools.swing.api.ToolsSwingUtils;
57 54
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
55
import org.gvsig.tools.util.LabeledValue;
58 56
import org.slf4j.Logger;
59 57
import org.slf4j.LoggerFactory;
60 58

  
......
148 146
            this.disposablesTable.setColumnModel(columnModel);
149 147

  
150 148
            this.disposablesTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
151
            
149

  
152 150
            this.infoTextArea = new JTextPane();
153 151
            this.infoTextArea.setContentType("text/html");
154
            
152

  
155 153
            JScrollPane listScroller = new JScrollPane(this.disposablesTable);
156 154
            JScrollPane infoScroller = new JScrollPane(this.infoTextArea);
157 155
            this.splitPanel.setLeftComponent(listScroller);
......
161 159
//            dim.height = dim.height / 2;
162 160
//            this.disposablesTable.setPreferredSize(dim);
163 161
//            this.splitPanel.invalidate();
164
            
165 162
            this.closeButton.addActionListener((ActionEvent arg0) -> {
166 163
                closeWindow();
167 164
            });
......
189 186
            });
190 187
            this.refreshButton.setEnabled(true);
191 188
        }
192
        
189

  
193 190
        private TableColumn createTableColumn(int col, int size, String name) {
194 191
            TableColumn tableColumn = new TableColumn(col, size);
195 192
            tableColumn.setHeaderValue(name);
......
203 200
        private void ListItemSelected() {
204 201
            DisposablesTableModel model = (DisposablesTableModel) this.disposablesTable.getModel();
205 202
            DisposableInfo info = model.get(this.disposablesTable.getSelectedRow());
206
            if( info==null ) {
203
            if (info == null) {
207 204
                this.infoTextArea.setText("");
208 205
            } else {
209 206
                this.infoTextArea.setText(toHTML(info));
......
219 216
            this.messageLabel.setText("Pending " + disposables.size());
220 217
            this.infoTextArea.setText("");
221 218
        }
222
        
219

  
223 220
        private void updateMemoryUsage() {
224 221
            Runtime rt = Runtime.getRuntime();
225
            this.lblTotalMemory.setText(String.valueOf(rt.totalMemory()/1024));
226
            this.lblMaxMemory.setText(String.valueOf(rt.maxMemory()/1024));
227
            this.lblFreeMemory.setText(String.valueOf(rt.freeMemory()/1024));
222
            this.lblTotalMemory.setText(String.valueOf(rt.totalMemory() / 1024));
223
            this.lblMaxMemory.setText(String.valueOf(rt.maxMemory() / 1024));
224
            this.lblFreeMemory.setText(String.valueOf(rt.freeMemory() / 1024));
228 225
            this.lblActiveThreads.setText(String.valueOf(Thread.activeCount()));
229
            
226

  
230 227
            int objectPendingFinalizationCount = -1;
231 228
            try {
232
                MemoryMXBean memBean = ManagementFactory.getMemoryMXBean() ;
229
                MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();
233 230
                objectPendingFinalizationCount = memBean.getObjectPendingFinalizationCount();
234
            } catch(ThreadDeath th) {
235
                
231
            } catch (ThreadDeath th) {
232

  
236 233
            }
237 234
            this.lblObjectPendingFinalization.setText(String.valueOf(objectPendingFinalizationCount));
238 235
        }
239 236

  
240 237
        private class DisposablesTableModel extends AbstractTableModel {
241 238

  
242
            private List<DisposableInfo> disposables; 
239
            private List<DisposableInfo> disposables;
243 240
            private final String[] columnNames;
244 241
            private final Class[] columnClass;
245
            
242

  
246 243
            public DisposablesTableModel() {
247 244
                this(Collections.EMPTY_LIST);
248 245
            }
249
            
246

  
250 247
            public DisposablesTableModel(List<DisposableInfo> disposables) {
251 248
                this.disposables = disposables;
252
                this.columnNames = new String[] {"Refs.", "Class", "Code", "Full class", "To str."};
253
                this.columnClass = new Class[] {Integer.class, String.class, Integer.class, String.class, String.class};
249
                this.columnNames = new String[]{"Refs.", "Class", "Code", "Full class", "To str."};
250
                this.columnClass = new Class[]{Integer.class, String.class, Integer.class, String.class, String.class};
254 251
            }
255
            
252

  
256 253
            public DisposableInfo get(int rowIndex) {
257 254
                try {
258 255
                    return this.disposables.get(rowIndex);
259
                } catch(Throwable th) {
256
                } catch (Throwable th) {
260 257
                    return null;
261 258
                }
262 259
            }
263
            
260

  
264 261
            @Override
265 262
            public int getRowCount() {
266 263
                return this.disposables.size();
......
284 281
            @Override
285 282
            public Object getValueAt(int rowIndex, int columnIndex) {
286 283
                DisposableInfo info = this.disposables.get(rowIndex);
287
                switch(columnIndex) {
284
                switch (columnIndex) {
288 285
                    case 0:
289 286
                        return info.getReferencesCount();
290 287
                    case 1:
291 288
                        try {
292
                            return info.getDisposable().getClass().getSimpleName();
293
                        } catch(Throwable th) {
294
                            return "(unknown)";
295
                        }
289
                        return info.getDisposable().getClass().getSimpleName();
290
                    } catch (Throwable th) {
291
                        return "(unknown)";
292
                    }
296 293
                    case 2:
297 294
                        try {
298
                            return info.getDisposable().hashCode();
299
                        } catch(Throwable th) {
300
                            return -1;
301
                        }
295
                        return info.getDisposable().hashCode();
296
                    } catch (Throwable th) {
297
                        return -1;
298
                    }
302 299
                    case 3:
303 300
                        try {
304
                            return info.getDisposable().getClass().getName();
305
                        } catch(Throwable th) {
306
                            return "(unknown)";
307
                        }
301
                        return info.getDisposable().getClass().getName();
302
                    } catch (Throwable th) {
303
                        return "(unknown)";
304
                    }
308 305
                    case 4:
309 306
                        try {
310
                            return info.getDisposable().toString();
311
                        } catch(Throwable th) {
312
                            return "(unknown)";
313
                        }
307
                        return info.getDisposable().toString();
308
                    } catch (Throwable th) {
309
                        return "(unknown)";
310
                    }
314 311
                }
315 312
                return null;
316 313
            }
317 314
        }
318 315

  
319
        public String toHTML(DisposableInfo  disposableInfo) {
316
        public String toHTML(DisposableInfo disposableInfo) {
320 317
            StringBuilder buffer = new StringBuilder();
321 318
            Disposable disposable = disposableInfo.getDisposable();
322 319

  
......
325 322
            buffer.append("<b>References</b>: ").append(disposableInfo.getReferencesCount()).append("<br>\n");
326 323
            buffer.append("<b>toString</b>: ").append(disposable.toString()).append("<br>\n");
327 324

  
328
            buffer.append("<b>First binded from (stack)</b>:<br>\n");
329
            StackTraceElement[] stackFirstTrace = null;
330
            StackTraceElement[] stackLastTrace = null;
331 325
            try {
332
                stackFirstTrace = disposableInfo
333
                        .getFirstBindDisposableStackTrace();
334
                for (StackTraceElement stackTrace1 : stackFirstTrace) {
335
                    buffer.append("&nbsp;&nbsp;").append(stackTrace1.toString().replaceAll("[<]", "&lt;").replace("[>]", "&gt;")).append("<br>\n");
336
                }
337
                stackLastTrace = disposableInfo
338
                        .getLastBindDisposableStackTrace();
339
                if(stackLastTrace != stackFirstTrace){
340
                    buffer.append("<b>Last binded from (stack)</b>:<br>\n");
341
                    for (StackTraceElement stackTrace1 : stackLastTrace) {
326
                List<LabeledValue<StackTraceElement[]>> allStackTraces = disposableInfo.getAllStackTrace();
327
                for (int i = 0; i < allStackTraces.size(); i++) {
328
                    LabeledValue<StackTraceElement[]> trace = allStackTraces.get(i);
329
                    buffer.append("<b>#");
330
                    buffer.append(i + 1);
331
                    buffer.append(" ");
332
                    buffer.append(trace.getLabel());
333
                    buffer.append(" from (stack)</b>:<br>\n");
334
                    for (StackTraceElement stackTrace1 : trace.getValue()) {
342 335
                        buffer.append("&nbsp;&nbsp;").append(stackTrace1.toString().replaceAll("[<]", "&lt;").replace("[>]", "&gt;")).append("<br>\n");
343 336
                    }
344 337
                }
338

  
345 339
            } catch (Exception ex) {
346 340
                buffer.append("<br>\n<br>\nError showing stack.<br>\n").append(ex.getMessage());
347 341
            }

Also available in: Unified diff