tern.eclipse.jface.images.TernImagesRegistry.java Source code

Java tutorial

Introduction

Here is the source code for tern.eclipse.jface.images.TernImagesRegistry.java

Source

/**
 *  Copyright (c) 2013-2016 Angelo ZERR.
 *  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:
 *  Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
 */
package tern.eclipse.jface.images;

import java.io.File;

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 tern.metadata.TernModuleMetadata;
import tern.server.ITernModule;
import tern.server.protocol.completions.TernCompletionItem;
import tern.server.protocol.completions.TernTypeHelper;
import tern.utils.StringUtils;

/**
 * Image registry for tern images.
 *
 */
public class TernImagesRegistry {

    // ES5
    public static final String IMG_FN = "tern.eclipse.jface.IMG_FN";
    public static final String IMG_ARRAY = "tern.eclipse.jface.IMG_ARRAY";
    public static final String IMG_NUMBER = "tern.eclipse.jface.IMG_NUMBER";
    public static final String IMG_STRING = "tern.eclipse.jface.IMG_STRING";
    public static final String IMG_BOOLEAN = "tern.eclipse.jface.IMG_BOOLEAN";
    public static final String IMG_UNKNOWN = "tern.eclipse.jface.IMG_UNKNOWN";

    // ES6
    public static final String IMG_CLASS = "tern.eclipse.jface.IMG_CLASS";
    public static final String IMG_IMPORT = "tern.eclipse.jface.IMG_IMPORT";

    static {
        registerImageDescriptor(IMG_FN, ImageDescriptor.createFromFile(TernImagesRegistry.class, "fn.gif"));
        registerImageDescriptor(getOvr(IMG_FN),
                ImageDescriptor.createFromFile(TernImagesRegistry.class, "fn_ovr.gif"));
        registerImageDescriptor(IMG_ARRAY, ImageDescriptor.createFromFile(TernImagesRegistry.class, "array.gif"));
        registerImageDescriptor(getOvr(IMG_ARRAY),
                ImageDescriptor.createFromFile(TernImagesRegistry.class, "array_ovr.gif"));
        registerImageDescriptor(IMG_NUMBER, ImageDescriptor.createFromFile(TernImagesRegistry.class, "number.gif"));
        registerImageDescriptor(getOvr(IMG_NUMBER),
                ImageDescriptor.createFromFile(TernImagesRegistry.class, "number_ovr.gif"));
        registerImageDescriptor(IMG_STRING, ImageDescriptor.createFromFile(TernImagesRegistry.class, "string.gif"));
        registerImageDescriptor(getOvr(IMG_STRING),
                ImageDescriptor.createFromFile(TernImagesRegistry.class, "string_ovr.gif"));
        registerImageDescriptor(IMG_BOOLEAN,
                ImageDescriptor.createFromFile(TernImagesRegistry.class, "boolean.gif"));
        registerImageDescriptor(getOvr(IMG_BOOLEAN),
                ImageDescriptor.createFromFile(TernImagesRegistry.class, "boolean_ovr.gif"));
        registerImageDescriptor(IMG_UNKNOWN,
                ImageDescriptor.createFromFile(TernImagesRegistry.class, "unknown.gif"));
        registerImageDescriptor(getOvr(IMG_UNKNOWN),
                ImageDescriptor.createFromFile(TernImagesRegistry.class, "unknown_ovr.gif"));
        registerImageDescriptor(IMG_CLASS, ImageDescriptor.createFromFile(TernImagesRegistry.class, "class.gif"));
        registerImageDescriptor(IMG_IMPORT, ImageDescriptor.createFromFile(TernImagesRegistry.class, "import.png"));
    }

    private TernImagesRegistry() {
    }

    /**
     * Returns the image from the image registry with the given key.
     * 
     * @param key
     *            of the image
     * @return the image from the image registry with the given key.
     */
    public static Image getImage(String key) {
        ImageRegistry imageRegistry = JFaceResources.getImageRegistry();
        return imageRegistry.get(key);
    }

    /**
     * Returns the image descriptor from the image registry with the given key.
     * 
     * @param key
     *            of the image
     * @return the image descriptor from the image registry with the given key.
     */
    public static ImageDescriptor getImageDescriptor(String key) {
        ImageRegistry imageRegistry = JFaceResources.getImageRegistry();
        return imageRegistry.getDescriptor(key);
    }

    public static String getJSType(String jsType, boolean isFunction, boolean isArray,
            boolean returnNullIfUnknown) {
        if (isFunction) {
            return TernImagesRegistry.IMG_FN;
        }
        if (isArray) {
            return TernImagesRegistry.IMG_ARRAY;
        }
        if (TernTypeHelper.isStringType(jsType)) {
            return TernImagesRegistry.IMG_STRING;
        } else if (TernTypeHelper.isNumberType(jsType)) {
            return TernImagesRegistry.IMG_NUMBER;
        } else if (TernTypeHelper.isBoolType(jsType)) {
            return TernImagesRegistry.IMG_BOOLEAN;
        }
        if (TernTypeHelper.isFunctionRefType(jsType)) {
            return TernImagesRegistry.IMG_FN;
        }
        if (returnNullIfUnknown) {
            return null;
        }
        return TernImagesRegistry.IMG_UNKNOWN;
    }

    public static Image getImage(String jsType, boolean isFunction, boolean isArray, boolean returnNullIfUnknown) {
        String key = getJSType(jsType, isFunction, isArray, returnNullIfUnknown);
        return key != null ? getImage(key) : null;
    }

    public static String getJSType(TernCompletionItem item, boolean returnNullIfUnknown) {
        return getJSType(item.getJsType(), item.isFunction(), item.isArray(), returnNullIfUnknown);
    }

    public static Image getImage(TernCompletionItem item, boolean returnNullIfUnknown) {
        String key = getJSType(item, returnNullIfUnknown);
        return key != null ? getImage(key) : null;
    }

    public static ImageDescriptor getImageDescriptor(TernCompletionItem item, boolean returnNullIfUnknown) {
        String key = getJSType(item, returnNullIfUnknown);
        return key != null ? getImageDescriptor(key) : null;
    }

    private static void registerImageDescriptor(String key, ImageDescriptor descriptor) {
        ImageRegistry imageRegistry = JFaceResources.getImageRegistry();
        imageRegistry.put(key, descriptor);
    }

    static String getOvr(String typeKey) {
        return new StringBuilder(typeKey).append("_ovr").toString();
    }

    public static Image getImage(ITernModule module) {
        TernModuleMetadata metadata = module.getMetadata();
        if (metadata == null) {
            return null;
        }
        File icon = metadata.getFileIcon();
        if (icon == null) {
            return null;
        }
        String key = icon.getPath();
        Image image = getImage(key);
        if (image != null) {
            return image;
        }
        ImageDescriptor desc = ImageDescriptor.createFromFile(null, icon.getPath());
        registerImageDescriptor(key, desc);
        return TernImagesRegistry.getImage(key);
    }

    public static Image getImage(String jsType, ITernModule module) {
        boolean hasJSType = !StringUtils.isEmpty(jsType);
        boolean hasOrigin = module != null;
        if (!hasJSType) {
            // JS type is unknown, try to retrieve the image of the origin tern
            // module
            Image originImage = hasOrigin ? getImage(module) : null;
            return originImage != null ? originImage : TernImagesRegistry.getImage(TernImagesRegistry.IMG_UNKNOWN);
        }
        // here JS Type is known, try to retrieve the image of the origin tern
        // module
        if (!hasOrigin) {
            // None origin, returns the JS type
            return TernImagesRegistry.getImage(jsType);
        }
        // origin + js type is known, try to merge
        String imageKey = getImageKey(jsType, module.getOrigin());
        Image image = TernImagesRegistry.getImage(imageKey);
        if (image != null) {
            return image;
        }
        ImageDescriptor originImageDescriptor = getImageDescriptor(module);
        if (originImageDescriptor == null) {
            return TernImagesRegistry.getImage(jsType);
        }
        TernCompositeImageDescriptor desc = new TernCompositeImageDescriptor(originImageDescriptor, jsType);
        TernImagesRegistry.registerImageDescriptor(imageKey, desc);
        return TernImagesRegistry.getImage(imageKey);
    }

    public static ImageDescriptor getImageDescriptor(ITernModule module) {
        TernModuleMetadata metadata = module.getMetadata();
        if (metadata == null) {
            return null;
        }
        File icon = metadata.getFileIcon();
        if (icon == null) {
            return null;
        }
        String key = icon.getPath();
        ImageDescriptor desc = getImageDescriptor(key);
        if (desc != null) {
            return desc;
        }
        desc = ImageDescriptor.createFromFile(null, icon.getPath());
        registerImageDescriptor(key, desc);
        return desc;
    }

    private static String getImageKey(String jsType, String origin) {
        return jsType + "_" + origin;
    }

    public static ImageDescriptor getImageDescriptor(String jsType, ITernModule module) {
        boolean hasJSType = !StringUtils.isEmpty(jsType);
        boolean hasOrigin = module != null;
        if (!hasJSType) {
            // JS type is unknown, try to retrieve the image of the origin tern
            // module
            ImageDescriptor originImage = hasOrigin ? getImageDescriptor(module) : null;
            return originImage != null ? originImage
                    : TernImagesRegistry.getImageDescriptor(TernImagesRegistry.IMG_UNKNOWN);
        }
        // here JS Type is known, try to retrieve the image of the origin tern
        // module
        if (!hasOrigin) {
            // None origin, returns the JS type
            return TernImagesRegistry.getImageDescriptor(jsType);
        }
        // origin + js type is known, try to merge
        String imageKey = getImageKey(jsType, module.getOrigin());
        ImageDescriptor image = TernImagesRegistry.getImageDescriptor(imageKey);
        if (image != null) {
            return image;
        }
        ImageDescriptor originImageDescriptor = getImageDescriptor(module);
        if (originImageDescriptor == null) {
            return TernImagesRegistry.getImageDescriptor(TernImagesRegistry.IMG_UNKNOWN);
        }
        TernCompositeImageDescriptor desc = new TernCompositeImageDescriptor(originImageDescriptor, jsType);
        TernImagesRegistry.registerImageDescriptor(imageKey, desc);
        return TernImagesRegistry.getImageDescriptor(imageKey);
    }

}