// ============================================================================ // // 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.mdm.repository.ui.navigator; import org.apache.log4j.Logger; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IMemento; import org.eclipse.ui.navigator.ICommonContentExtensionSite; import org.eclipse.ui.navigator.ICommonLabelProvider; import org.eclipse.ui.navigator.IDescriptionProvider; import org.talend.core.GlobalServiceRegister; import org.talend.core.context.Context; import org.talend.core.context.RepositoryContext; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.Property; import org.talend.core.model.properties.User; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.model.repository.LockInfo; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.core.services.IGITProviderService; import org.talend.mdm.repository.core.IRepositoryNodeConfiguration; import org.talend.mdm.repository.core.IRepositoryNodeLabelProvider; import org.talend.mdm.repository.core.service.IMDMSVNProviderService; import org.talend.mdm.repository.extension.RepositoryNodeConfigurationManager; import org.talend.mdm.repository.i18n.Messages; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import org.talend.repository.model.IProxyRepositoryFactory; /** * DOC hbhong class global comment. Detailled comment <br/> * */ public class MDMRepositoryLabelProvider extends ColumnLabelProvider implements ILabelProvider, IDescriptionProvider, IColorProvider, IFontProvider, ICommonLabelProvider, IStyledLabelProvider { private static Logger log = Logger.getLogger(MDMRepositoryLabelProvider.class); private IProxyRepositoryFactory factory = CoreRuntimePlugin.getInstance().getProxyRepositoryFactory(); private IMDMSVNProviderService svnProviderService = null; private Boolean isInSvnMode = null; private IGITProviderService gitProviderService; private Boolean isInGitMode; @Override public void addListener(ILabelProviderListener listener) { } @Override public void dispose() { } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void removeListener(ILabelProviderListener listener) { } public String getDescription(Object element) { IRepositoryNodeLabelProvider provider = getLabelProvider(element); if (provider != null) { return provider.getDescription(element); } return null; } @Override public Image getImage(Object element) { IRepositoryNodeLabelProvider provider = getLabelProvider(element); if (provider != null) { return provider.getImage(element); } return null; } @Override public String getText(Object element) { IRepositoryNodeLabelProvider provider = getLabelProvider(element); if (provider != null) { return provider.getText(element); } return element.toString(); } protected IRepositoryNodeLabelProvider getLabelProvider(Object element) { if (element instanceof IRepositoryViewObject) { IRepositoryViewObject viewObject = (IRepositoryViewObject) element; viewObject = RepositoryResourceUtil.assertViewObject(viewObject); Property property = viewObject.getProperty(); if (property != null) { Item item = property.getItem(); IRepositoryNodeConfiguration conf = RepositoryNodeConfigurationManager.getConfiguration(item); if (conf != null) { return conf.getLabelProvider(); } } } return null; } @Override public Color getForeground(Object element) { IRepositoryNodeLabelProvider provider = getLabelProvider(element); if (provider != null) { return provider.getForeground(element); } return null; } @Override public Font getFont(Object element) { IRepositoryNodeLabelProvider provider = getLabelProvider(element); if (provider != null) { return provider.getFont(element); } return null; } @Override public Color getBackground(Object element) { return null; } @Override public String getToolTipText(Object element) { if (isInSvnMode()) { IRepositoryViewObject viewObj = (IRepositoryViewObject) element; if (getSvnProviderService() != null) { String toolTip = getSvnProviderService().getLockInfo(viewObj); return toolTip; } } if (isInGitMode()) { return getLockInfo(element); } return null; } private String getLockInfo(Object element) { User currentLoginUser = ((RepositoryContext) CoreRuntimePlugin.getInstance().getContext() .getProperty(Context.REPOSITORY_CONTEXT_KEY)).getUser(); String currentLogin = null; if (currentLoginUser != null) { currentLogin = currentLoginUser.getLogin(); } IRepositoryViewObject viewObj = (IRepositoryViewObject) element; Item item = viewObj.getProperty().getItem(); if (item != null) { LockInfo lockInfo = ProxyRepositoryFactory.getInstance().getLockInfo(item); if (!lockInfo.getUser().equals(currentLogin)) { String login = lockInfo.getUser(); String application = lockInfo.getApplication(); if (login != null && !"".equals(login)) {//$NON-NLS-1$ String content = Messages.bind(Messages.MDMRepositoryLabelProvider_lockinfo, login, application); return content; } } } return null; } private boolean isInSvnMode() { if (isInSvnMode == null) { IMDMSVNProviderService service = getSvnProviderService(); if (service != null && service.isProjectInSvnMode()) { isInSvnMode = Boolean.TRUE; } if (isInSvnMode == null) { isInSvnMode = Boolean.FALSE; } } return isInSvnMode.booleanValue(); } private boolean isInGitMode() { if (isInGitMode == null) { IGITProviderService service = getGitProviderService(); if (service != null && service.isProjectInGitMode()) { isInGitMode = Boolean.TRUE; } if (isInGitMode == null) { isInGitMode = Boolean.FALSE; } } return isInGitMode.booleanValue(); } private IMDMSVNProviderService getSvnProviderService() { if (svnProviderService == null) { try { if (GlobalServiceRegister.getDefault().isServiceRegistered(IMDMSVNProviderService.class)) { svnProviderService = (IMDMSVNProviderService) GlobalServiceRegister.getDefault() .getService(IMDMSVNProviderService.class); } } catch (Exception e) { log.error(e.getMessage(), e); } } return svnProviderService; } private IGITProviderService getGitProviderService() { if (gitProviderService == null) { try { if (GlobalServiceRegister.getDefault().isServiceRegistered(IGITProviderService.class)) { gitProviderService = (IGITProviderService) GlobalServiceRegister.getDefault() .getService(IGITProviderService.class); } } catch (Exception e) { log.error(e.getMessage(), e); } } return gitProviderService; } public void restoreState(IMemento aMemento) { } public void saveState(IMemento aMemento) { } public void init(ICommonContentExtensionSite aConfig) { } public StyledString getStyledText(Object element) { return new StyledString(getText(element)); } }