at.medevit.icons.core.Icon.java Source code

Java tutorial

Introduction

Here is the source code for at.medevit.icons.core.Icon.java

Source

/*******************************************************************************
 * Copyright (c) 2012 Marco Descher.
 * 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:
 *     Marco Descher - initial API and implementation
 ******************************************************************************/
package at.medevit.icons.core;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.graphics.Image;

import at.medevit.icons.Activator;
import at.medevit.icons.urihandler.IconURLConnection;

public enum Icon {
    // @formatter:off
    PART_MAIN, PART_ALPHA, PART_BETA, COMMAND_ADD, COMMAND_EDIT, COMMAND_DELETE, DIALOG_FUN, ICON_EMPTY, ICON_SAMPLE, ICON_SAVE_EDIT, OVERLAY_ERROR;
    // @formatter:on

    private Icon() {
    }

    /**
     * Returns an image. Clients do not need to dispose the image, it will be
     * disposed automatically.
     * 
     * @return an {@link Image}
     */
    public Image getImage(IconSize is) {
        Image image = JFaceResources.getImageRegistry().get(this.name());
        if (image == null) {
            addIconImageDescriptor(this.name(), is);
            image = JFaceResources.getImageRegistry().get(this.name());
        }
        return image;
    }

    /**
     * @return {@link ImageDescriptor} for the current image
     */
    public ImageDescriptor getImageDescriptor(IconSize is) {
        ImageDescriptor id = null;
        id = JFaceResources.getImageRegistry().getDescriptor(this.name());
        if (id == null) {
            addIconImageDescriptor(this.name(), is);
            id = JFaceResources.getImageRegistry().getDescriptor(this.name());
        }
        return id;
    }

    /**
     * @return a string to be embedded as iconURI, see beta plugin process for
     *         an example
     */
    public String getIconURI() {
        return "icon://" + name();
    }

    /**
     * Get the Icon as {@link InputStream}; used by the
     * {@link IconURLConnection}
     * 
     * @param is
     * @return <code>null</code> if any error in resolving the image
     * @throws IOException
     */
    public InputStream getImageAsInputStream(IconSize is) throws IOException {
        InputStream ret = null;

        ResourceBundle iconsetProperties = ResourceBundle.getBundle("iconset");
        String fileName = iconsetProperties.getString(this.name());
        URL url = FileLocator.find(Activator.getDefault().getBundle(),
                new Path("icons/" + is.name + "/" + fileName), null);
        ret = url.openConnection().getInputStream();

        return ret;
    }

    /**
     * Add an image descriptor for a specific key and {@link IconSize} to the
     * global {@link ImageRegistry}
     * 
     * @param name
     * @param is
     * @return <code>true</code> if successfully added, else <code>false</code>
     */
    private static boolean addIconImageDescriptor(String name, IconSize is) {
        try {
            ResourceBundle iconsetProperties = ResourceBundle.getBundle("iconset");
            String fileName = iconsetProperties.getString(name);
            URL fileLocation = FileLocator.find(Activator.getDefault().getBundle(),
                    new Path("icons/" + is.name + "/" + fileName), null);
            ImageDescriptor id = ImageDescriptor.createFromURL(fileLocation);
            JFaceResources.getImageRegistry().put(name, id);
        } catch (MissingResourceException | IllegalArgumentException e) {
            return false;
        }
        return true;
    }
}