eu.esdihumboldt.hale.ui.views.resources.internal.ResourcesLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for eu.esdihumboldt.hale.ui.views.resources.internal.ResourcesLabelProvider.java

Source

/*
 * Copyright (c) 2013 Data Harmonisation Panel
 * 
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution. If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contributors:
 *     Data Harmonisation Panel <http://www.dhpanel.eu>
 */

package eu.esdihumboldt.hale.ui.views.resources.internal;

import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;

import eu.esdihumboldt.hale.common.core.io.IOAction;
import eu.esdihumboldt.hale.common.core.io.project.model.Resource;
import eu.esdihumboldt.hale.ui.io.action.ActionUI;
import eu.esdihumboldt.hale.ui.io.action.ActionUIExtension;
import eu.esdihumboldt.hale.ui.service.project.ProjectService;

/**
 * Resource and action label provider.
 * 
 * @author Simon Templer
 */
public class ResourcesLabelProvider extends StyledCellLabelProvider implements ILabelProvider {

    private final Map<String, Image> actionImages = new HashMap<>();

    private final Image projectImage = ResourcesViewPlugin.getImageDescriptor("icons/project_open.gif")
            .createImage();

    @Override
    public void update(ViewerCell cell) {
        Object element = cell.getElement();
        cell.setImage(getImage(element));

        StyledString text = new StyledString(getText(element));

        if (element instanceof Resource) {
            Resource resource = (Resource) element;
            if (resource.getContentType() != null) {
                text.append(" (" + resource.getContentType().getName() + ")", StyledString.DECORATIONS_STYLER);
            }
        }

        cell.setText(text.getString());
        cell.setStyleRanges(text.getStyleRanges());

        super.update(cell);
    }

    @Override
    public Image getImage(Object element) {
        if (element instanceof IOAction) {
            IOAction action = (IOAction) element;
            Image actionImage = actionImages.get(action.getId());
            if (actionImage == null) {
                ActionUI actionUI = ActionUIExtension.getInstance().findActionUI(action.getId());
                URL iconUrl = actionUI.getIconURL();
                if (iconUrl != null) {
                    actionImage = ImageDescriptor.createFromURL(iconUrl).createImage();
                    actionImages.put(action.getId(), actionImage);
                }
            }

            if (actionImage != null) {
                return actionImage;
            }

            return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
        }

        if (element instanceof Resource) {
            return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
        }

        if (element instanceof ProjectToken) {
            return projectImage;
        }

        return null;
    }

    @Override
    public String getText(Object element) {
        if (element instanceof ProjectToken) {
            ProjectService ps = (ProjectService) PlatformUI.getWorkbench().getService(ProjectService.class);
            String name = ps.getProjectInfo().getName();
            if (name == null) {
                return "<Unnamed project>";
            }
            return name;
        }
        if (element instanceof IOAction) {
            IOAction action = (IOAction) element;

            // try names in order of preference

            // resource category name
            if (action.getResourceCategoryName() != null) {
                return action.getResourceCategoryName();
            }

            // action name
            if (action.getName() != null) {
                return action.getName();
            }

            // action ID
            return action.getId();
        }
        if (element instanceof Resource) {
            Resource resource = (Resource) element;
            if (resource.getSource() != null) {
                String location = resource.getSource().toString();
                int index = location.lastIndexOf('/');
                if (index > 0 && index < location.length()) {
                    return location.substring(index + 1);
                } else {
                    return location;
                }
            }
            return resource.getResourceId();
        }
        if (element instanceof IContentType) {
            IContentType ct = (IContentType) element;
            return ct.getName();
        }
        return element.toString();
    }

    @Override
    public void dispose() {
        for (Image image : actionImages.values()) {
            image.dispose();
        }
        actionImages.clear();

        projectImage.dispose();

        super.dispose();
    }
}