]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.message.ui/src/org/simantics/message/ui/LogViewLabelProvider.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.message.ui / src / org / simantics / message / ui / LogViewLabelProvider.java
diff --git a/bundles/org.simantics.message.ui/src/org/simantics/message/ui/LogViewLabelProvider.java b/bundles/org.simantics.message.ui/src/org/simantics/message/ui/LogViewLabelProvider.java
new file mode 100644 (file)
index 0000000..caa5fb4
--- /dev/null
@@ -0,0 +1,141 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.message.ui;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ITableFontProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.simantics.message.IDetailStatus;
+
+public class LogViewLabelProvider extends LabelProvider implements ITableLabelProvider, ITableFontProvider {
+
+       private static int MAX_LABEL_LENGTH = 200;
+
+    private Image debugImage;
+    private Image infoImage;
+       private Image okImage;
+       private Image errorImage;
+       private Image warningImage;
+       private Image errorWithStackImage;
+       private Image hierarchicalImage;
+       ArrayList<Object> consumers = new ArrayList<Object>();
+
+       private LogView logView;
+
+       public LogViewLabelProvider(LogView logView) {
+        debugImage = SharedImages.getImage(SharedImages.DESC_DEBUG_ST_OBJ);
+        errorImage = SharedImages.getImage(SharedImages.DESC_ERROR_ST_OBJ);
+               warningImage = SharedImages.getImage(SharedImages.DESC_WARNING_ST_OBJ);
+               infoImage = SharedImages.getImage(SharedImages.DESC_INFO_ST_OBJ);
+               okImage = SharedImages.getImage(SharedImages.DESC_OK_ST_OBJ);
+               errorWithStackImage = SharedImages.getImage(SharedImages.DESC_ERROR_STACK_OBJ);
+               hierarchicalImage = SharedImages.getImage(SharedImages.DESC_HIERARCHICAL_LAYOUT_OBJ);
+
+               this.logView = logView;
+       }
+
+       public void dispose() {
+               if (consumers.size() == 0) {
+                       super.dispose();
+               }
+       }
+
+       public Image getColumnImage(Object element, int columnIndex) {
+               if (element instanceof Group) {
+                       return (columnIndex == 0) ? hierarchicalImage : null;
+               }
+
+               LogEntry entry = (LogEntry) element;
+               if (columnIndex == 0) {
+                       switch (entry.getSeverity()) {
+                               case IStatus.INFO :
+                                       return infoImage;
+                               case IStatus.OK :
+                                       return okImage;
+                case IStatus.WARNING :
+                    return warningImage;
+                case IDetailStatus.DEBUG :
+                    return debugImage;
+                               default :
+                                       return (entry.getStack() == null ? errorImage : errorWithStackImage);
+                       }
+               }
+               return null;
+       }
+
+       public String getColumnText(Object element, int columnIndex) {
+               if ((element instanceof LogSession) && (columnIndex == 2)) {
+                       LogSession session = (LogSession) element;
+                       if (session.getDate() == null)
+                               return ""; //$NON-NLS-1$
+
+                       DateFormat formatter = new SimpleDateFormat(LogEntry.F_DATE_FORMAT);
+                       return formatter.format(session.getDate());
+               }
+
+               if ((element instanceof Group) && (columnIndex == 0)) {
+                       return element.toString();
+               }
+
+               if (element instanceof LogEntry) {
+                       LogEntry entry = (LogEntry) element;
+                       switch (columnIndex) {
+                               case 0 :
+                                       if (entry.getMessage() != null) {
+                                               String message = entry.getMessage();
+                                               if (message.length() > MAX_LABEL_LENGTH) {
+                                                       String warning = Messages.LogViewLabelProvider_truncatedMessage;
+                                                       StringBuffer sb = new StringBuffer(message.substring(0, MAX_LABEL_LENGTH - warning.length()));
+                                                       sb.append(warning);
+                                                       return sb.toString();
+                                               }
+                                               return entry.getMessage();
+                                       }
+                               case 1 :
+                                       if (entry.getPluginId() != null)
+                                               return entry.getPluginId();
+                               case 2 :
+                                       return entry.getFormattedDate();
+                       }
+               }
+
+               return ""; //$NON-NLS-1$
+       }
+
+       public void connect(Object consumer) {
+               if (!consumers.contains(consumer))
+                       consumers.add(consumer);
+       }
+
+       public void disconnect(Object consumer) {
+               consumers.remove(consumer);
+               if (consumers.size() == 0) {
+                       dispose();
+               }
+       }
+
+       public Font getFont(Object element, int columnIndex) {
+               if ((element instanceof LogSession) && (logView.isCurrentLogSession((LogSession) element))) {
+                       return JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
+               }
+
+               return null;
+       }
+}