org.talend.repository.viewer.label.AbstractRepoViewLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.talend.repository.viewer.label.AbstractRepoViewLabelProvider.java

Source

// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.repository.viewer.label;

import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.navigator.ICommonContentExtensionSite;
import org.eclipse.ui.navigator.ICommonLabelProvider;
import org.talend.commons.runtime.model.repository.ERepositoryStatus;
import org.talend.commons.ui.runtime.image.ECoreImage;
import org.talend.commons.ui.runtime.image.IImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.commons.ui.runtime.image.OverlayImageProvider;
import org.talend.commons.ui.utils.image.ColorUtils;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.PluginChecker;
import org.talend.core.model.properties.Property;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.Folder;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.model.repository.RepositoryNodeProviderRegistryReader;
import org.talend.core.model.utils.RepositoryManagerHelper;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.core.ui.IReferencedProjectService;
import org.talend.core.ui.branding.IBrandingService;
import org.talend.core.ui.images.RepositoryImageProvider;
import org.talend.repository.ProjectManager;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.IRepositoryNode.ENodeType;
import org.talend.repository.model.RepositoryNode;
import org.talend.repository.ui.views.IRepositoryView;

/**
 * DOC ggu class global comment. Detailled comment
 */
public abstract class AbstractRepoViewLabelProvider extends LabelProvider
        implements ICommonLabelProvider, IFontProvider, IColorProvider {

    private static final String SPACE = " "; //$NON-NLS-1$

    private static final RGB COLOR_LOCKED = new RGB(200, 0, 0);

    @Override
    public String getDescription(Object anElement) {
        return null;
    }

    @Override
    public void restoreState(IMemento aMemento) {

    }

    @Override
    public void saveState(IMemento aMemento) {

    }

    @Override
    public void init(ICommonContentExtensionSite aConfig) {

    }

    @Override
    public Color getForeground(Object element) {
        RepositoryNode node = (RepositoryNode) element;
        if (node != null) {
            IRepositoryViewObject object = node.getObject();
            if (object != null) {
                ERepositoryStatus repositoryStatus = object.getRepositoryStatus();
                if (repositoryStatus == ERepositoryStatus.LOCK_BY_OTHER) {
                    return ColorUtils.getCacheColor(COLOR_LOCKED);
                }
            }
        }
        return null;
    }

    @Override
    public Color getBackground(Object element) {
        return null;
    }

    @Override
    public Font getFont(Object element) {
        if (element instanceof RepositoryNode) {
            RepositoryNode node = (RepositoryNode) element;
            switch (node.getType()) {
            case SYSTEM_FOLDER:
                return JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
            case STABLE_SYSTEM_FOLDER:
            default:
            }
        }
        return JFaceResources.getFontRegistry().defaultFont();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
     */
    @Override
    public Image getImage(Object element) {
        if (element instanceof IRepositoryViewObject) {
            return getElementImage((IRepositoryViewObject) element);
        } else if (element instanceof RepositoryNode) {
            return getElementImage((RepositoryNode) element);
        }
        return super.getImage(element);
    }

    protected Image getElementImage(IRepositoryViewObject object) {
        Image img = null;

        final ERepositoryObjectType itemType = object.getRepositoryObjectType();
        object.getProperty(); // this will force an update of the item.

        if (itemType != null) {
            img = RepositoryNodeProviderRegistryReader.getInstance().getImage(itemType);
            if (img == null) {
                IImage icon = getIcon(itemType);
                if (icon != null) {
                    img = ImageProvider.getImage(icon);
                }
            }
            if (img != null) {
                final ERepositoryStatus repositoryStatus = object.getRepositoryStatus();
                if (repositoryStatus != null) {
                    img = OverlayImageProvider.getImageWithStatus(img, repositoryStatus);

                    final ERepositoryStatus informationStatus = object.getInformationStatus();
                    if (informationStatus != null) {
                        img = OverlayImageProvider.getImageWithStatus(img, informationStatus);
                    }
                }
            }
        }
        return img;
    }

    protected Image getElementImage(RepositoryNode node) {
        IImage icon = null;
        switch (node.getType()) {
        case STABLE_SYSTEM_FOLDER:
        case SYSTEM_FOLDER:
            icon = node.getIcon();
            if (icon == null) {
                ERepositoryObjectType contentType = node.getContentType();
                if (contentType != null) {
                    Image image = RepositoryNodeProviderRegistryReader.getInstance().getImage(contentType);
                    if (image != null) {
                        return image;
                    }
                }
                icon = getIcon(node.getContentType());
            }
            break;
        case SIMPLE_FOLDER:
            IRepositoryView view = RepositoryManagerHelper.findRepositoryView();
            if (view != null) {
                icon = (view.getExpandedState(node) ? ECoreImage.FOLDER_OPEN_ICON : ECoreImage.FOLDER_CLOSE_ICON);
            } else {
                icon = ECoreImage.FOLDER_OPEN_ICON;
            }
            break;
        default:
            IRepositoryViewObject object = node.getObject();
            if (object != null) {
                return getElementImage(object);
            }
            icon = getIcon(node.getContentType());
            break;
        }
        if (icon != null) {
            return ImageProvider.getImage(icon);
        }

        return null;
    }

    protected IImage getIcon(ERepositoryObjectType itemType) {
        if (itemType != null) {
            return RepositoryImageProvider.getIcon(itemType);
        }
        return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
     */
    @Override
    public String getText(Object element) {
        if (element instanceof IRepositoryViewObject) {
            return getElementText((IRepositoryViewObject) element);
        } else if (element instanceof Property) {
            return getElementText((Property) element);
        } else if (element instanceof RepositoryNode) {
            return getElementText((RepositoryNode) element);
        }
        return super.getText(element);
    }

    protected String getElementText(IRepositoryViewObject object) {
        boolean isDeleted = object.isDeleted();
        boolean isModified = object.isModified();
        boolean isFolder = (object instanceof Folder);
        boolean inRef = !ProjectManager.getInstance().getCurrentProject().getLabel()
                .equals(object.getProjectLabel());

        return getText(object.getLabel(), object.getVersion(), object.getPath(), object.getProjectLabel(),
                isDeleted, isModified, isFolder, inRef);
    }

    protected String getElementText(Property property) {
        boolean isDeleted = false;
        boolean isModified = false;
        boolean inRef = false;
        boolean isFolder = false;

        // nodes in the recycle bin
        IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
        if (factory.getStatus(property.getItem()) == ERepositoryStatus.DELETED) {
            isDeleted = true;
        }
        // PTODO SML [FOLDERS++] temp code
        if (ERepositoryObjectType.getItemType(property.getItem()) == ERepositoryObjectType.FOLDER) {
            isFolder = true;
        }
        //
        isModified = factory.isModified(property);
        inRef = !ProjectManager.getInstance().isInCurrentMainProject(property);

        return getText(property.getLabel(), property.getVersion(), property.getItem().getState().getPath(), null,
                isDeleted, isModified, isFolder, inRef);
    }

    protected String getElementText(RepositoryNode node) {
        if (node.getType() == ENodeType.REPOSITORY_ELEMENT || node.getType() == ENodeType.SIMPLE_FOLDER) {
            boolean isDeleted = false;
            boolean isModified = false;
            boolean inRef = false;
            boolean isFolder = false;
            IRepositoryViewObject object = node.getObject();

            isModified = object.isModified();
            isDeleted = object.isDeleted();

            org.talend.core.model.properties.Project mainProject = ProjectManager.getInstance().getCurrentProject()
                    .getEmfProject();
            inRef = !mainProject.getLabel().equals(object.getProjectLabel());
            if (node.getType() == ENodeType.SIMPLE_FOLDER) {
                isFolder = true;
            }
            return getText(object.getLabel(), object.getVersion(), object.getPath(), object.getProjectLabel(),
                    isDeleted, isModified, isFolder, inRef);
        } else {
            return getText(node.getLabel(), null, null, null, false, false, false, false);
        }
    }

    protected final boolean isAllowChengeVersion() {
        IBrandingService brandingService = (IBrandingService) GlobalServiceRegister.getDefault()
                .getService(IBrandingService.class);
        return brandingService.getBrandingConfiguration().isAllowChengeVersion();
    }

    protected final boolean isRefMerged() {
        if (PluginChecker.isRefProjectLoaded()) {
            IReferencedProjectService service = (IReferencedProjectService) GlobalServiceRegister.getDefault()
                    .getService(IReferencedProjectService.class);
            if (service != null && service.isMergeRefProject()) {
                return true;
            }
        }
        return false;
    }

    protected String getText(String label, String version, String path, String projectLabel, boolean isDeleted,
            boolean isModified, boolean isFolder, boolean inRef) {
        Assert.isNotNull(label);

        StringBuffer text = new StringBuffer(50);

        if (isModified) {
            text.append('>');
            text.append(SPACE);
        }

        text.append(label);

        if (isAllowChengeVersion() && !isFolder && version != null) {
            text.append(SPACE);
            text.append(version);
        }
        if (isRefMerged() && inRef && projectLabel != null) {
            text.append(SPACE);
            text.append('(');
            text.append('@');
            text.append(projectLabel);
            text.append(')');
        }
        if (!isFolder && isDeleted && path != null && path.length() > 0) {
            text.append(SPACE);
            text.append('(');
            text.append(path);
            text.append(')');
        }
        return text.toString();
    }
}