package com.hundsun.ares.studio.jres.metadata.ui.viewer; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.Assert; import org.eclipse.emf.common.util.EMap; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Display; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.model.ExtensibleModel; import com.hundsun.ares.studio.jres.model.metadata.MenuItem; import com.hundsun.ares.studio.jres.model.metadata.util.MenuUtils; import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelColumnLabelProvider; import com.hundsun.ares.studio.ui.editor.extend.IEMLabelProviderExtension; import com.hundsun.ares.studio.ui.editor.extend.IExtensibleModelEditingSupport; import com.hundsun.ares.studio.ui.editor.extend.IExtensibleModelPropertyDescriptor; import com.hundsun.ares.studio.ui.editor.extend.IMapExtensibleModelPropertyDescriptor; public class MenuExtensibleModelColumnLabelProvider extends ExtensibleModelColumnLabelProvider { IExtensibleModelEditingSupport editingSupport; IExtensibleModelPropertyDescriptor descriptor; IARESResource resource; public MenuExtensibleModelColumnLabelProvider( IExtensibleModelEditingSupport editingSupport, IExtensibleModelPropertyDescriptor descriptor, IARESResource resource) { super(editingSupport, descriptor , resource); this.editingSupport = editingSupport; this.descriptor = descriptor; this.resource = resource; } @Override public Color getBackground(Object element) { if(element instanceof MenuItem){ MenuItem item = (MenuItem)element; if(StringUtils.isNotBlank(item.getRefId())){ return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); } } return super.getBackground(element); } @Override public String getText(Object element) { Object item = MenuUtils.resolve((MenuItem) element, resource).first; if(item == null){ item = element; } EObject owner = getOwner(item); if (owner != null) { EStructuralFeature feature = descriptor.getStructuralFeature(); ILabelProvider labelProvider = descriptor.getLabelProvider(); if (labelProvider instanceof IEMLabelProviderExtension) { ((IEMLabelProviderExtension) labelProvider).setExtensibleModel((ExtensibleModel) element); } Object value = owner.eGet(feature); if (descriptor instanceof IMapExtensibleModelPropertyDescriptor) { Assert.isTrue(value instanceof EMap<?, ?>); value = ((EMap<?, ?>) value).get(((IMapExtensibleModelPropertyDescriptor) descriptor).getKey()); } return labelProvider.getText(value); } return StringUtils.EMPTY; } }