// ============================================================================ // // 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.resource.ImageDescriptor; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ILightweightLabelDecorator; import org.talend.commons.exception.PersistenceException; import org.talend.commons.runtime.model.repository.ERepositoryStatus; import org.talend.core.context.Context; import org.talend.core.context.RepositoryContext; import org.talend.core.model.properties.Item; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.dataquality.properties.TDQMatchRuleItem; import org.talend.mdm.repository.model.mdmproperties.MDMServerObjectItem; import org.talend.mdm.repository.plugin.RepositoryPlugin; import org.talend.mdm.repository.utils.EclipseResourceManager; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import org.talend.repository.model.IProxyRepositoryFactory; import com.amalto.workbench.exadapter.ExAdapterManager; /** * created by liusongbo on 2013-4-25 */ public class MDMLockDecorator implements ILightweightLabelDecorator { private static Logger log = Logger.getLogger(MDMLockDecorator.class); IProxyRepositoryFactory factory = CoreRuntimePlugin.getInstance().getProxyRepositoryFactory(); private boolean editableAsReadOnly; private IMDMLockDecoratorExAdapter exAdapter; public MDMLockDecorator() { isEditableAsReadOnly(); exAdapter = ExAdapterManager.getAdapter(this, IMDMLockDecoratorExAdapter.class); } private static final ImageDescriptor IMG_G_LOCK = EclipseResourceManager.getImageDescriptor(RepositoryPlugin.PLUGIN_ID, "icons/locked_green_overlay.gif"); //$NON-NLS-1$ public void decorate(Object element, IDecoration decoration) { Item item = RepositoryResourceUtil.getItemFromRepViewObj(element); if (item != null) { if (item instanceof MDMServerObjectItem || item instanceof TDQMatchRuleItem) { try { if (!factory.isLocalConnectionProvider()) { isEditableAsReadOnly(); } } catch (PersistenceException e) { log.error(e.getMessage(), e); } decorateLockImage((IRepositoryViewObject) element, decoration); } } } private void decorateLockImage(IRepositoryViewObject viewObj, IDecoration decoration) { ERepositoryStatus status = factory.getStatus(viewObj.getProperty().getItem()); if (editableAsReadOnly) { if (status == ERepositoryStatus.LOCK_BY_USER) { status = ERepositoryStatus.DEFAULT; } } if (exAdapter != null) { exAdapter.decorateLockImage(decoration, status); } else { if (status == ERepositoryStatus.LOCK_BY_USER) { decoration.addOverlay(IMG_G_LOCK, IDecoration.BOTTOM_LEFT); } else { if (status != ERepositoryStatus.LOCK_BY_OTHER) { decoration.addOverlay(null, IDecoration.BOTTOM_LEFT); } } } } private void isEditableAsReadOnly() { Context ctx = CoreRuntimePlugin.getInstance().getContext(); RepositoryContext rc = (RepositoryContext) ctx.getProperty(Context.REPOSITORY_CONTEXT_KEY); editableAsReadOnly = rc.isEditableAsReadOnly(); } // ////////////////// public void addListener(ILabelProviderListener listener) { } public void removeListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } }