package com.hundsun.ares.studio.jres.obj.ui;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import com.hundsun.ares.studio.biz.ARESObject;
import com.hundsun.ares.studio.biz.BizPackage;
import com.hundsun.ares.studio.biz.StandardObjField;
import com.hundsun.ares.studio.biz.constants.IBizRefType;
import com.hundsun.ares.studio.biz.core.ObjectRefTypes;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage;
import com.hundsun.ares.studio.model.reference.ReferenceInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
import com.hundsun.ares.studio.ui.editor.blocks.DisplayItem;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider;
public class StdObjFieldColumnLabelProvider extends EObjectColumnLabelProvider{
IARESProject project;
public StdObjFieldColumnLabelProvider(EStructuralFeature attribute, IARESProject project) {
super(attribute);
this.project = project;
}
@Override
public Color getBackground(Object element) {
if (element instanceof DisplayItem)
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
if (element instanceof StandardObjField) {
EStructuralFeature feature = getEStructuralFeature(element);
if (MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME.equals(feature)
|| MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION.equals(feature)) {
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
}
return null;
}
@Override
public String getText(Object element) {
EStructuralFeature feature = getEStructuralFeature(element);
if (element instanceof StandardObjField) {
StandardObjField field = (StandardObjField) element;
ARESObject obj = getObj(element);
if (obj == null)
return StringUtils.EMPTY;
if (MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME.equals(feature)) {
return obj.getChineseName();
} else if (MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION.equals(feature)) {
return obj.getDescription();
} else if (BizPackage.Literals.STANDARD_OBJ_FIELD__TYPE.equals(feature)) {
String type = field.getType();
if (StringUtils.contains(type, '.')) {
return StringUtils.substringAfterLast(type, ".");
}
}
}
return super.getText(element);
}
protected ARESObject getObj(Object element) {
if (element instanceof StandardObjField) {
StandardObjField field = (StandardObjField) element;
if (field.getType() != null) {
List<String> refTypes = ObjectRefTypes.getRefTypes();
for (String refType : refTypes) {
ReferenceInfo ref = ReferenceManager.getInstance().getFirstReferenceInfo(project, refType, field.getType(), true);
if (ref != null) {
Object refObject = ref.getObject();
if (refObject instanceof ARESObject) {
return (ARESObject) ref.getObject();
}
}
}
}
}
return null;
}
@Override
protected Diagnostic getDiagnostic(Object element) {
if (element instanceof DisplayItem) {
return null;
}
EObject owner = getOwner(element);
// ���ò���Ҫ������
if (owner == element) {
return super.getDiagnostic(element);
}
return null;
}
protected EObject getOwner(Object element) {
if (element instanceof DisplayItem) {
return ((DisplayItem) element).eObject;
}
return (EObject) element;
}
}