sernet.gs.ui.rcp.main.ImageCache.java Source code

Java tutorial

Introduction

Here is the source code for sernet.gs.ui.rcp.main.ImageCache.java

Source

/*******************************************************************************
 * Copyright (c) 2009 Alexander Koderman <ak[at]sernet[dot]de>.
 * This program is free software: you can redistribute it and/or 
 * modify it 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.
 *     This program is distributed in the hope that it will be useful,    
 * but WITHOUT ANY WARRANTY; without even the implied warranty 
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
 * See the GNU Lesser General Public License for more details.
 *     You should have received a copy of the GNU Lesser General Public 
 * License along with this program. 
 * If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contributors:
 *     Alexander Koderman <ak[at]sernet[dot]de> - initial API and implementation
 ******************************************************************************/
package sernet.gs.ui.rcp.main;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.osgi.framework.Bundle;

import sernet.verinice.model.bsi.Anwendung;
import sernet.verinice.model.bsi.AnwendungenKategorie;
import sernet.verinice.model.bsi.BausteinUmsetzung;
import sernet.verinice.model.bsi.Client;
import sernet.verinice.model.bsi.ClientsKategorie;
import sernet.verinice.model.bsi.Gebaeude;
import sernet.verinice.model.bsi.GebaeudeKategorie;
import sernet.verinice.model.bsi.ITVerbund;
import sernet.verinice.model.bsi.MassnahmenUmsetzung;
import sernet.verinice.model.bsi.NKKategorie;
import sernet.verinice.model.bsi.NetzKomponente;
import sernet.verinice.model.bsi.Person;
import sernet.verinice.model.bsi.PersonenKategorie;
import sernet.verinice.model.bsi.RaeumeKategorie;
import sernet.verinice.model.bsi.Raum;
import sernet.verinice.model.bsi.Server;
import sernet.verinice.model.bsi.ServerKategorie;
import sernet.verinice.model.bsi.SonstIT;
import sernet.verinice.model.bsi.SonstigeITKategorie;
import sernet.verinice.model.bsi.TKKategorie;
import sernet.verinice.model.bsi.TelefonKomponente;
import sernet.verinice.model.iso27k.Asset;
import sernet.verinice.model.iso27k.AssetGroup;
import sernet.verinice.model.iso27k.Audit;
import sernet.verinice.model.iso27k.AuditGroup;
import sernet.verinice.model.iso27k.Control;
import sernet.verinice.model.iso27k.ControlGroup;
import sernet.verinice.model.iso27k.Document;
import sernet.verinice.model.iso27k.Evidence;
import sernet.verinice.model.iso27k.Exception;
import sernet.verinice.model.iso27k.Finding;
import sernet.verinice.model.iso27k.IControl;
import sernet.verinice.model.iso27k.ImportIsoGroup;
import sernet.verinice.model.iso27k.Incident;
import sernet.verinice.model.iso27k.IncidentScenario;
import sernet.verinice.model.iso27k.Interview;
import sernet.verinice.model.iso27k.Organization;
import sernet.verinice.model.iso27k.PersonIso;
import sernet.verinice.model.iso27k.Record;
import sernet.verinice.model.iso27k.Requirement;
import sernet.verinice.model.iso27k.Response;
import sernet.verinice.model.iso27k.Threat;
import sernet.verinice.model.iso27k.Vulnerability;
import sernet.verinice.model.samt.SamtTopic;

/**
 * URLs and ImageDescriptors for all images used by the application.
 * 
 * @author koderman[at]sernet[dot]de
 *
 */
public final class ImageCache {

    private static final Logger LOG = Logger.getLogger(ImageCache.class);

    // FIXME ak exception accessing read only element as normal user
    // FIXME ak secureDAO not used on all elements, ie bausteinumsetzung
    // FIXME ak exception sving element, entity exists in session with separate instance...

    public static final String ICON_DIRECTORY = "icons/";

    public static final String UNKNOWN = "generic_element.gif";

    public static final String UNKNOW_NEW = "generic_element_new.png";

    public static final String UNKNOWN_GROUP = "generic_elements.gif";

    public static final String PLUS = "plus.png";
    public static final String MINUS = "minus.png";

    public static final String UNKNOWN_GROUP_NEW = "generic_elements_new.png";

    public static final String PRODUCT_LG = "product_lg.gif";

    public static final String GEBAEUDE = "building.png";

    public static final String RAUM = "door_open.png";

    public static final String PERSON = "user_suit.png";

    public static final String SERVER = "server_database.png";

    public static final String TELEFON = "phone.png";

    public static final String NETWORK = "drive_network.png";

    public static final String SHIELD = "shield.png";

    public static final String TOOL = "24-tool-a.png";

    public static final String GROUP_ADD = "group_add.png";

    public static final String GROUP_EDIT = "group_edit.png";

    public static final String GROUP_DEL = "group_delete.png";

    public static final String EXPORT_ICON = "export.gif";

    public static final String WRENCH = "wrench.png";

    public static final String EXPLORER = "tree_explorer.gif";

    public static final String ARROW_IN = "arrow_in.png";
    public static final String ARROW_OUT = "arrow_out.png";

    public static final String BAUSTEIN_UMSETZUNG = "16-cube-blue.png";

    public static final String BAUSTEIN_UMSETZUNG_A = "baustein_a.png";
    public static final String BAUSTEIN_UMSETZUNG_B = "baustein_b.png";
    public static final String BAUSTEIN_UMSETZUNG_C = "baustein_c.png";

    public static final String MASSNAHMEN_UMSETZUNG_UNBEARBEITET = "exclamation.png";
    public static final String MASSNAHMEN_UMSETZUNG_NEIN = "16-em-cross.png";
    public static final String MASSNAHMEN_UMSETZUNG_JA = "16-em-check.png";
    public static final String MASSNAHMEN_UMSETZUNG_ENTBEHRLICH = "progress_rem.gif";
    public static final String MASSNAHMEN_UMSETZUNG_TEILWEISE = "16-clock.png";

    public static final String RISIKO_MASSNAHMEN_UMSETZUNG = "16-message-warn.png";

    public static final String BAUSTEIN = "16-cube-blue.png";

    public static final String STUFE_NONE = "stufe_none.png";
    public static final String STUFE_A = "stufe_a.png";
    public static final String STUFE_B = "stufe_b.png";
    public static final String STUFE_C = "stufe_c.png";
    public static final String STUFE_Z = "stufe_z.png";
    public static final String STUFE_W = "stufe_w.png";

    public static final String ANWENDUNG = "application_osx.png";

    public static final String CLIENT = "computer.png";

    public static final String FILTER = "filter_tsk.gif";

    public static final String REPORT = "report.png";

    public static final String DBCONNECT = "database_connect.png";

    public static final String DBCLOSE = "database_delete.png";

    public static final String VIEW_BROWSER = "tag.png";
    public static final String VIEW_MASSNAHMEN = "de.png";
    public static final String VIEW_BSIMODEL = "tree_explorer.gif";
    public static final String VIEW_ISMVIEW = "sweetie-verinice/png/16-arrow-branch-bgr.png";
    public static final String VIEW_DSMODEL = "shield.png";
    public static final String VIEW_TODO = "24-em-check.png";
    public static final String VIEW_AUDIT = "pruefplan-toolbar.png";
    public static final String VIEW_NOTE = "note.png";
    public static final String VIEW_TASK = "tasks.gif";
    public static final String VIEW_VALIDATION = "quickfix_warning_obj.gif";
    public static final String VIEW_GSMAPPING = "plugin_depend.gif";

    public static final String EXPANDALL = "expandall.gif";
    public static final String COLLAPSEALL = "collapseall.gif";

    public static final String OPEN_EDIT = "edtsrclkup_co.gif";

    public static final String CASCADE = "application_cascade.png";
    public static final String SECURITY = "16-security-lock.png";

    public static final String KONSOLIDATOR = "konsolidator.png";

    public static final String GEFAEHRDUNG = "dialog-warning.png";

    public static final String SONSTIT = "sonstit.png";

    public static final String LINKS = "link.png";

    public static final String CHART_PIE = "chart_pie.png";
    public static final String CHART_BAR = "chart_bar.png";
    public static final String CHART_CURVE = "chart_curve.png";

    public static final String VIEW_DOCUMENT = "script.png";

    public static final String AUTOBAUSTEIN = "autobaustein.png";

    public static final String RELOAD = "arrow_refresh.png";

    public static final String LINK_DOWN = "link_down.png";
    public static final String LINK_UP = "link_up.png";

    public static final String NOTE = "note.png";

    public static final String NOTE_NEW = "note-new.png";

    public static final String DELETE = "delete.png";

    public static final String EDIT = "edit.png";

    public static final String SAVE = "save.png";

    public static final String ATTACH = "attach.png";

    public static final String VIEW = "view.png";

    public static final String MIME_ARCHIVE = "mime-archive.png";
    public static final String MIME_AUDIO = "mime-audio.png";
    public static final String MIME_DOCUMENT = "mime-document.png";
    public static final String MIME_HTML = "mime-html.png";
    public static final String MIME_PDF = "mime-pdf.png";
    public static final String MIME_PRESENTATION = "mime-presentation.png";
    public static final String MIME_SPREADSHEET = "mime-spreadsheet.png";
    public static final String MIME_TEXT = "mime-text.png";
    public static final String MIME_UNKNOWN = "mime-unknown.png";
    public static final String MIME_VIDEO = "mime-video.png";
    public static final String MIME_XML = "mime-xml.png";
    public static final String MIME_IMAGE = "mime-image.png";

    public static final String GROUP_VIEW = "group.png";

    public static final String LINKED = "linked.gif";

    public static final String UNLINKED = "unlinked.gif";

    public static final String LOAD_MORE = "load-more.gif";

    public static final String UNKNOWN_FILE_TYPE = "question.gif";

    public static final String PRIORITY_LOW = "priority-4.gif";

    public static final String PRIORITY_NORMAL = "priority-2.gif";

    public static final String PRIORITY_HIGH = "priority-1.gif";

    public static final String SEARCH = "search.png";

    /* ************************************************************************************************** */
    // ISO 27000 icons - ISM Tree View:
    public static final String ISO27K_ASSET = "sweetie-verinice/png/16-asset-grey.png";
    public static final String ISO27K_ASSETGROUP = "sweetie-verinice/png/assetgroup.png";
    public static final String ISO27K_THREAT = "sweetie-verinice/png/16-lightening.png";
    public static final String ISO27K_VULNERABILITY = "sweetie-verinice/png/16-shield-blue-broken.png";
    public static final String ISO27K_INCIDENT_SCENARIO = "dialog-warning.png";
    public static final String ISO27K_INCIDENT = "sweetie-verinice/png/16-arrow-incident-red.png";
    public static final String ISO27K_REQUIREMENT = "sweetie-verinice/png/16-paper-gavel-alt.png";
    public static final String ISO27K_EXCEPTION = "sweetie-verinice/png/16-paper-excerpt-yellow.png";
    public static final String ISO27K_AUDIT = "sweetie-verinice/png/16-clipboard-audit.png";
    public static final String ISO27K_AUDITGROUP = "sweetie-verinice/png/auditgroup.png";
    public static final String ISO27K_INTERVIEW = "sweetie-verinice/png/16-clipboard-comment.png";
    public static final String ISO27K_IMRPOVEMENT_NOTE = "sweetie-verinice/png/16-clipboard-report-bar.png";
    public static final String ISO27K_EVIDENCE = "sweetie-verinice/png/16-clipboard-eye.png";
    public static final String ISO27K_RESPONSE = "sweetie-verinice/png/16-paper-arrow-green.png";
    public static final String ISO27K_DOCUMENT = "mime-document.png";
    public static final String ISO27K_RECORD = "mime-text.png";
    public static final String ISO27K_SCOPE = "tree_explorer.gif";
    public static final String ISO27K_PERSON = "user_suit.png";
    public static final String ISO27K_FOLDER = "folder.png";
    public static final String ISO27K_PROCESS = "sweetie-verinice/png/16-paper-workplan.png";
    public static final String ISO27K_IMPORT = "import.gif";

    public static final String ISO27K_CONTROL = "stufe_none.png";
    public static final String ISO27K_CONTROLGROUP = "sweetie-verinice/png/controlgroup.png";
    public static final String ISO27K_CONTROL_NO = "16-em-cross.png";
    public static final String ISO27K_CONTROL_YES = "16-em-check.png";
    public static final String ISO27K_SAMTTOPIC = "isa-topic.png";

    public static final String ISA_TOPIC = "isa-topic.png";

    public static final String REPORT_DEPOSIT = "folder_table.png";

    // ISO 27k icons - other:
    public static final String ISO27K_RISK = "sweetie-verinice/png/16-paper-calculate-percent.png";
    /* ************************************************************************************************** */

    public static final String NOALIENS = "noaliens.png";

    public static final String USERPROFILE = "userprofile.gif";

    public static final String USERPROFILE_64 = "userprofile_64.png";

    public static final String PROFILE = "profile.png";

    public static final String PROFILE_64 = "profile_64.png";
    public static final String USER_ADD = "user_add.png";
    public static final String USER_DISABLED = "user_disabled.png";

    public static final String OK_DISABLED = "ok-disabled.png";

    private static ImageCache instance;

    private static URL imagePath;

    private final Map<ImageDescriptor, Image> imageMap = new HashMap<ImageDescriptor, Image>();

    // for BSI elements: map of <element type> : <icon name> 
    private static final Map<String, String> BSI_ICON_MAP;

    // for ISO27k elements: map of <element type> : <icon name> 
    private static final Map<String, String> ISO27K_ICON_MAP;

    private static Bundle bundle;

    static {
        ISO27K_ICON_MAP = new HashMap<String, String>();

        // fill type map for iso27k icons:
        ISO27K_ICON_MAP.put(Organization.TYPE_ID, ImageCache.ISO27K_SCOPE);
        ISO27K_ICON_MAP.put(Asset.TYPE_ID, ImageCache.ISO27K_ASSET);
        ISO27K_ICON_MAP.put(AssetGroup.TYPE_ID, ImageCache.ISO27K_ASSETGROUP);
        ISO27K_ICON_MAP.put(Threat.TYPE_ID, ImageCache.ISO27K_THREAT);
        ISO27K_ICON_MAP.put(Vulnerability.TYPE_ID, ImageCache.ISO27K_VULNERABILITY);
        ISO27K_ICON_MAP.put(IncidentScenario.TYPE_ID, ImageCache.ISO27K_INCIDENT_SCENARIO);
        ISO27K_ICON_MAP.put(Incident.TYPE_ID, ImageCache.ISO27K_INCIDENT);
        ISO27K_ICON_MAP.put(Requirement.TYPE_ID, ImageCache.ISO27K_REQUIREMENT);
        ISO27K_ICON_MAP.put(Exception.TYPE_ID, ImageCache.ISO27K_EXCEPTION);
        ISO27K_ICON_MAP.put(Audit.TYPE_ID, ImageCache.ISO27K_AUDIT);
        ISO27K_ICON_MAP.put(AuditGroup.TYPE_ID, ImageCache.ISO27K_AUDITGROUP);
        ISO27K_ICON_MAP.put(Interview.TYPE_ID, ImageCache.ISO27K_INTERVIEW);
        ISO27K_ICON_MAP.put(Finding.TYPE_ID, ImageCache.ISO27K_IMRPOVEMENT_NOTE);
        ISO27K_ICON_MAP.put(Evidence.TYPE_ID, ImageCache.ISO27K_EVIDENCE);
        ISO27K_ICON_MAP.put(Document.TYPE_ID, ImageCache.ISO27K_DOCUMENT);
        ISO27K_ICON_MAP.put(PersonIso.TYPE_ID, ImageCache.ISO27K_PERSON);
        ISO27K_ICON_MAP.put(Control.TYPE_ID, ImageCache.ISO27K_CONTROL);
        ISO27K_ICON_MAP.put(ControlGroup.TYPE_ID, ImageCache.ISO27K_CONTROLGROUP);
        ISO27K_ICON_MAP.put(Response.TYPE_ID, ImageCache.ISO27K_RESPONSE);
        ISO27K_ICON_MAP.put(sernet.verinice.model.iso27k.Process.TYPE_ID, ImageCache.ISO27K_PROCESS);
        ISO27K_ICON_MAP.put(Record.TYPE_ID, ImageCache.ISO27K_RECORD);
        ISO27K_ICON_MAP.put(SamtTopic.TYPE_ID, ImageCache.ISO27K_SAMTTOPIC);
        ISO27K_ICON_MAP.put(ImportIsoGroup.TYPE_ID, ImageCache.ISO27K_IMPORT);

        BSI_ICON_MAP = new HashMap<String, String>();

        // fill type map for BSI icons:
        BSI_ICON_MAP.put(ITVerbund.TYPE_ID, ImageCache.EXPLORER);
        BSI_ICON_MAP.put(Anwendung.TYPE_ID, ImageCache.ANWENDUNG);
        BSI_ICON_MAP.put(Gebaeude.TYPE_ID, ImageCache.GEBAEUDE);
        BSI_ICON_MAP.put(Client.TYPE_ID, ImageCache.CLIENT);
        BSI_ICON_MAP.put(Server.TYPE_ID, ImageCache.SERVER);
        BSI_ICON_MAP.put(SonstIT.TYPE_ID, ImageCache.SONSTIT);
        BSI_ICON_MAP.put(TelefonKomponente.TYPE_ID, ImageCache.TELEFON);
        BSI_ICON_MAP.put(Person.TYPE_ID, ImageCache.PERSON);
        BSI_ICON_MAP.put(NetzKomponente.TYPE_ID, ImageCache.NETWORK);
        BSI_ICON_MAP.put(Raum.TYPE_ID, ImageCache.RAUM);
        BSI_ICON_MAP.put(AnwendungenKategorie.TYPE_ID, ImageCache.ANWENDUNG);
        BSI_ICON_MAP.put(GebaeudeKategorie.TYPE_ID, ImageCache.GEBAEUDE);
        BSI_ICON_MAP.put(ClientsKategorie.TYPE_ID, ImageCache.CLIENT);
        BSI_ICON_MAP.put(ServerKategorie.TYPE_ID, ImageCache.SERVER);
        BSI_ICON_MAP.put(SonstigeITKategorie.TYPE_ID, ImageCache.SONSTIT);
        BSI_ICON_MAP.put(TKKategorie.TYPE_ID, ImageCache.TELEFON);
        BSI_ICON_MAP.put(PersonenKategorie.TYPE_ID, ImageCache.PERSON);
        BSI_ICON_MAP.put(NKKategorie.TYPE_ID, ImageCache.NETWORK);
        BSI_ICON_MAP.put(RaeumeKategorie.TYPE_ID, ImageCache.RAUM);
        BSI_ICON_MAP.put(BausteinUmsetzung.TYPE_ID, ImageCache.BAUSTEIN_UMSETZUNG);
        BSI_ICON_MAP.put(MassnahmenUmsetzung.TYPE_ID, ImageCache.ISO27K_CONTROL);
    }

    private ImageCache() {
        bundle = Platform.getBundle(Activator.PLUGIN_ID);
    }

    public static ImageCache getInstance() {
        if (instance == null) {
            instance = new ImageCache();
            imagePath = Activator.getDefault().getBundle().getEntry(ICON_DIRECTORY);
        }
        return instance;
    }

    public Image getBSITypeImage(String typeId) {
        Image image = getImage(ImageCache.UNKNOWN);
        if (typeId != null && BSI_ICON_MAP.get(typeId) != null) {
            image = getImage(BSI_ICON_MAP.get(typeId));
        }
        return image;
    }

    public Image getISO27kTypeImage(String typeId) {
        Image image = getImage(ImageCache.UNKNOWN);
        if (typeId != null && ISO27K_ICON_MAP.get(typeId) != null) {
            image = getImage(ISO27K_ICON_MAP.get(typeId));
        }
        return image;
    }

    public String getBSITypeImageURL(String typeId) {
        if (typeId != null && BSI_ICON_MAP.get(typeId) != null) {
            return BSI_ICON_MAP.get(typeId);
        }
        return ImageCache.UNKNOWN;
    }

    public String getISO27kTypeImageURL(String typeId) {
        if (typeId != null && ISO27K_ICON_MAP.get(typeId) != null) {
            return ISO27K_ICON_MAP.get(typeId);
        }
        return ImageCache.UNKNOWN;
    }

    public Image getObjectTypeImage(String typeId) {
        Image image = getISO27kTypeImage(typeId);
        if (image == getImage(ImageCache.UNKNOWN)) {
            image = getBSITypeImage(typeId);
        }
        return image;
    }

    public ImageDescriptor getImageDescriptor(String url) {
        ImageDescriptor descriptor;
        try {
            descriptor = ImageDescriptor.createFromURL(new URL(imagePath, url));
        } catch (MalformedURLException e) {
            descriptor = ImageDescriptor.getMissingImageDescriptor();
        }
        return descriptor;

    }

    public Image getCustomImage(String url) {
        ImageDescriptor descriptor = null;
        if (new File(url).isAbsolute()) {
            descriptor = ImageDescriptor.createFromFile(null, url);
        } else {
            descriptor = ImageDescriptor.createFromURL(FileLocator.find(bundle, new Path(url), null));
        }
        if (descriptor.equals(ImageDescriptor.getMissingImageDescriptor())) {
            LOG.warn("Image not found: " + url);
            descriptor = ImageDescriptor
                    .createFromURL(FileLocator.find(bundle, new Path(getIconPath(UNKNOWN)), null));
        }
        return getImage(descriptor);
    }

    public Image getImage(String url) {
        ImageDescriptor descriptor = ImageDescriptor
                .createFromURL(FileLocator.find(bundle, new Path(getIconPath(url)), null));
        return getImage(descriptor);
    }

    private String getIconPath(String url) {
        return new StringBuilder(ICON_DIRECTORY).append(url).toString();
    }

    public Image getImage(ImageDescriptor id) {
        if (id == null) {
            return null;
        }
        Image image = imageMap.get(id);
        if (image == null) {
            image = createImage(id);
        }
        return image;
    }

    private Image createImage(ImageDescriptor id) {
        Image image;
        try {
            image = id.createImage(false);
            if (image == null) {
                image = getImage(ImageCache.UNKNOWN);
            }
        } catch (java.lang.Exception e) {
            LOG.error("Error while creating image: " + e.getMessage());
            if (LOG.isDebugEnabled()) {
                LOG.debug("Stacktrace: ", e);
            }
            image = getImage(ImageCache.UNKNOWN);
        }
        imageMap.put(id, image);
        return image;
    }

    public void dispose() {
        for (Image image : imageMap.values()) {
            image.dispose();
        }
        imageMap.clear();
    }

    /**
     * @param implemented
     * @return
     */
    public Image getControlImplementationImage(String implemented) {
        if (IControl.IMPLEMENTED_NOTEDITED.equals(implemented)) {
            return getImage(ImageCache.MASSNAHMEN_UMSETZUNG_UNBEARBEITET);
        }
        if (IControl.IMPLEMENTED_NA.equals(implemented)) {
            return getImage(ImageCache.MASSNAHMEN_UMSETZUNG_ENTBEHRLICH);
        }
        if (IControl.IMPLEMENTED_NO.equals(implemented)) {
            return getImage(ImageCache.MASSNAHMEN_UMSETZUNG_NEIN);
        }
        if (IControl.IMPLEMENTED_PARTLY.equals(implemented)) {
            return getImage(ImageCache.MASSNAHMEN_UMSETZUNG_TEILWEISE);
        }
        if (IControl.IMPLEMENTED_YES.equals(implemented)) {
            return getImage(ImageCache.MASSNAHMEN_UMSETZUNG_JA);
        }
        // else simply return notedited:
        return getImage(ImageCache.MASSNAHMEN_UMSETZUNG_UNBEARBEITET);
    }

    public boolean isBSITypeElement(String typeID) {
        return BSI_ICON_MAP.containsKey(typeID);
    }

    public boolean isISO27kTypeElement(String typeID) {
        return ISO27K_ICON_MAP.containsKey(typeID);
    }
}