Package net.sf.logsaw.ui.viewers

Source Code of net.sf.logsaw.ui.viewers.LogEntryTableLabelProvider

/*******************************************************************************
* Copyright (c) 2010, 2011 LogSaw project and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    LogSaw project committers - initial API and implementation
*******************************************************************************/
package net.sf.logsaw.ui.viewers;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.Date;

import net.sf.logsaw.core.field.ALogEntryField;
import net.sf.logsaw.core.field.ILogEntryFieldVisitor;
import net.sf.logsaw.core.field.Level;
import net.sf.logsaw.core.field.LogEntry;
import net.sf.logsaw.core.field.model.DateLogEntryField;
import net.sf.logsaw.core.field.model.LevelLogEntryField;
import net.sf.logsaw.core.field.model.StringLogEntryField;
import net.sf.logsaw.core.logresource.ILogResource;
import net.sf.logsaw.ui.Messages;
import net.sf.logsaw.ui.UIPlugin;

import org.apache.commons.io.IOUtils;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;

/**
* A simple label provider for log entries
*
* @author Philipp Nanz
*/
public class LogEntryTableLabelProvider extends LabelProvider implements
    ITableLabelProvider {

  // Local image registry for all log level icons that are provided by the dialect
  private ImageRegistry imageRegistry = new ImageRegistry();
  private ALogEntryField<?, ?>[] fields;
  private ILogResource log;

  /**
   * @param log the log to set
   */
  public void setLog(ILogResource log) {
    this.log = log;
  }

  /**
   * @param fields the fields to set
   */
  public void setFields(ALogEntryField<?, ?>[] fields) {
    this.fields = fields;
  }

  private Image getImageFromRegistry(String iconPath) {
    Assert.isNotNull(iconPath, "iconPath must not be null"); //$NON-NLS-1$
    Image img = imageRegistry.get(iconPath);
    if (img == null) {
      imageRegistry.put(iconPath, UIPlugin.imageDescriptorFromPlugin(
          log.getDialect().getFactory().getContributor(), iconPath));
      img = imageRegistry.get(iconPath);
    }
    return img;
  }

  /* (non-Javadoc)
   * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
   */
  @Override
  public Image getColumnImage(Object element, int columnIndex) {
    if ((columnIndex == 0) && (log.getDialect().getFieldProvider().getLevelField() != null)) {
      // The icon column
      LogEntry entry = (LogEntry) element;
      Level level = entry.get(log.getDialect().getFieldProvider().getLevelField());
      String iconPath = log.getDialect().getFieldProvider().getLevelField().getLevelProvider().getIconPathForLevel(level);
      if (iconPath != null) {
        // Lookup icon in local image registry
        return getImageFromRegistry(iconPath);
      }
    }
    return null;
  }

  private String snipAtLinebreak(String str) {
    String firstLine = null;
    BufferedReader reader = new BufferedReader(new StringReader(str));
    try {
      firstLine = reader.readLine();
      if ((firstLine != null) && (firstLine.length() != str.length())) {
        return firstLine + Messages.LogEntryTableLabelProvider_snipSuffix;
      }
    } catch (IOException e) {
      // Should not happen, and if it happens it's no big deal
    } finally {
      IOUtils.closeQuietly(reader);
    }
    return str;
  }

  /* (non-Javadoc)
   * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
   */
  @Override
  public String getColumnText(Object element, int columnIndex) {
    if (columnIndex == 0) {
      // The icon column
      return ""; //$NON-NLS-1$
    }
    final LogEntry entry = (LogEntry) element;
    if ((columnIndex - 1) < fields.length) {
      final String[] ret = new String[1];
      // Setup visitor
      ILogEntryFieldVisitor visitor = new ILogEntryFieldVisitor() {
       
        /* (non-Javadoc)
         * @see net.sf.logsaw.core.model.ILogEntryFieldVisitor#visit(net.sf.logsaw.core.model.StringLogEntryField)
         */
        @Override
        public void visit(StringLogEntryField fld) {
          String value = entry.get(fld);
          if (value != null) {
            ret[0] = snipAtLinebreak(fld.toInputValue(value, log));
          }
        }

        /* (non-Javadoc)
         * @see net.sf.logsaw.core.model.ILogEntryFieldVisitor#visit(net.sf.logsaw.core.model.LevelLogEntryField)
         */
        @Override
        public void visit(LevelLogEntryField fld) {
          Level value = entry.get(fld);
          if (value != null) {
            ret[0] = fld.toInputValue(value, log);
          }
        }

        /* (non-Javadoc)
         * @see net.sf.logsaw.core.model.ILogEntryFieldVisitor#visit(net.sf.logsaw.core.model.DateLogEntryField)
         */
        @Override
        public void visit(DateLogEntryField fld) {
          Date value = entry.get(fld);
          if (value != null) {
            ret[0] = fld.toInputValue(value, log);
          }
        }
      };
      ALogEntryField<?, ?> fld = fields[columnIndex - 1];
      fld.visit(visitor);
      if ((ret[0] == null) || (ret[0].length() == 0)) {
        return Messages.LogEntryTableLabelProvider_emptyValue;
      }
      return ret[0];
    }
    return Messages.LogEntryTableLabelProvider_emptyValue;
  }

  /* (non-Javadoc)
   * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose()
   */
  @Override
  public void dispose() {
    imageRegistry.dispose();
    super.dispose();
  }
}
TOP

Related Classes of net.sf.logsaw.ui.viewers.LogEntryTableLabelProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.