org.jcryptool.fileexplorer.views.factories.ImageFactory.java Source code

Java tutorial

Introduction

Here is the source code for org.jcryptool.fileexplorer.views.factories.ImageFactory.java

Source

// -----BEGIN DISCLAIMER-----
/*******************************************************************************
 * Copyright (c) 2008 JCrypTool Team and Contributors
 *
 * 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
 *******************************************************************************/
// -----END DISCLAIMER-----
package org.jcryptool.fileexplorer.views.factories;

import java.util.regex.Pattern;

import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.program.Program;
import org.jcryptool.core.logging.utils.LogUtil;
import org.jcryptool.fileexplorer.FileExplorerPlugin;

/**
 * Determines the images for folders and files. The default file icon is selected if one is
 * available.
 *
 * @author Dominik Schadow
 * @version 0.5.0
 */
public class ImageFactory {
    private static final String ICON_FILE = "icons/file.png"; //$NON-NLS-1$
    private static final String ICON_FILE_BINARY = "icons/file_binary.png"; //$NON-NLS-1$
    private static final String ICON_FOLDER = "icons/folder.png"; //$NON-NLS-1$
    private static final String ICON_FOLDER_NOACCESS = "icons/folder_noaccess.png"; //$NON-NLS-1$
    private static final String ICON_DEVICE = "icons/device.png"; //$NON-NLS-1$
    private static final String ICON_DEVICE_NOACCESS = "icons/device_noaccess.png"; //$NON-NLS-1$
    private static final String ICON_DEVICE_CD_DVD = "icons/device_cd_dvd.png"; //$NON-NLS-1$
    private static final String ICON_DEVICE_CD_DVD_NOACCESS = "icons/device_cd_dvd_noaccess.png"; //$NON-NLS-1$

    public static ImageDescriptor getIconForFile(IFileStore file) {
        try {
            if (Pattern.matches("[a-zA-Z]:\\\\", file.toLocalFile(EFS.NONE, null).getAbsolutePath())) { //$NON-NLS-1$
                // CD or DVD
                if (!file.toLocalFile(EFS.NONE, null).canWrite()) {
                    if (file.toLocalFile(EFS.NONE, null).canRead()) {
                        return FileExplorerPlugin.getImageDescriptor(ImageFactory.ICON_DEVICE_CD_DVD);
                    }
                    return FileExplorerPlugin.getImageDescriptor(ImageFactory.ICON_DEVICE_CD_DVD_NOACCESS);
                }
                // HDD
                if (!file.toLocalFile(EFS.NONE, null).canRead()) {
                    return FileExplorerPlugin.getImageDescriptor(ImageFactory.ICON_DEVICE_NOACCESS);
                }
                return FileExplorerPlugin.getImageDescriptor(ImageFactory.ICON_DEVICE);
            }
        } catch (CoreException ex) {
            LogUtil.logError(FileExplorerPlugin.PLUGIN_ID, ex);
        }

        // handle directories
        if (file.fetchInfo().isDirectory()) {
            return FileExplorerPlugin.getImageDescriptor(ImageFactory.ICON_FOLDER);
        }

        // handled directories here are unaccessible
        try {
            if (file.toLocalFile(EFS.NONE, null).isDirectory()) {
                return FileExplorerPlugin.getImageDescriptor(ImageFactory.ICON_FOLDER_NOACCESS);
            }
        } catch (CoreException ex) {
            LogUtil.logError(FileExplorerPlugin.PLUGIN_ID, ex);
        }

        // handle by extension
        int dot = file.getName().indexOf('.');
        if (dot > 0) {
            String extension = file.getName().substring(dot);
            Program program = Program.findProgram(extension);
            ImageData imageData = (program == null ? null : program.getImageData());
            // handle if a program defines an icon
            if (imageData != null) {
                return ImageDescriptor.createFromImageData(imageData);
            }
            // handle the bin extension for the hex editor
            if (extension.equalsIgnoreCase(".bin")) { //$NON-NLS-1$
                return FileExplorerPlugin.getImageDescriptor(ImageFactory.ICON_FILE_BINARY);
            }
        }

        // assign a default icon
        return FileExplorerPlugin.getImageDescriptor(ImageFactory.ICON_FILE);
    }
}