// ============================================================================
//
// 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.core.impl;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.navigator.CommonViewer;
import org.talend.core.model.properties.FolderType;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.Property;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.repository.core.IRepositoryNodeLabelProvider;
import org.talend.mdm.repository.model.mdmproperties.ContainerItem;
import org.talend.mdm.repository.model.mdmproperties.MDMServerObjectItem;
import org.talend.mdm.repository.model.mdmserverobject.MDMServerObject;
import org.talend.mdm.repository.plugin.RepositoryPlugin;
import org.talend.mdm.repository.ui.navigator.MDMRepositoryView;
import org.talend.mdm.repository.utils.EclipseResourceManager;
import org.talend.mdm.repository.utils.RepositoryResourceUtil;
/**
* DOC hbhong class global comment. Detailled comment <br/>
*
*/
public abstract class AbstractLabelProvider implements IRepositoryNodeLabelProvider {
private static final Image FOLDER_IMG = EclipseResourceManager.getImage(RepositoryPlugin.PLUGIN_ID, "icons/folder.gif"); //$NON-NLS-1$
private static Image IMG_CLOSE_FOLDER = EclipseResourceManager.getImage(RepositoryPlugin.PLUGIN_ID,
"icons/directory-close.png"); //$NON-NLS-1$
private static Image IMG_OPEN_FOLDER = EclipseResourceManager
.getImage(RepositoryPlugin.PLUGIN_ID, "icons/directory-open.png"); //$NON-NLS-1$
private static final Color COLOR_GREY = EclipseResourceManager.getColor(SWT.COLOR_DARK_GRAY);
private static final Color COLOR_BLACK = EclipseResourceManager.getColor(SWT.COLOR_BLACK);
private static FontData defaultFontData = JFaceResources.getDefaultFont().getFontData()[0];
public static final Font FONT_BOLD = EclipseResourceManager.getFont(defaultFontData.getName(), defaultFontData.getHeight(),
SWT.BOLD);
public String getText(Object element) {
Item item = getItem(element);
if (item != null) {
return getText(item);
}
return ""; //$NON-NLS-1$
}
protected Item getItem(Object element) {
if (element instanceof IRepositoryViewObject) {
Item item = RepositoryResourceUtil.getItemFromRepViewObj(element);
return item;
}
return null;
}
public Image getImage(Object element) {
Item item = getItem(element);
if (item != null) {
if (item instanceof ContainerItem) {
switch (((ContainerItem) item).getType().getValue()) {
case FolderType.SYSTEM_FOLDER:
return getCategoryImage(item);
case FolderType.FOLDER:
case FolderType.STABLE_SYSTEM_FOLDER: {
if (isExpanded(element)) {
return IMG_OPEN_FOLDER;
}
return IMG_CLOSE_FOLDER;
}
}
}
}
return null;
}
private boolean isExpanded(Object element) {
CommonViewer commonViewer = MDMRepositoryView.show().getCommonViewer();
boolean expanded = commonViewer.getExpandedState(element);
return expanded;
}
public String getDescription(Object anElement) {
if (anElement instanceof IRepositoryViewObject) {
Property property = ((IRepositoryViewObject) anElement).getProperty();
Item item = property.getItem();
if (item instanceof MDMServerObjectItem) {
String label = getServerObjectItemText(item);
if (label != null) {
return label;
}
}
String label = property.getLabel();
return label;
}
return null;
}
protected String getText(Item item) {
if (item instanceof ContainerItem) {
return getConainerItemText(item);
}
if (item instanceof MDMServerObjectItem) {
String label = getServerObjectItemText(item);
if (label != null) {
return label;
}
}
// default
String label = item.getProperty().getLabel();
if (label != null) {
return label;
}
return ""; //$NON-NLS-1$
}
protected String getConainerItemText(Item item) {
return ((ContainerItem) item).getLabel();
}
public Color getForeground(Object element) {
if (isSystemServerObjectItem(element)) {
return COLOR_GREY;
}
return COLOR_BLACK;
}
public Font getFont(Object element) {
if (isSystemServerObjectItem(element)
|| RepositoryResourceUtil.hasContainerItem(element, FolderType.SYSTEM_FOLDER_LITERAL)) {
return FONT_BOLD;
}
return null;
}
protected boolean isSystemServerObjectItem(Object element) {
Item item = getItem(element);
if (item != null) {
if (item instanceof ContainerItem && ((ContainerItem) item).getType() == FolderType.STABLE_SYSTEM_FOLDER_LITERAL) {
return true;
}
if (item instanceof MDMServerObjectItem) {
MDMServerObject serverObject = ((MDMServerObjectItem) item).getMDMServerObject();
if (serverObject != null) {
return serverObject.isSystem();
}
}
}
return false;
}
protected String getServerObjectItemText(Item item) {
item = RepositoryResourceUtil.assertItem(item);
MDMServerObject serverObject = ((MDMServerObjectItem) item).getMDMServerObject();
if (serverObject != null) {
return serverObject.getName();
}
return null;
}
public abstract Image getCategoryImage(Item item);
public static Image getFolderImg() {
return FOLDER_IMG;
}
}