package com.hundsun.ares.studio.jres.basicdata.logic.epackage; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EcoreFactory; import org.eclipse.emf.ecore.EcorePackage; 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.BasicDataEcoreFactory; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicDataField; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicdataPackage; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; public class BaseEPackageFactory { protected EcoreFactory theCoreFactory = BasicDataEcoreFactory.eINSTANCE; protected EcorePackage theCorePackage = EcorePackage.eINSTANCE; Pattern p1 = Pattern.compile("[A-Za-z][A-Za-z_0-9]*"); /** * ������Ե�EClass�� * @param targetEClass * @param fields */ protected void addAttrToEclass(EClass targetEClass, Map<String,BasicDataField> basicDataFields){ for(String item:basicDataFields.keySet()){ if(!StringUtils.isBlank(item)){ Matcher m1 = p1.matcher(item); if(m1.matches()){ BasicDataField basicDataField = basicDataFields.get(item) ; ; BasicDataEAttribute attr = (BasicDataEAttribute) theCoreFactory.createEAttribute(); attr.setName(item); attr.setEType(theCorePackage.getEString()); attr.setData(basicDataField); targetEClass.getEStructuralFeatures().add(attr); } } } } /** * ������� * @param ePackage * @param fields * @return */ protected EClass addMasterItem(EPackage ePackage,String className, Map<String,BasicDataField> basicDataFields){ EClass masterItemEClass = theCoreFactory.createEClass(); masterItemEClass.setName(className); masterItemEClass.getESuperTypes().add(BasicdataPackage.Literals.BASICDATA_ITEM);//�̳�BasicdataItem //������� addAttrToEclass(masterItemEClass,basicDataFields); ePackage.getEClassifiers().add(masterItemEClass); return masterItemEClass; } /** * �����Դģ�͸� * @param ePackage * @return */ protected EClass addResourceRoot(EPackage ePackage){ EClass resourceRootEClass = theCoreFactory.createEClass(); resourceRootEClass.setName(IBasicDataEpacakgeConstant.ResourceRoot); resourceRootEClass.getESuperTypes().add(BasicdataPackage.Literals.BASIC_DATA_BASE_MODEL); ePackage.getEClassifiers().add(resourceRootEClass); return resourceRootEClass; } /** * ����� * @param ePackage * @param className * @param fields * @return */ protected EClass addEclass(EPackage ePackage,String className,Map<String,BasicDataField> basicDataFields){ EClass itemEClass = theCoreFactory.createEClass(); itemEClass.setName(className); //������� addAttrToEclass(itemEClass,basicDataFields); //��ӵ�Epackage ePackage.getEClassifiers().add(itemEClass); return itemEClass; } /** * ������� * @param master * @param slave * @param referenceName */ protected void addReference(EClass master, EClass slave, String referenceName){ //�������� EReference itemReference = theCoreFactory.createEReference(); itemReference.setName(referenceName); itemReference.setEType(slave); itemReference.setUpperBound(EStructuralFeature.UNBOUNDED_MULTIPLICITY); itemReference.setContainment(true); //������� master.getEStructuralFeatures().add(itemReference); } // protected EClass addSlaveItem(EPackage ePackage, // EClass master, // String attrName, // String // String[] fields){ // EClass slaveItemEClass = theCoreFactory.createEClass(); // slaveItemEClass.setName(IBasicDataEpacakgeConstant.SlaveItem); // //������� // addAttrToEclass(slaveItemEClass,fields); // // //�������� // EReference itemReference = theCoreFactory.createEReference(); // itemReference.setName(IBasicDataEpacakgeConstant.Attr_Slave_Items); // itemReference.setEType(slaveItemEClass); // itemReference.setUpperBound(EStructuralFeature.UNBOUNDED_MULTIPLICITY); // itemReference.setContainment(true); // // //������� // master.getEStructuralFeatures().add(itemReference); // // ePackage.getEClassifiers().add(slaveItemEClass); // // return slaveItemEClass; // } }