uk.ac.diamond.sda.navigator.hdf5.HDF5LabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for uk.ac.diamond.sda.navigator.hdf5.HDF5LabelProvider.java

Source

/*
 * Copyright (c) 2012 Diamond Light Source Ltd.
 *
 * 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
 */

package uk.ac.diamond.sda.navigator.hdf5;

import org.eclipse.core.resources.IFile;
import org.eclipse.dawnsci.analysis.api.dataset.ILazyDataset;
import org.eclipse.dawnsci.analysis.api.tree.Attribute;
import org.eclipse.dawnsci.analysis.api.tree.DataNode;
import org.eclipse.dawnsci.analysis.api.tree.Node;
import org.eclipse.dawnsci.analysis.api.tree.NodeLink;
import org.eclipse.dawnsci.analysis.dataset.impl.Dataset;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.navigator.IDescriptionProvider;

import uk.ac.diamond.scisoft.analysis.io.NexusTreeUtils;

/**
 * Provides a label and icon for objects of type {@HDF5NodeLink}.
 */
public class HDF5LabelProvider extends LabelProvider
        implements ILabelProvider, ILabelDecorator, IDescriptionProvider {

    public static final String ID = "uk.ac.diamond.sda.navigator.hdf5Decorator";

    @Override
    public Image getImage(Object element) {
        if (element instanceof Attribute) {
            return new Image(Display.getCurrent(), getClass().getResourceAsStream("/icons/hdf5/dataset.gif"));
        }
        NodeLink link = (NodeLink) element;
        Node node = link.getDestination();
        if (node instanceof DataNode) {
            DataNode dataset = (DataNode) node;
            if (dataset.isString()) {
                return new Image(Display.getCurrent(), getClass().getResourceAsStream("/icons/hdf5/text.gif"));
            }
            //ILazyDataset data = dataset.getDataset();
            // data
            //if (data instanceof Dataset) {
            return new Image(Display.getCurrent(), getClass().getResourceAsStream("/icons/hdf5/dataset.gif"));
            //} else {
            //   return new Image(Display.getCurrent(), getClass().getResourceAsStream("/icons/hdf5/dataset.gif"));
            //}            
        }
        return new Image(Display.getCurrent(), getClass().getResourceAsStream("/icons/hdf5/folderopen.gif"));
    }

    @Override
    public String getText(Object element) {
        return (element instanceof Attribute) == true ? ((Attribute) element).getName() + " "
                : ((NodeLink) element).getName() + " ";
    }

    @Override
    public String getDescription(Object element) {
        String msg = "";
        if (element instanceof IFile) {
            IFile file = (IFile) element;
            return file.getName() + " " + file.getFullPath();
        }
        if (element instanceof Attribute) {
            Attribute attr = (Attribute) element;
            // name
            msg = attr.getName();
            return msg;
        }
        assert element instanceof NodeLink : "Not an attribute or a link";
        NodeLink link = (NodeLink) element;
        Node node = link.getDestination();
        msg = link.getName();
        if (node instanceof DataNode) {
            DataNode dataset = (DataNode) node;
            if (!dataset.isSupported()) {
                return "Not supported";
            }
        }
        return msg;
    }

    @Override
    public Image decorateImage(Image image, Object element) {
        return image;
    }

    @Override
    public String decorateText(String label, Object element) {

        if (element instanceof Attribute) {
            Attribute attr = (Attribute) element;
            // class
            label += ("Attr ");
            // dimensions
            if (attr.getSize() > 1) {
                for (int i : attr.getShape()) {
                    label += i + ", ";
                }
                if (label.length() > 2)
                    label += label.substring(0, label.length() - 2) + " ";
            }
            // type
            label += attr.getTypeName() + " ";
            // data
            label += attr.getSize() == 1 ? attr.getFirstElement() + " " : attr.toString() + " ";
            return label;
        }
        assert element instanceof NodeLink : "Not an attribute or a link";
        NodeLink link = (NodeLink) element;
        Node node = link.getDestination();
        // class
        Attribute attr = node.getAttribute(NexusTreeUtils.NX_CLASS);
        if (attr != null)
            label += attr.getFirstElement() + " ";
        //label += attr.getFirstElement()+" ";
        if (node instanceof DataNode) {
            DataNode dataset = (DataNode) node;
            // class
            label += "SDS ";
            if (dataset.isString()) {
                label += dataset.getTypeName() + " ";
                label += dataset.getString() + " ";
                if (label.length() > 100) // restrict to 100 characters
                    label = label.substring(0, 100) + "...";
                return label;
            }
            if (!dataset.isSupported()) {
                return label + "Not supported";
            }
            ILazyDataset data = dataset.getDataset();
            int[] shape = data.getShape();
            // dimensions
            for (int i : shape) {
                label += i + ", ";
            }
            if (label.length() > 2)
                label += label.substring(0, label.length() - 2) + " ";
            // type
            label += dataset.getTypeName() + " ";
            // data
            if (data instanceof Dataset) {
                // show a single value
                label += ((Dataset) data).getString(0) + " ";
            } else {
                label += "Select to view";
            }
        }
        return label;
    }
}