]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.message.ui/src/org/simantics/message/ui/LogViewLabelProvider.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.message.ui / src / org / simantics / message / ui / LogViewLabelProvider.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.message.ui;
13
14 import java.text.DateFormat;
15 import java.text.SimpleDateFormat;
16 import java.util.ArrayList;
17
18 import org.eclipse.core.runtime.IStatus;
19 import org.eclipse.jface.resource.JFaceResources;
20 import org.eclipse.jface.viewers.ITableFontProvider;
21 import org.eclipse.jface.viewers.ITableLabelProvider;
22 import org.eclipse.jface.viewers.LabelProvider;
23 import org.eclipse.swt.graphics.Font;
24 import org.eclipse.swt.graphics.Image;
25 import org.simantics.message.IDetailStatus;
26
27 public class LogViewLabelProvider extends LabelProvider implements ITableLabelProvider, ITableFontProvider {
28
29         private static int MAX_LABEL_LENGTH = 200;
30
31     private Image debugImage;
32     private Image infoImage;
33         private Image okImage;
34         private Image errorImage;
35         private Image warningImage;
36         private Image errorWithStackImage;
37         private Image hierarchicalImage;
38         ArrayList<Object> consumers = new ArrayList<Object>();
39
40         private LogView logView;
41
42         public LogViewLabelProvider(LogView logView) {
43         debugImage = SharedImages.getImage(SharedImages.DESC_DEBUG_ST_OBJ);
44         errorImage = SharedImages.getImage(SharedImages.DESC_ERROR_ST_OBJ);
45                 warningImage = SharedImages.getImage(SharedImages.DESC_WARNING_ST_OBJ);
46                 infoImage = SharedImages.getImage(SharedImages.DESC_INFO_ST_OBJ);
47                 okImage = SharedImages.getImage(SharedImages.DESC_OK_ST_OBJ);
48                 errorWithStackImage = SharedImages.getImage(SharedImages.DESC_ERROR_STACK_OBJ);
49                 hierarchicalImage = SharedImages.getImage(SharedImages.DESC_HIERARCHICAL_LAYOUT_OBJ);
50
51                 this.logView = logView;
52         }
53
54         public void dispose() {
55                 if (consumers.size() == 0) {
56                         super.dispose();
57                 }
58         }
59
60         public Image getColumnImage(Object element, int columnIndex) {
61                 if (element instanceof Group) {
62                         return (columnIndex == 0) ? hierarchicalImage : null;
63                 }
64
65                 LogEntry entry = (LogEntry) element;
66                 if (columnIndex == 0) {
67                         switch (entry.getSeverity()) {
68                                 case IStatus.INFO :
69                                         return infoImage;
70                                 case IStatus.OK :
71                                         return okImage;
72                 case IStatus.WARNING :
73                     return warningImage;
74                 case IDetailStatus.DEBUG :
75                     return debugImage;
76                                 default :
77                                         return (entry.getStack() == null ? errorImage : errorWithStackImage);
78                         }
79                 }
80                 return null;
81         }
82
83         public String getColumnText(Object element, int columnIndex) {
84                 if ((element instanceof LogSession) && (columnIndex == 2)) {
85                         LogSession session = (LogSession) element;
86                         if (session.getDate() == null)
87                                 return ""; //$NON-NLS-1$
88
89                         DateFormat formatter = new SimpleDateFormat(LogEntry.F_DATE_FORMAT);
90                         return formatter.format(session.getDate());
91                 }
92
93                 if ((element instanceof Group) && (columnIndex == 0)) {
94                         return element.toString();
95                 }
96
97                 if (element instanceof LogEntry) {
98                         LogEntry entry = (LogEntry) element;
99                         switch (columnIndex) {
100                                 case 0 :
101                                         if (entry.getMessage() != null) {
102                                                 String message = entry.getMessage();
103                                                 if (message.length() > MAX_LABEL_LENGTH) {
104                                                         String warning = Messages.LogViewLabelProvider_truncatedMessage;
105                                                         StringBuffer sb = new StringBuffer(message.substring(0, MAX_LABEL_LENGTH - warning.length()));
106                                                         sb.append(warning);
107                                                         return sb.toString();
108                                                 }
109                                                 return entry.getMessage();
110                                         }
111                                 case 1 :
112                                         if (entry.getPluginId() != null)
113                                                 return entry.getPluginId();
114                                 case 2 :
115                                         return entry.getFormattedDate();
116                         }
117                 }
118
119                 return ""; //$NON-NLS-1$
120         }
121
122         public void connect(Object consumer) {
123                 if (!consumers.contains(consumer))
124                         consumers.add(consumer);
125         }
126
127         public void disconnect(Object consumer) {
128                 consumers.remove(consumer);
129                 if (consumers.size() == 0) {
130                         dispose();
131                 }
132         }
133
134         public Font getFont(Object element, int columnIndex) {
135                 if ((element instanceof LogSession) && (logView.isCurrentLogSession((LogSession) element))) {
136                         return JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
137                 }
138
139                 return null;
140         }
141 }