/** * Դ�������ƣ�PropertyValueColumnLabelProvider.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.graphics.Image; import com.hundsun.ares.studio.ui.editor.extend.user.IUserExtendedPropertyDescriptor; import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider; import com.hundsun.ares.studio.ui.editor.viewers.IEStructuralFeatureProvider; /** * * �ṩ�˶� {@link IEMLabelProviderExtension}��֧�� * @author gongyf * */ public class PropertyValueColumnLabelProvider extends EObjectColumnLabelProvider { /** * @param attribute */ public PropertyValueColumnLabelProvider() { super(new IEStructuralFeatureProvider(){ @Override public EStructuralFeature getFeature(Object element) { if (element instanceof ExtensibleModelEditingEntry) { ExtensibleModelEditingEntry entry = (ExtensibleModelEditingEntry) element; return entry.getDescriptor().getStructuralFeature(); } return null; }}); } @Override protected Diagnostic getDiagnostic(Object element) { if (getDiagnosticProvider() != null) { if (element instanceof ExtensibleModelEditingEntry) { ExtensibleModelEditingEntry entry = (ExtensibleModelEditingEntry) element; EObject owner = getOwner(element); if (owner != null) { // ����map���͵����⴦��һ�������û��Զ�����չ IExtensibleModelPropertyDescriptor descriptor = entry.getDescriptor(); if (descriptor instanceof IMapExtensibleModelPropertyDescriptor) { return getDiagnosticProvider().getDiagnostic(owner, getEStructuralFeature(element), ((IMapExtensibleModelPropertyDescriptor) descriptor).getKey()); } else { return getDiagnosticProvider().getDiagnostic(owner, getEStructuralFeature(element)); } } } } return null; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.viewers.BaseEObjectColumnLabelProvider#getOwner(java.lang.Object) */ @Override protected EObject getOwner(Object element) { if (element instanceof ExtensibleModelEditingEntry) { ExtensibleModelEditingEntry entry = (ExtensibleModelEditingEntry) element; String key = entry.getGroup().getEditingSupport().getKey(); return entry.getGroup().getRoot().getModel().getData2().get(key); } return null; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.viewers.BaseEObjectColumnLabelProvider#getText(java.lang.Object) */ @Override public String getText(Object element) { if (element instanceof ExtensibleModelEditingEntry) { ExtensibleModelEditingEntry entry = (ExtensibleModelEditingEntry) element; EObject owner = getOwner(element); if (owner != null) { IExtensibleModelPropertyDescriptor descriptor = entry.getDescriptor(); if (descriptor instanceof IUserExtendedPropertyDescriptor) { // �µĴ���ʽ����ȫ��element����descriptor���� ILabelProvider labelProvider = descriptor.getLabelProvider(); if (labelProvider != null) { return labelProvider.getText(entry.getGroup().getRoot().getModel()); } } else { EStructuralFeature feature = descriptor.getStructuralFeature(); ILabelProvider labelProvider = descriptor.getLabelProvider(); if (labelProvider instanceof IEMLabelProviderExtension) { ((IEMLabelProviderExtension) labelProvider).setExtensibleModel(entry.getGroup().getRoot().getModel()); } 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; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.viewers.EObjectColumnLabelProvider#doGetImage(java.lang.Object) */ @Override protected Image doGetImage(Object element) { if (element instanceof ExtensibleModelEditingEntry) { ExtensibleModelEditingEntry entry = (ExtensibleModelEditingEntry) element; EObject owner = getOwner(element); if (owner != null) { IExtensibleModelPropertyDescriptor descriptor = entry.getDescriptor(); if (descriptor instanceof IUserExtendedPropertyDescriptor) { // �µĴ���ʽ����ȫ��element����descriptor���� ILabelProvider labelProvider = descriptor.getLabelProvider(); if (labelProvider != null) { return labelProvider.getImage(entry.getGroup().getRoot().getModel()); } } else { EStructuralFeature feature = descriptor.getStructuralFeature(); ILabelProvider labelProvider = descriptor.getLabelProvider(); if (labelProvider instanceof IEMLabelProviderExtension) { ((IEMLabelProviderExtension) labelProvider).setExtensibleModel(entry.getGroup().getRoot().getModel()); } 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; } }