// ============================================================================ // // Copyright (C) 2006-2012 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.designer.core.ui.editor.update; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.swt.graphics.Image; import org.talend.commons.ui.runtime.image.ECoreImage; import org.talend.commons.ui.runtime.image.EImage; import org.talend.commons.ui.runtime.image.IImage; import org.talend.commons.ui.runtime.image.ImageProvider; import org.talend.commons.ui.runtime.image.ImageUtils.ICON_SIZE; import org.talend.commons.ui.runtime.image.OverlayImage.EPosition; import org.talend.core.model.components.IComponent; import org.talend.core.model.components.IComponentsFactory; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.update.EUpdateItemType; import org.talend.core.model.update.EUpdateResult; import org.talend.core.model.update.RepositoryUpdateManager; import org.talend.core.model.update.UpdatesConstants; import org.talend.core.ui.images.CoreImageProvider; import org.talend.core.ui.images.OverlayImageProvider; import org.talend.designer.core.i18n.Messages; import org.talend.designer.core.model.utils.emf.talendfile.NodeType; import org.talend.designer.core.ui.editor.nodes.Node; import org.talend.repository.model.ComponentsFactoryProvider; /** * ggu class global comment. Detailled comment */ public class UpdateLabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0) { ECoreImage warnOverlay = ECoreImage.WARN_OVERLAY; EPosition position = EPosition.BOTTOM_RIGHT; if (element instanceof Job) { IImage image; Job job = (Job) element; if (job.isJoblet()) { image = ECoreImage.JOBLET_ICON; } else { image = ECoreImage.PROCESS_ICON; } if (checkElementForUpdate(element)) { return OverlayImageProvider.getImageForOverlay(image, warnOverlay, position); } return ImageProvider.getImage(image); } else if (element instanceof Category) { Category category = (Category) element; EUpdateItemType type = category.getType(); if (type != null) { Image image = null; switch (type) { case JOB_PROPERTY_EXTRA: case JOB_PROPERTY_STATS_LOGS: case JOB_PROPERTY_HEADERFOOTER: image = ImageProvider.getImage(ECoreImage.PROCESS_ICON); break; case CONTEXT: case CONTEXT_GROUP: case JOBLET_CONTEXT: image = ImageProvider.getImage(ECoreImage.CONTEXT_ICON); break; case NODE_PROPERTY: case NODE_SCHEMA: case NODE_QUERY: case NODE_SAP_IDOC: case NODE_SAP_FUNCTION: case NODE_VALIDATION_RULE: case JOBLET_SCHEMA: case JOBLET_RENAMED: case RELOAD: image = getImageFromNode(category.getNode()); break; default: // return ImageProvider.getImage(ECoreImage.TALEND_PICTO); } if (image != null && checkElementForUpdate(element)) { return OverlayImageProvider.getImageForOverlay(image, warnOverlay, position); } return image; } } else if (element instanceof Item) { Item item = (Item) element; IImage image = EImage.EMPTY; switch (item.getResultObject().getUpdateType()) { case NODE_QUERY: image = ECoreImage.METADATA_QUERY_ICON; break; case NODE_SCHEMA: case JOBLET_SCHEMA: image = ECoreImage.METADATA_TABLE_ICON; break; case NODE_PROPERTY: case NODE_VALIDATION_RULE: case JOB_PROPERTY_EXTRA: case JOB_PROPERTY_STATS_LOGS: ERepositoryObjectType type = RepositoryUpdateManager.getTypeFromSource(item.getRemark()); if (type != null) { image = CoreImageProvider.getIcon(type); } case JOBLET_RENAMED: case RELOAD: // return ImageProvider.getImage(ECoreImage.TALEND_PICTO); case CONTEXT: case CONTEXT_GROUP: case JOBLET_CONTEXT: // return ImageProvider.getImage(ECoreImage.CONTEXT_ICON); default: } if (checkElementForUpdate(element)) { return OverlayImageProvider.getImageForOverlay(image, warnOverlay, position); } return ImageProvider.getImage(image); } } return null; } public String getColumnText(Object element, int columnIndex) { boolean isJob = element instanceof Job; boolean isCategory = element instanceof Category; switch (columnIndex) { case 0: if (isJob) { String name = ((Job) element).getName(); return name == null ? UpdatesConstants.EMPTY : name; } else if (isCategory) { return ((Category) element).getName(); } else if (element instanceof Item) { return ((Item) element).getProperty(); } break; case 1: if (isJob || isCategory) { return UpdatesConstants.SEGMENT_LINE; } else if (element instanceof Item) { Item item = (Item) element; if (isBuilInMode(item) && !item.getParent().getParent().isReadOnlyProcess()) { return EUpdateResult.BUIL_IN.getDisplayName(); } return item.getOperation().getDisplayName(); } break; case 2: if (isJob || isCategory) { if (isJob && ((Job) element).isReadOnlyProcess()) { return Messages.getString("ProcessUpdateManager.ReadOnlyProcessUpdateWarningMessages"); //$NON-NLS-1$ } return UpdatesConstants.SEGMENT_LINE; } else if (element instanceof Item) { Item item = (Item) element; if (isBuilInMode(item)) { return UpdatesConstants.EMPTY; } return item.getRemark(); } break; default: } return UpdatesConstants.EMPTY; } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } private boolean isBuilInMode(Item item) { if (item != null && !item.isChecked() && (item.getOperation() == EUpdateResult.UPDATE || item.getOperation() == EUpdateResult.DELETE)) { return true; } return false; } private Image getImageFromNode(Object node) { if (node != null) { if (node instanceof Node) { return CoreImageProvider.getComponentIcon(((Node) node).getComponent(), ICON_SIZE.ICON_16); } else if (node instanceof NodeType) { NodeType nodeType = (NodeType) node; nodeType.getComponentName(); String componentName = nodeType.getComponentName(); IComponentsFactory instance = ComponentsFactoryProvider.getInstance(); if (instance != null && componentName != null) { IComponent component = instance.get(componentName); if (component != null) { return CoreImageProvider.getComponentIcon(component, ICON_SIZE.ICON_16); } } } } return ImageProvider.getImage(ECoreImage.TALEND_PICTO); } /** * * ggu Comment method "checkElementForUpdate". * * if there is a update item which have changed to built-in mode, return true. */ private boolean checkElementForUpdate(Object element) { if (element == null) { return false; } if (element instanceof Item) { return isBuilInMode((Item) element); } else if (element instanceof Category) { Category category = (Category) element; for (Item item : category.getItems()) { boolean flag = checkElementForUpdate(item); if (flag) { return true; } } } else if (element instanceof Job) { Job job = (Job) element; for (Category category : job.getCategories()) { boolean flag = checkElementForUpdate(category); if (flag) { return true; } } } return false; } }