com.twinsoft.convertigo.eclipse.views.projectexplorer.ViewLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for com.twinsoft.convertigo.eclipse.views.projectexplorer.ViewLabelProvider.java

Source

/*
 * Copyright (c) 2001-2011 Convertigo SA.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Affero 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see<http://www.gnu.org/licenses/>.
 *
 * $URL$
 * $Author$
 * $Revision$
 * $Date$
 */

package com.twinsoft.convertigo.eclipse.views.projectexplorer;

import java.beans.BeanInfo;

import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.model.WorkbenchLabelProvider;

import com.twinsoft.convertigo.beans.core.DatabaseObject;
import com.twinsoft.convertigo.beans.core.MySimpleBeanInfo;
import com.twinsoft.convertigo.beans.core.Project;
import com.twinsoft.convertigo.beans.core.RequestableObject;
import com.twinsoft.convertigo.eclipse.ConvertigoPlugin;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.DatabaseObjectTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.DesignDocumentFunctionTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.DesignDocumentViewTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.FolderTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.HandlersDeclarationTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.PropertyTableColumnTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.PropertyTableRowTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.PropertyTableTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.ResourceTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.TemplateTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.TraceTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.UnloadedProjectTreeObject;
import com.twinsoft.convertigo.eclipse.views.projectexplorer.model.VariableTreeObject2;
import com.twinsoft.convertigo.engine.enums.Accessibility;

class ViewLabelProvider extends LabelProvider implements IFontProvider, IColorProvider {

    private Font fontSystem;
    private Font fontModifiedDatabaseObject;
    private Font fontDetectedDatabaseObject;

    private Color colorUnloadedProject;
    private Color colorDisabledDatabaseObject;
    private Color colorInheritedDatabaseObject;
    private Color colorUnreachableDatabaseObject;
    private Color colorDetectedDatabaseObject;

    public ViewLabelProvider() {
        Device device = Display.getCurrent();

        fontSystem = device.getSystemFont();

        FontData fontData = fontSystem.getFontData()[0];

        fontDetectedDatabaseObject = new Font(device, fontData);

        FontData fontDataModified = fontSystem.getFontData()[0];
        fontDataModified.setStyle(SWT.BOLD);
        fontModifiedDatabaseObject = new Font(device, fontDataModified);

        colorUnloadedProject = new Color(device, 12, 116, 176);
        colorDisabledDatabaseObject = new Color(device, 255, 0, 0);
        colorInheritedDatabaseObject = new Color(device, 150, 150, 150);
        colorUnreachableDatabaseObject = new Color(device, 255, 140, 0);
        colorDetectedDatabaseObject = new Color(device, 192, 219, 207);
    }

    @Override
    public void dispose() {
        fontModifiedDatabaseObject.dispose();
        fontDetectedDatabaseObject.dispose();

        colorUnloadedProject.dispose();
        colorDisabledDatabaseObject.dispose();
        colorInheritedDatabaseObject.dispose();
        colorDetectedDatabaseObject.dispose();
        colorUnreachableDatabaseObject.dispose();

        super.dispose();
    }

    @Override
    public String getText(Object obj) {
        if (obj instanceof DatabaseObjectTreeObject) {
            DatabaseObject dbo = ((DatabaseObjectTreeObject) obj).getObject();
            if (dbo.isSymbolError() || (dbo instanceof Project && ((Project) dbo).undefinedGlobalSymbols)) {
                return obj.toString() + " (! undefined symbol !)";
            }
            String osname = System.getProperty("os.name");
            String version = System.getProperty("os.version");

            boolean notShownSpecialChar = osname.toLowerCase().startsWith("windows")
                    && Double.parseDouble(version) < 6.2;
            boolean isMac = osname.toLowerCase().startsWith("mac");

            if (dbo instanceof RequestableObject && !notShownSpecialChar) {
                return (((RequestableObject) dbo).getAccessibility() == Accessibility.Private ? " "
                        : (((RequestableObject) dbo).getAccessibility() == Accessibility.Hidden ? " "
                                : (isMac ? " " : "   ")))
                        + obj.toString();
            }
        }
        return obj.toString();
    }

    @Override
    public Image getImage(Object obj) {
        try {
            String iconName = "/com/twinsoft/convertigo/beans/core/images/default_color_16x16.png";
            Image image = null;

            if (obj instanceof UnloadedProjectTreeObject) {
                String imageKey = org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED;
                image = PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
            } else if (obj instanceof ResourceTreeObject) {
                ILabelProvider workbenchLabelProvider = WorkbenchLabelProvider
                        .getDecoratingWorkbenchLabelProvider();
                image = workbenchLabelProvider.getImage(obj);
            } else if (obj instanceof FolderTreeObject) {
                String imageKey = ISharedImages.IMG_OBJ_FOLDER;
                image = PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
                FolderTreeObject t_folder = (FolderTreeObject) obj;
                if (t_folder.getParent() instanceof DatabaseObjectTreeObject) {
                    DatabaseObjectTreeObject parent = (DatabaseObjectTreeObject) t_folder.getParent();
                    if (!parent.isEnabled())
                        image = ViewImageProvider.getImageFromCache(imageKey + "_disable", image, obj);
                    else if (parent.hasAncestorDisabled())
                        image = ViewImageProvider.getImageFromCache(imageKey + "_unreachable", image, obj);
                }
            } else if (obj instanceof TemplateTreeObject) {
                String imageKey = ISharedImages.IMG_OBJ_FILE;
                image = PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
            } else if (obj instanceof HandlersDeclarationTreeObject) {
                String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
                image = PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
            } else if (obj instanceof TraceTreeObject) {
                String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
                image = PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
            } else if (obj instanceof VariableTreeObject2) {
                VariableTreeObject2 variableTreeObject = (VariableTreeObject2) obj;

                iconName = MySimpleBeanInfo.getIconName(variableTreeObject.databaseObjectBeanInfo,
                        BeanInfo.ICON_COLOR_16x16);
                if (iconName == null) {
                    iconName = "/com/twinsoft/convertigo/beans/core/images/variable_color_16x16.png";
                }

                image = ViewImageProvider.getImageFromCache(iconName, variableTreeObject);
            } else if (obj instanceof DatabaseObjectTreeObject) {
                DatabaseObjectTreeObject databaseObjectTreeObject = (DatabaseObjectTreeObject) obj;

                iconName = MySimpleBeanInfo.getIconName(databaseObjectTreeObject.getObject(),
                        BeanInfo.ICON_COLOR_16x16);

                image = ViewImageProvider.getImageFromCache(iconName, databaseObjectTreeObject);
            } else if (obj instanceof PropertyTableTreeObject) {
                iconName = "/com/twinsoft/convertigo/beans/core/images/bean_property_16x16.png";
                image = ViewImageProvider.getImageFromCache(iconName, (PropertyTableTreeObject) obj);
            } else if (obj instanceof PropertyTableRowTreeObject) {
                iconName = "/com/twinsoft/convertigo/beans/core/images/bean_property_16x16.png";
                image = ViewImageProvider.getImageFromCache(iconName, (PropertyTableRowTreeObject) obj);
            } else if (obj instanceof PropertyTableColumnTreeObject) {
                iconName = "/com/twinsoft/convertigo/beans/core/images/bean_property_16x16.png";
                image = ViewImageProvider.getImageFromCache(iconName, (PropertyTableColumnTreeObject) obj);
            } else if (obj instanceof DesignDocumentViewTreeObject) {
                iconName = "/com/twinsoft/convertigo/beans/couchdb/images/view_color_16x16.png";
                image = ViewImageProvider.getImageFromCache(iconName, (DesignDocumentViewTreeObject) obj);
            } else if (obj instanceof DesignDocumentFunctionTreeObject) {
                iconName = "/com/twinsoft/convertigo/beans/couchdb/images/function_color_16x16.png";
                image = ViewImageProvider.getImageFromCache(iconName, (DesignDocumentFunctionTreeObject) obj);
            } else {
                throw new IllegalArgumentException("Unexpected tree item object");
            }

            return image;
        } catch (Exception e) {
            String message = "Error while getting tree view item image for object [" + obj.getClass().getName()
                    + "] " + obj.toString();
            ConvertigoPlugin.logException(e, message);
            String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
            if (obj instanceof TreeParent) {
                imageKey = ISharedImages.IMG_OBJ_FOLDER;
            }
            return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
        }
    }

    public Font getFont(Object element) {
        if (element instanceof DatabaseObjectTreeObject) {
            DatabaseObjectTreeObject databaseObjectTreeObject = (DatabaseObjectTreeObject) element;
            DatabaseObject databaseObject = databaseObjectTreeObject.getObject();
            if (databaseObject.hasChanged)
                return fontModifiedDatabaseObject;
            if (databaseObjectTreeObject.isDetectedObject)
                return fontDetectedDatabaseObject;
        }
        return fontSystem;
    }

    public Color getForeground(Object element) {
        if (element instanceof UnloadedProjectTreeObject) {
            return colorUnloadedProject;
        }

        if (element instanceof DatabaseObjectTreeObject) {
            DatabaseObjectTreeObject databaseObjectTreeObject = (DatabaseObjectTreeObject) element;

            if (!databaseObjectTreeObject.isEnabled())
                return colorDisabledDatabaseObject;
            if (databaseObjectTreeObject.isInherited)
                return colorInheritedDatabaseObject;
            if (databaseObjectTreeObject.hasAncestorDisabled())
                return colorUnreachableDatabaseObject;
        }
        if (element instanceof PropertyTableTreeObject) {
            PropertyTableTreeObject table = (PropertyTableTreeObject) element;
            if (table != null) {
                DatabaseObjectTreeObject databaseObjectTreeObject = (DatabaseObjectTreeObject) table
                        .getTreeObjectOwner();
                if (databaseObjectTreeObject.isInherited)
                    return colorInheritedDatabaseObject;
            }
        }
        if (element instanceof PropertyTableRowTreeObject) {
            PropertyTableTreeObject table = ((PropertyTableRowTreeObject) element).getParentTable();
            if (table != null) {
                DatabaseObjectTreeObject databaseObjectTreeObject = (DatabaseObjectTreeObject) table
                        .getTreeObjectOwner();
                if (databaseObjectTreeObject.isInherited)
                    return colorInheritedDatabaseObject;
            }
        }
        if (element instanceof PropertyTableColumnTreeObject) {
            PropertyTableTreeObject table = ((PropertyTableColumnTreeObject) element).getParentTable();
            if (table != null) {
                DatabaseObjectTreeObject databaseObjectTreeObject = (DatabaseObjectTreeObject) table
                        .getTreeObjectOwner();
                if (databaseObjectTreeObject.isInherited)
                    return colorInheritedDatabaseObject;
            }
        }
        if (element instanceof FolderTreeObject) {
            FolderTreeObject t_folder = (FolderTreeObject) element;
            return getForeground(t_folder.getParent());
        }
        return null;
    }

    public Color getBackground(Object element) {
        if (element instanceof DatabaseObjectTreeObject) {
            DatabaseObjectTreeObject databaseObjectTreeObject = (DatabaseObjectTreeObject) element;
            if (databaseObjectTreeObject.isDetectedObject)
                return colorDetectedDatabaseObject;
        }
        return null;
    }
}