/**
* Դ�������ƣ�MetadataColumnLabelProvider.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.metadata.ui
* ����˵����Ԫ�����û��༭��UIչ����ع���
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.metadata.ui.viewer;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
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.jres.model.metadata.MetadataItem;
import com.hundsun.ares.studio.jres.model.metadata.util.CircularReferenceException;
import com.hundsun.ares.studio.jres.model.metadata.util.MetadataUtil;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider;
import com.hundsun.ares.studio.ui.editor.viewers.IEStructuralFeatureProvider;
/**
* ����������״̬����ʾ���õ�����ֵ
* @author gongyf
*
*/
public class MetadataColumnLabelProvider extends EObjectColumnLabelProvider {
private IARESResource resource;
/**
* @param attribute
* @param resource
*/
public MetadataColumnLabelProvider(EAttribute attribute,
IARESResource resource) {
super(attribute);
this.resource = resource;
}
/**
* @param attributeProvider
* @param resource
*/
public MetadataColumnLabelProvider(
IEStructuralFeatureProvider attributeProvider,
IARESResource resource) {
super(attributeProvider);
this.resource = resource;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.viewers.EObjectColumnLabelProvider#getBackground(java.lang.Object)
*/
@Override
public Color getBackground(Object element) {
// EObject owner = getOwner(element);
// if (owner != element) {
// return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
// }
if ( MetadataUtil.isUseRefFeature(resource) ) {
if (element instanceof MetadataItem) {
MetadataItem item = (MetadataItem)element;
if (MetadataUtil.isReferencingItem(item) && MetadataUtil.isReferencableFeature(item, getEStructuralFeature(element))) {
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
}
}
// if (resource.isReadOnly()) {
// return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
// }
return super.getBackground(element);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.viewers.EObjectColumnLabelProvider#getDiagnostic(java.lang.Object)
*/
@Override
protected Diagnostic getDiagnostic(Object element) {
EObject owner = getOwner(element);
// ���ò���Ҫ������
if (owner == element) {
return super.getDiagnostic(element);
}
return null;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.viewers.EObjectColumnLabelProvider#getOwner(java.lang.Object)
*/
@Override
protected EObject getOwner(Object element) {
EObject owner = super.getOwner(element);
if ( MetadataUtil.isUseRefFeature(resource) ) {
// �����Ŀ��������������
if (owner instanceof MetadataItem) {
// �������õĴ���
MetadataItem item = (MetadataItem)owner;
if (MetadataUtil.isReferencingItem(item) && MetadataUtil.isReferencableFeature(item, getEStructuralFeature(element))) {
MetadataItem entity = null;
try {
entity = MetadataUtil.defaultResolve(item, resource).first;
} catch (CircularReferenceException e) {
}
return entity == null ? item : entity;
}
}
}
return owner;
}
}