Package org.apache.felix.sigil.eclipse.ui.internal.editors.project

Source Code of org.apache.felix.sigil.eclipse.ui.internal.editors.project.ProjectLabelProvider

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.apache.felix.sigil.eclipse.ui.internal.editors.project;

import java.io.InputStream;

import org.apache.felix.sigil.common.model.eclipse.ISigilBundle;
import org.apache.felix.sigil.common.model.osgi.IBundleModelElement;
import org.apache.felix.sigil.common.model.osgi.IPackageExport;
import org.apache.felix.sigil.common.model.osgi.IPackageImport;
import org.apache.felix.sigil.common.model.osgi.IRequiredBundle;
import org.apache.felix.sigil.eclipse.SigilCore;
import org.apache.felix.sigil.eclipse.ui.util.DefaultLabelProvider;
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Widget;

public class ProjectLabelProvider extends DefaultLabelProvider implements IBaseLabelProvider
{

    private final Widget parent;
    private final ImageRegistry registry;
    private final IDependencyChecker checker;

    public ProjectLabelProvider(Widget parent, ImageRegistry registry)
    {
        this(parent, registry, null);
    }

    public ProjectLabelProvider(Widget parent, ImageRegistry registry, IDependencyChecker checker)
    {
        this.parent = parent;
        this.registry = registry;
        this.checker = checker;
    }

    public Image getImage(Object element)
    {
        Image result = null;
        if (element instanceof ISigilBundle || element instanceof IRequiredBundle
            || element instanceof IBundleModelElement)
        {
            result = findBundle();
        }
        else if (element instanceof IPackageImport)
        {
            if (checker != null)
            {
                result = checker.isSatisfied((IPackageImport) element) ? findPackage()
                    : findPackageError();
            }
            else
            {
                result = findPackage();
            }
        }
        else if (element instanceof IPackageExport)
        {
            result = findPackage();
        }
        else if (element instanceof IPackageFragmentRoot)
        {
            IPackageFragmentRoot root = (IPackageFragmentRoot) element;
            try
            {
                if (root.getKind() == IPackageFragmentRoot.K_SOURCE)
                {
                    result = findPackage();
                }
                else
                {
                    result = findBundle();
                }
            }
            catch (JavaModelException e)
            {
                SigilCore.error("Failed to inspect package fragment root", e);
            }
        }
        else if (element instanceof IClasspathEntry)
        {
            result = findPackage();
        }

        return result;
    }

    public String getText(Object element)
    {
        if (element instanceof ISigilBundle)
        {
            ISigilBundle bundle = (ISigilBundle) element;
            return bundle.getBundleInfo().getSymbolicName();
        }

        if (element instanceof IRequiredBundle)
        {
            IRequiredBundle req = (IRequiredBundle) element;
            return req.getSymbolicName() + " " + req.getVersions();
        }

        if (element instanceof IPackageImport)
        {
            IPackageImport req = (IPackageImport) element;
            return req.getPackageName() + " " + req.getVersions();
        }

        if (element instanceof IPackageExport)
        {
            IPackageExport pe = (IPackageExport) element;
            return pe.getPackageName() + " " + pe.getVersion();
        }

        if (element instanceof IResource)
        {
            IResource resource = (IResource) element;
            return resource.getName();
        }

        if (element instanceof IPackageFragment)
        {
            IPackageFragment f = (IPackageFragment) element;
            return f.getElementName();
        }

        if (element instanceof IPackageFragmentRoot)
        {
            IPackageFragmentRoot f = (IPackageFragmentRoot) element;
            try
            {
                return f.getUnderlyingResource().getName();
            }
            catch (JavaModelException e)
            {
                return "unknown";
            }
        }

        if (element instanceof IClasspathEntry)
        {
            IClasspathEntry cp = (IClasspathEntry) element;
            return cp.getPath().toString();
        }

        return element.toString();
    }

    private Image findPackage()
    {
        Image image = registry.get("package");

        if (image == null)
        {
            image = loadImage("icons/package_obj.png");
            registry.put("package", image);
        }

        return image;
    }

    private Image findPackageError()
    {
        Image image = registry.get("package_error");
        if (image == null)
        {
            image = loadImage("icons/package_obj_error.gif");
            registry.put("package_error", image);
        }
        return image;
    }

    private Image findBundle()
    {
        Image image = registry.get("bundle");

        if (image == null)
        {
            image = loadImage("icons/jar_obj.png");
            registry.put("bundle", image);
        }

        return image;
    }

    private Image loadImage(String resource)
    {
        InputStream in = ProjectLabelProvider.class.getClassLoader().getResourceAsStream(
            resource);
        ImageData data = new ImageData(in);
        return new Image(parent.getDisplay(), data);
    }

}
TOP

Related Classes of org.apache.felix.sigil.eclipse.ui.internal.editors.project.ProjectLabelProvider

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.