package com.hundsun.ares.studio.biz.provider; import java.util.List; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EcorePackage; 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.biz.ARESObject; import com.hundsun.ares.studio.biz.BizPackage; import com.hundsun.ares.studio.biz.Parameter; import com.hundsun.ares.studio.biz.StandardObjField; import com.hundsun.ares.studio.biz.constants.IBizRefType; import com.hundsun.ares.studio.biz.core.BizUtil; import com.hundsun.ares.studio.biz.core.ObjectRefTypes; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.internal.core.ARESProjectProperty; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType; import com.hundsun.ares.studio.jres.model.metadata.BusinessDataType; import com.hundsun.ares.studio.jres.model.metadata.DictionaryItem; import com.hundsun.ares.studio.jres.model.metadata.DictionaryType; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.jres.model.metadata.StandardDataType; import com.hundsun.ares.studio.jres.model.metadata.StandardField; import com.hundsun.ares.studio.jres.model.metadata.TypeDefaultValue; import com.hundsun.ares.studio.jres.model.metadata.util.MetadataServiceProvider; 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.extend.CheckBoxLabelProvider; import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider; /** * ������ColumnLabelProvider * @author gongyf * @author sundl ��FlowParma���������� */ public class ParameterColumnLabelProvider extends EObjectColumnLabelProvider { private static Image PRAMETER_SINGLE_ICON = BizUI.image("full/obj16/parameter.png"); private static Image PRAMETER_SINGLE_ICON2 = BizUI.image("full/obj16/parameter2.png"); private static Image PRAMETER_OBJ_ICON = BizUI.image("full/obj16/obj.gif"); private static Image PARAMETER_GROUP_ICON = BizUI.image("full/obj16/parameterGroup.ico"); private static Image PARAMETER_COMPONENT_ICON = BizUI.image("full/obj16/component.png"); private static Color COLOR_GRAY = Display.getDefault().getSystemColor(SWT.COLOR_GRAY); private CheckBoxLabelProvider provider = new CheckBoxLabelProvider(); protected IARESProject project; protected IARESResource resource; public String dataType = MetadataServiceProvider.C_TYPE; public ParameterColumnLabelProvider(IARESProject project, EStructuralFeature attribute) { super(attribute); this.project = project; } /** * @param attribute * @param project */ public ParameterColumnLabelProvider(IARESResource resource, EStructuralFeature attribute) { super(attribute); this.resource = resource; this.project = resource.getARESProject(); } @Override public Color getBackground(Object element) { // DisplayItem �����ڽӿ�����ʾ�Ķ���������ӽڵ㣬����չʾ�ã��κ����Զ���ֻ���� if (element instanceof DisplayItem) { return COLOR_GRAY; } Parameter p = (Parameter) getOwner(element); EStructuralFeature feature = getEStructuralFeature(element); switch (p.getParamType()) { case STD_FIELD: if (BizPackage.Literals.PARAMETER__NAME.equals(feature) || BizPackage.Literals.PARAMETER__REAL_TYPE.equals(feature) || BizPackage.Literals.PARAMETER__TYPE.equals(feature) || BizPackage.Literals.PARAMETER__DESCRIPTION.equals(feature)) { return COLOR_GRAY; } break; case NON_STD_FIELD: if (feature.equals(BizPackage.Literals.PARAMETER__REAL_TYPE)) return COLOR_GRAY; break; case OBJECT: boolean hasStdObjectList = BizUtil.hasStdObjList(project); if (hasStdObjectList && (BizPackage.Literals.PARAMETER__TYPE.equals(feature) ||MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION.equals(feature) || MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME.equals(feature))) { return COLOR_GRAY; } if (BizPackage.Literals.PARAMETER__NAME.equals(feature) || BizPackage.Literals.PARAMETER__REAL_TYPE.equals(feature) || BizPackage.Literals.PARAMETER__DESCRIPTION.equals(feature) || BizPackage.Literals.PARAMETER__DEFAULT_VALUE.equals(feature)) { return COLOR_GRAY; } break; case COMPONENT: // ��� if (BizPackage.Literals.PARAMETER__NAME.equals(feature) || BizPackage.Literals.PARAMETER__REAL_TYPE.equals(feature) || BizPackage.Literals.PARAMETER__DESCRIPTION.equals(feature) || BizPackage.Literals.PARAMETER__DEFAULT_VALUE.equals(feature)) { return COLOR_GRAY; } break; case PARAM_GROUP: // �����飬ֻ�༭�����������������������ɱ༭ if (BizPackage.Literals.PARAMETER__NAME.equals(feature) || BizPackage.Literals.PARAMETER__ID.equals(feature) || BizPackage.Literals.PARAMETER__REAL_TYPE.equals(feature) || BizPackage.Literals.PARAMETER__DESCRIPTION.equals(feature) || BizPackage.Literals.PARAMETER__DEFAULT_VALUE.equals(feature)) { return COLOR_GRAY; } break; default: break; } if (resource != null && resource.isReadOnly()) { return COLOR_GRAY; } return super.getBackground(element); } @Override protected Image doGetImage(Object element) { Parameter p = (Parameter) getOwner(element); EStructuralFeature feature = getEStructuralFeature(element); if (feature.equals(BizPackage.Literals.PARAMETER__FLAGS)) { switch (p.getParamType()) { case STD_FIELD: return PRAMETER_SINGLE_ICON; case NON_STD_FIELD: return PRAMETER_SINGLE_ICON2; case OBJECT: return PRAMETER_OBJ_ICON; case PARAM_GROUP: return PARAMETER_GROUP_ICON; case COMPONENT: return PARAMETER_COMPONENT_ICON; default: return PRAMETER_SINGLE_ICON; } } return super.doGetImage(element); } @Override public String getText(Object element) { Parameter p = (Parameter) getOwner(element); EStructuralFeature feature = getEStructuralFeature(element); if (feature.getEType().equals(EcorePackage.Literals.EBOOLEAN) || feature.getEType().equals(EcorePackage.Literals.EBOOLEAN_OBJECT)) { return StringUtils.EMPTY; } // ��ͬ�������ͷֿ����� switch (p.getParamType()) { case NON_STD_FIELD: // �DZ�׼�ֶβ�������ʵ����Ҳ���ɱ༭����ʾ��Ӧ��ҵ���������͵����õ����Ե�ֵ������Ŀ���������ã� if (feature.equals(BizPackage.Literals.PARAMETER__REAL_TYPE)) { String bizType = p.getType(); if (StringUtils.isEmpty(bizType)) break; ReferenceInfo ref = ReferenceManager.getInstance().getFirstReferenceInfo(project, IMetadataRefType.BizType, bizType, true); if (ref != null) { BusinessDataType bizDataType = (BusinessDataType) ref.getObject(); if (bizDataType == null) break; String stdType = bizDataType.getStdType(); if (StringUtils.isEmpty(stdType)) break; ReferenceInfo stdTypeRef = ReferenceManager.getInstance().getFirstReferenceInfo(project, IMetadataRefType.StdType, stdType, true); if (stdTypeRef == null) break; StandardDataType stdDataType = (StandardDataType) stdTypeRef.getObject(); return stdDataType.getData().get(dataType); } }else if (BizPackage.Literals.PARAMETER__DEFAULT_VALUE.equals(feature)) { return getNonStdParameterDefaultValue(p.getDefaultValue() , p); } break; case STD_FIELD: if (BizPackage.Literals.PARAMETER__NAME.equals(feature) || BizPackage.Literals.PARAMETER__REAL_TYPE.equals(feature) || BizPackage.Literals.PARAMETER__TYPE.equals(feature) || BizPackage.Literals.PARAMETER__DESCRIPTION.equals(feature) || BizPackage.Literals.PARAMETER__DEFAULT_VALUE.equals(feature)) { ReferenceInfo referenceInfo = ReferenceManager.getInstance().getFirstReferenceInfo(project,IMetadataRefType.StdField,p.getId(),true); if (referenceInfo != null) { StandardField field = (StandardField) referenceInfo.getObject(); if (field == null ) { return StringUtils.EMPTY; } if (BizPackage.Literals.PARAMETER__NAME.equals(feature)) { return field.getChineseName(); } else if (BizPackage.Literals.PARAMETER__REAL_TYPE.equals(feature)) {//һ�㲻���ڴ����,���Ҫȡ��ʵ���Ϳ��Լ̳д�������ʵ�� try { StandardDataType sdt = MetadataServiceProvider.getStandardDataTypeOfStdFieldByName(project, field.getName()); if (sdt != null) { return sdt.getData().get(dataType); } } catch (Exception e) { //e.printStackTrace(); } } else if (BizPackage.Literals.PARAMETER__TYPE.equals(feature)) { return field.getDataType(); } else if (BizPackage.Literals.PARAMETER__DESCRIPTION.equals(feature)) { StringBuffer text = new StringBuffer(); String dictTypeStr = field.getDictionaryType(); if(StringUtils.isNotBlank(dictTypeStr)){ ReferenceInfo dictReferenceInfo = ReferenceManager.getInstance().getFirstReferenceInfo(project,IMetadataRefType.Dict,dictTypeStr,true); if(dictReferenceInfo != null){ DictionaryType objDictionaryType = (DictionaryType) dictReferenceInfo.getObject(); if(objDictionaryType!=null){ for(DictionaryItem item : objDictionaryType.getItems()){ String value = StringUtils.defaultString(item.getValue()); String chineseName = StringUtils.defaultString(item.getChineseName()); text.append(value); text.append(":"); text.append(chineseName); text.append(" "); } } } } if(StringUtils.isNotBlank(text.toString()) && StringUtils.isNotBlank(field.getDescription())){ text.append("\r\n"); text.append(field.getDescription()); } return StringUtils.defaultString(StringUtils.defaultIfBlank(text.toString(), field.getDescription())) ; }else if (BizPackage.Literals.PARAMETER__DEFAULT_VALUE.equals(feature)) { return getParameterDefaultValue(p.getDefaultValue() , field); } } } break; case OBJECT: // ����ж����׼�ֶ��б���Դ if (BizUtil.hasStdObjList(project)) { String refId = p.getId(); ReferenceInfo ref = ReferenceManager.getInstance().getFirstReferenceInfo(project, IBizRefType.Std_Obj, refId, true); if (ref == null) break; StandardObjField field = (StandardObjField) ref.getObject(); String objId = field.getType(); ARESObject obj = BizUtil.getObject(objId, project); if (feature.equals(BizPackage.Literals.PARAMETER__TYPE)) { if (StringUtils.contains(objId, '.')) return StringUtils.substringAfterLast(objId, "."); } else if (feature.equals(BizPackage.Literals.PARAMETER__NAME)) { return obj == null ? StringUtils.EMPTY : obj.getChineseName(); } else if (feature.equals(BizPackage.Literals.PARAMETER__DESCRIPTION)) { return obj == null ? StringUtils.EMPTY : obj.getDescription(); } } else { String objId = p.getType(); ReferenceInfo ref = null;//ReferenceManager.getInstance().getFirstReferenceInfo(project, IBizRefType.Object, objId, true); List<String> refTypes = ObjectRefTypes.getRefTypes(); for (String refType : refTypes) { ref = ReferenceManager.getInstance().getFirstReferenceInfo(project, refType, objId, true); if(ref != null){ break; } } // 2012-10-18 sundl �������Ͳ�����ʾ��ʱ��ֻ��ʾ���һ�������IJ��� if (feature.equals(BizPackage.Literals.PARAMETER__TYPE)) { String type = super.getText(element); if (StringUtils.indexOf(type, '.') != -1) return StringUtils.substringAfterLast(type, "."); } else if (feature.equals(BizPackage.Literals.PARAMETER__NAME)) { if (ref != null) { ARESObject obj = (ARESObject) ref.getObject(); return obj.getChineseName(); } } else if (feature.equals(BizPackage.Literals.PARAMETER__DESCRIPTION)) { if (ref != null) { ARESObject obj = (ARESObject) ref.getObject(); return obj.getDescription(); } } } break; case PARAM_GROUP: String objId = p.getType(); ReferenceInfo ref = ReferenceManager.getInstance().getFirstReferenceInfo(project, IBizRefType.Object, objId, true); // 2012-10-18 sundl �������Ͳ�����ʾ��ʱ��ֻ��ʾ���һ�������IJ��� if (feature.equals(BizPackage.Literals.PARAMETER__TYPE)) { String type = super.getText(element); if (StringUtils.indexOf(type, '.') != -1) return StringUtils.substringAfterLast(type, "."); } else if (feature.equals(BizPackage.Literals.PARAMETER__NAME)) { if (ref != null) { ARESObject obj = (ARESObject) ref.getObject(); return obj.getChineseName(); } } else if (feature.equals(BizPackage.Literals.PARAMETER__DESCRIPTION)) { if (ref != null) { ARESObject obj = (ARESObject) ref.getObject(); return obj.getDescription(); } } else if (feature.equals(BizPackage.Literals.PARAMETER__ID)) { if (ref != null) { ARESObject obj = (ARESObject) ref.getObject(); return obj.getName(); } } default: break; } return super.getText(element); } protected String getNonStdParameterDefaultValue(String defValue ,Parameter p ){ return StringUtils.EMPTY; } /** * */ protected String getParameterDefaultValue(String defValue , StandardField field) { if (StringUtils.isBlank(defValue)) { try{ TypeDefaultValue tdv = MetadataServiceProvider.getTypeDefaultValueOfStdFieldByName(project, field.getName()); if (tdv != null) { if (resource != null && StringUtils.equals(resource.getType(), "procedure")) { String dt = (String) ((ARESProjectProperty)project.getProjectProperty()).getProperties().get("dbType"); if (StringUtils.isNotBlank(dt)) { return tdv.getData().get(dt.toLowerCase()); } }else { return tdv.getData().get(dataType); } } } catch (Exception e) { //e.printStackTrace(); } } return defValue; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.viewers.BaseEObjectColumnLabelProvider#getCopyText(java.lang.Object) */ @Override public String getCopyText(Object element) { Parameter p = (Parameter) getOwner(element); EStructuralFeature feature = getEStructuralFeature(element); if (feature.getEType().equals(EcorePackage.Literals.EBOOLEAN) || feature.getEType().equals(EcorePackage.Literals.EBOOLEAN_OBJECT)) { return BooleanUtils.toStringTrueFalse((Boolean) p.eGet(feature)) ; } else { return super.getCopyText(element); } } /** * ��ȡ��Ҫ������EObject * @param element * @return */ protected EObject getOwner(Object element) { if (element instanceof DisplayItem) { return ((DisplayItem) element).eObject; } return super.getOwner(element); } public void setDataType(String dataType) { this.dataType = dataType; } }