1 /*******************************************************************************
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
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
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.message.ui;
14 import java.text.DateFormat;
15 import java.text.SimpleDateFormat;
16 import java.util.ArrayList;
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;
27 public class LogViewLabelProvider extends LabelProvider implements ITableLabelProvider, ITableFontProvider {
29 private static int MAX_LABEL_LENGTH = 200;
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>();
40 private LogView logView;
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);
51 this.logView = logView;
54 public void dispose() {
55 if (consumers.size() == 0) {
60 public Image getColumnImage(Object element, int columnIndex) {
61 if (element instanceof Group) {
62 return (columnIndex == 0) ? hierarchicalImage : null;
65 LogEntry entry = (LogEntry) element;
66 if (columnIndex == 0) {
67 switch (entry.getSeverity()) {
72 case IStatus.WARNING :
74 case IDetailStatus.DEBUG :
77 return (entry.getStack() == null ? errorImage : errorWithStackImage);
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$
89 DateFormat formatter = new SimpleDateFormat(LogEntry.F_DATE_FORMAT);
90 return formatter.format(session.getDate());
93 if ((element instanceof Group) && (columnIndex == 0)) {
94 return element.toString();
97 if (element instanceof LogEntry) {
98 LogEntry entry = (LogEntry) element;
99 switch (columnIndex) {
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()));
107 return sb.toString();
109 return entry.getMessage();
112 if (entry.getPluginId() != null)
113 return entry.getPluginId();
115 return entry.getFormattedDate();
119 return ""; //$NON-NLS-1$
122 public void connect(Object consumer) {
123 if (!consumers.contains(consumer))
124 consumers.add(consumer);
127 public void disconnect(Object consumer) {
128 consumers.remove(consumer);
129 if (consumers.size() == 0) {
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);