package com.hundsun.ares.studio.jres.basicdata.logic.util; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.ecore.EAnnotation; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EcoreFactory; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.basicdata.constant.IBasicDataEpacakgeConstant; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicDataEAttribute; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicDataField; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.jres.model.metadata.StandardField; public class BasicDataEpackageUtil { /** * ��ȡ�ӱ��������� * @param epackage * @return */ public static EReference getSlaveItemReference(EPackage ePackage){ if(!contains(ePackage, IBasicDataEpacakgeConstant.MasterItem)){ return null; } EClass master = (EClass)ePackage.getEClassifier(IBasicDataEpacakgeConstant.MasterItem); return (EReference)master.getEStructuralFeature(IBasicDataEpacakgeConstant.Attr_Slave_Items); } /** * ��ȡ��Ϣ������ * @param ePackage * @return */ public static EReference getInfoItemReference(EPackage ePackage){ if(!contains(ePackage, IBasicDataEpacakgeConstant.ResourceRoot)){ return null; } EClass master = (EClass)ePackage.getEClassifier(IBasicDataEpacakgeConstant.ResourceRoot); return (EReference)master.getEStructuralFeature(IBasicDataEpacakgeConstant.Attr_Info_Items); } /** * �Ƿ������ * @param ePackage * @param className * @return */ public static boolean contains(EPackage ePackage,String className){ if(null != ePackage.getEClassifier(className)){ return true; }else{ return false; } } public static String getAttrColumnName(IARESResource resoruce,EAttribute attribute){ String colName = attribute.getName(); if(isStandardField(attribute)){ StandardField field = JRESResProviderUtil.getMetadataModel(resoruce.getARESProject(), attribute.getName(),IMetadataRefType.StdField , StandardField.class); if(null != field){//��׼�ֶ�ʱ colName = field.getChineseName(); if (StringUtils.isBlank(colName) || StringUtils.equalsIgnoreCase(colName, "NULL")) { colName = field.getName(); } } } else{ if(!isStandardField(attribute)){ colName = getChineseName(attribute); if(StringUtils.isBlank(colName) ){ colName = attribute.getName(); } } } return colName; } /** * ����һЩ���� * @param eClass * @return */ public static EAttribute[] filterAttr(EClass eClass){ List<EAttribute> tList = new ArrayList<EAttribute>(); for(EAttribute attr : eClass.getEAllAttributes()){ if(attr != MetadataPackage.Literals.NAMED_ELEMENT__NAME && attr != MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME && attr != MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION && attr != MetadataPackage.Literals.METADATA_ITEM__REF_ID){ tList.add(attr); } } return tList.toArray(new EAttribute[0]); } /** * �������ע�� * @param eClass * @param keys */ public static void addMasterKeyAnnotation(EClass eClass,String[] keys){ StringBuffer content = new StringBuffer(); for(int i = 0; i < keys.length ; i++){ if(i == keys.length - 1){ content.append(keys[i]); }else{ content.append(keys[i] + IBasicDataEpacakgeConstant.Annotation_Key_Seprator); } } EAnnotation annotation = EcoreFactory.eINSTANCE.createEAnnotation(); annotation.setSource(IBasicDataEpacakgeConstant.Annotation_Source); annotation.getDetails().put(IBasicDataEpacakgeConstant.Annotation_Key_MasterKey, content.toString()); eClass.getEAnnotations().add(annotation); } /** * ��ȡ����ע�� * @param eClass * @return */ public static String[] getMasterKeyAnnotation(EClass eClass){ EAnnotation annotation = eClass.getEAnnotation(IBasicDataEpacakgeConstant.Annotation_Source); if(null == annotation){ return new String[0]; } if(!annotation.getDetails().containsKey(IBasicDataEpacakgeConstant.Annotation_Key_MasterKey)){ return new String[0]; } String content = annotation.getDetails().get(IBasicDataEpacakgeConstant.Annotation_Key_MasterKey).toString(); return StringUtils.split(content, IBasicDataEpacakgeConstant.Annotation_Key_Seprator); } public static EAttribute getEAttribute(EClass eClass,String attrName){ return (EAttribute)eClass.getEStructuralFeature(attrName); } /** * �ж�EAttribute�Ƿ��DZ�׼�ֶ� * @param attribute * @return */ public static boolean isStandardField(EAttribute attribute){ if(attribute instanceof BasicDataEAttribute ){ BasicDataEAttribute basicDataEAttribute = (BasicDataEAttribute) attribute; if(basicDataEAttribute.getData() !=null){ if(basicDataEAttribute.getData() instanceof BasicDataField){ BasicDataField basicDataField = (BasicDataField) basicDataEAttribute.getData(); return basicDataField.getColumnType()==0; } } } return true; } /** * ȡ��data�е�ҵ���������� * @param attribute * @return */ public static String getDataType(EAttribute attribute){ if(attribute instanceof BasicDataEAttribute ){ BasicDataEAttribute basicDataEAttribute = (BasicDataEAttribute) attribute; if(basicDataEAttribute.getData() !=null){ if(basicDataEAttribute.getData() instanceof BasicDataField){ BasicDataField basicDataField = (BasicDataField) basicDataEAttribute.getData(); return basicDataField.getDataType(); } } } return ""; } /** * ȡ��data�е������� * @param attribute * @return */ public static String getChineseName(EAttribute attribute){ if(attribute instanceof BasicDataEAttribute ){ BasicDataEAttribute basicDataEAttribute = (BasicDataEAttribute) attribute; if(basicDataEAttribute.getData() !=null){ if(basicDataEAttribute.getData() instanceof BasicDataField){ BasicDataField basicDataField = (BasicDataField) basicDataEAttribute.getData(); return basicDataField.getChineseName(); } } } return ""; } }