/** * Դ�������ƣ�ExtensibleModelColumnLabelProvider.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.ui * ����˵����$desc * ����ĵ��� * ���ߣ���Ҷ�� */ package com.hundsun.ares.studio.ui.editor.extend; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.Assert; import org.eclipse.emf.common.util.Diagnostic; 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.graphics.Image; 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.ui.editor.blocks.DisplayItem; import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider; /** * * �ṩ�˶� {@link IEMLabelProviderExtension}��֧�� * @author gongyf * */ public class ExtensibleModelColumnLabelProvider extends EObjectColumnLabelProvider { IExtensibleModelEditingSupport editingSupport; IExtensibleModelPropertyDescriptor descriptor; private IARESResource resource; /** * @param editingSupport * @param descriptior */ public ExtensibleModelColumnLabelProvider( IExtensibleModelEditingSupport editingSupport, IExtensibleModelPropertyDescriptor descriptor , IARESResource resource) { super(descriptor.getStructuralFeature()); this.editingSupport = editingSupport; this.descriptor = descriptor; this.resource = resource; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.viewers.BaseEObjectColumnLabelProvider#getOwner(java.lang.Object) */ @Override protected EObject getOwner(Object element) { // �ӿڲ����б��У�����ڵ�չ������ӽڵ㣬���Ͳ���ExtensibleModel if (element instanceof ExtensibleModel) { ExtensibleModel model = (ExtensibleModel) element; return model.getData2().get(editingSupport.getKey()); } return null; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.viewers.BaseEObjectColumnLabelProvider#getText(java.lang.Object) */ @Override public String getText(Object element) { EObject owner = getOwner(element); if (owner != null) { EStructuralFeature feature = descriptor.getStructuralFeature(); ILabelProvider labelProvider = descriptor.getLabelProvider(); if (labelProvider instanceof IEMLabelProviderExtension) { ((IEMLabelProviderExtension) labelProvider).setExtensibleModel((ExtensibleModel) element); } if(feature!=null){ 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; } else { ILabelProvider labelProvider = descriptor.getLabelProvider(); // �������չ��(XML��ǩ֮�࣬�Ƕ�̬���㣬����ȥ��չmap��ȡֵ��) // ���⣬Ϊʲôֻ��ʵ��IEMLabelProviderExtension�ŷ���ֵ�� ��Ϊ��Ԫ���ݴ�������Ϣ������£�������� // Ԫ��Ҳ������getOwnerΪ�ն�ִ�е������֧��������ʱ�����labelprovider��ʾ���֡� if (labelProvider instanceof IEMLabelProviderExtension && (element instanceof ExtensibleModel)) { ((IEMLabelProviderExtension) labelProvider).setExtensibleModel((ExtensibleModel) element); String text = labelProvider.getText(element); if (text != null) return text; }else if (labelProvider instanceof IEMLabelProviderExtension && (element instanceof DisplayItem)) { if(((DisplayItem)element).eObject instanceof ExtensibleModel){ ((IEMLabelProviderExtension) labelProvider).setExtensibleModel((ExtensibleModel) ((DisplayItem)element).eObject); String text = labelProvider.getText(element); if (text != null) return text; } } } return StringUtils.EMPTY; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.viewers.EObjectColumnLabelProvider#doGetImage(java.lang.Object) */ @Override protected Image doGetImage(Object element) { EObject owner = getOwner(element); if (owner != null) { EStructuralFeature feature = descriptor.getStructuralFeature(); if (feature == null) return null; 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.getImage(value); } return null; } @Override protected Diagnostic getDiagnostic(Object element) { if (getDiagnosticProvider() != null) { EObject owner = getOwner(element); EStructuralFeature feature = descriptor.getStructuralFeature(); if (descriptor instanceof IMapExtensibleModelPropertyDescriptor) { return getDiagnosticProvider().getDiagnostic(owner, feature, ((IMapExtensibleModelPropertyDescriptor) descriptor).getKey()); } else { return getDiagnosticProvider().getDiagnostic(owner, feature); } } return super.getDiagnostic(element); } @Override public String getToolTipText(Object element) { String toolTip = super.getToolTipText(element); if(StringUtils.isBlank(toolTip) && descriptor instanceof LongTextMapEMPropertyDescriptor){ return getText(element); } return toolTip; } /* (non-Javadoc) * @see com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider#getBackground(java.lang.Object) */ @Override public Color getBackground(Object element) { ILabelProvider labelProvider = descriptor.getLabelProvider(); if (labelProvider instanceof IEMLabelProviderExtension && (element instanceof DisplayItem)) { if (((DisplayItem) element).eObject instanceof ExtensibleModel) { return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); } } return super.getBackground(element); } }