/** * Դ�������ƣ�PDMImportExecelHelper.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.database.ui * ����˵����$desc * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.jres.database.pdm; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.jres.database.constant.IDatabaseRefType; import com.hundsun.ares.studio.jres.database.pdm.bean.PDMBusinessDataType; import com.hundsun.ares.studio.jres.database.pdm.bean.PDMStandardField; import com.hundsun.ares.studio.jres.database.pdm.bean.PDMTableResource; import com.hundsun.ares.studio.jres.model.metadata.BusinessDataType; import com.hundsun.ares.studio.jres.model.metadata.MetadataFactory; import com.hundsun.ares.studio.jres.model.metadata.StandardField; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.reference.ReferenceManager; /** * @author liaogc * ��һ�ε���excel������ */ public class PDMImportExecelHelper { /** * ����ҵ��������������ҵ�������б��е�λ��,������ڷ���-1.���������,��׼������,����,������ͬ����ͬ * @param pdmBusinessDataTypeList * @param businessDataType * @return */ public int indexOfBusinessDataType(List<PDMBusinessDataType> pdmBusinessDataTypeList,BusinessDataType businessDataType){ if(pdmBusinessDataTypeList==null || pdmBusinessDataTypeList.size()==0){ return -1; } for(int i =0;i<pdmBusinessDataTypeList.size();i++){ PDMBusinessDataType pdmBusinessDataType = pdmBusinessDataTypeList.get(i); if(StringUtils.equals(businessDataType.getName(), pdmBusinessDataType.getTypeName()) //&& StringUtils.equals(businessDataType.getChineseName(), pdmBusinessDataType.getTypeChineseName()) && StringUtils.equals(businessDataType.getStdType(), pdmBusinessDataType.getStandardTypeName()) && StringUtils.equals(businessDataType.getLength(), pdmBusinessDataType.getLength()) && StringUtils.equals(businessDataType.getPrecision(), pdmBusinessDataType.getPrecision())){ return i; } } return -1; } /** * ���ر�׼�ֶ��������ı�׼�ֶ��б��е�λ��,������������ı�׼�ֶ��б�,����-1.����ֶ���,������,ҵ��������������ͬ����ͬ * @param pdmStandardFieldList * @param standardField * @return */ public int indexOfStandardField(List<PDMStandardField> pdmStandardFieldList,StandardField standardField){ if(pdmStandardFieldList==null || pdmStandardFieldList.size()==0){ return -1; } for(int i=0;i<pdmStandardFieldList.size();i++){ PDMStandardField pdmstandardField = pdmStandardFieldList.get(i); String fieldName = StringUtils.isBlank(pdmstandardField.getNewName())?pdmstandardField.getGenName():pdmstandardField.getNewName(); if(StringUtils.equals(standardField.getName(), fieldName)){ return i; } } return -1; } /** * ����PDMStandardField�Լ�standardField����һ���µ�standardField * @param pdmStandardField * @param standardField * @return */ public StandardField createStandardField(PDMStandardField pdmStandardField,StandardField standardField){ StandardField newStandardField = MetadataFactory.eINSTANCE.createStandardField(); String fieldName = StringUtils.isBlank(pdmStandardField.getNewName())?pdmStandardField.getGenName():pdmStandardField.getNewName(); newStandardField.setName(fieldName); String chineseName = StringUtils.isBlank(pdmStandardField.getNewChineseName())?pdmStandardField.getOldChineseName():pdmStandardField.getNewChineseName(); newStandardField.setChineseName(chineseName); String busType = StringUtils.isBlank(pdmStandardField.getNewBusType())?pdmStandardField.getGenBusType():pdmStandardField.getNewBusType(); newStandardField.setDataType(busType); String comment =StringUtils.isBlank(pdmStandardField.getNewComment())?pdmStandardField.getNewComment():pdmStandardField.getOldName(); newStandardField.setDescription(comment); if(StringUtils.isNotBlank(pdmStandardField.getDictId())){ newStandardField.setRefId(pdmStandardField.getDictId()); } return newStandardField; } /** * ����PDMStandardField����һ���µ�standardField * @param pdmStandardField * @return */ public StandardField createStandardField(PDMStandardField pdmStandardField){ StandardField standardField = MetadataFactory.eINSTANCE.createStandardField(); String fieldName = StringUtils.isBlank(pdmStandardField.getNewName())?pdmStandardField.getGenName():pdmStandardField.getNewName(); standardField.setName(fieldName); String chineseName = StringUtils.isBlank(pdmStandardField.getNewChineseName())?pdmStandardField.getOldChineseName():pdmStandardField.getNewChineseName(); standardField.setChineseName(chineseName); String busType = StringUtils.isBlank(pdmStandardField.getNewBusType())?pdmStandardField.getGenBusType():pdmStandardField.getNewBusType(); standardField.setDataType(busType); String comment =StringUtils.isBlank(pdmStandardField.getNewComment())?pdmStandardField.getNewComment():pdmStandardField.getOldName(); standardField.setDescription(comment); if(StringUtils.isNotBlank(pdmStandardField.getDictId())){ standardField.setRefId(pdmStandardField.getDictId()); } return standardField; } /** * ����PDMBusinessDataType����һ���µ�BusinessDataType * @param pdmBusinessDataType * @return */ public BusinessDataType createBusinessDataType(PDMBusinessDataType pdmBusinessDataType){ BusinessDataType newBusinessDataType = MetadataFactory.eINSTANCE.createBusinessDataType(); newBusinessDataType.setName(pdmBusinessDataType.getTypeName()); newBusinessDataType.setChineseName(pdmBusinessDataType.getTypeChineseName()); newBusinessDataType.setStdType(pdmBusinessDataType.getStandardTypeName()); if(StringUtils.isNotBlank(pdmBusinessDataType.getDefaultValue())){ newBusinessDataType.setDefaultValue(pdmBusinessDataType.getDefaultValue()); } if(StringUtils.isNotBlank(pdmBusinessDataType.getLength())){ newBusinessDataType.setLength(pdmBusinessDataType.getLength()); } if(StringUtils.isNotBlank(pdmBusinessDataType.getPrecision())){ newBusinessDataType.setPrecision(pdmBusinessDataType.getPrecision()); } newBusinessDataType.setDescription(pdmBusinessDataType.getComment()); return newBusinessDataType; } /** * ����PDMBusinessDataType�Լ��ɵ�businessDataType����һ���µ�BusinessDataType * @param pdmBusinessDataType * @return */ public BusinessDataType createBusinessDataType(PDMBusinessDataType pdmBusinessDataType,BusinessDataType businessDataType){ BusinessDataType newBusinessDataType = MetadataFactory.eINSTANCE.createBusinessDataType(); newBusinessDataType.setName(pdmBusinessDataType.getTypeName()); newBusinessDataType.setChineseName(pdmBusinessDataType.getTypeChineseName()); newBusinessDataType.setStdType(pdmBusinessDataType.getStandardTypeName()); if(StringUtils.isNotBlank(pdmBusinessDataType.getDefaultValue())){ newBusinessDataType.setDefaultValue(pdmBusinessDataType.getDefaultValue()); } if(StringUtils.isNotBlank(pdmBusinessDataType.getLength())){ newBusinessDataType.setLength(pdmBusinessDataType.getLength()); } if(StringUtils.isNotBlank(pdmBusinessDataType.getPrecision())){ newBusinessDataType.setPrecision(pdmBusinessDataType.getPrecision()); } newBusinessDataType.setDescription(pdmBusinessDataType.getComment()); return newBusinessDataType; } /** * �ϲ���ͬ�ı�׼�ֶ� * @param pmdStandardFieldList * @return */ public List<PDMStandardField> mergeStandardField(List<PDMStandardField> pmdStandardFieldList){ Map<String,PDMStandardField>pdmStaneardFieldMap = getStandardFieldCategory(pmdStandardFieldList);//��ʱvalueֵ�Ǹ��ֶζ�����ͬ(��ͬ�ı�������) List<PDMStandardField> mergeList = new ArrayList<PDMStandardField>(); mergeList.addAll(pdmStaneardFieldMap.values()); return mergeList; } /** * �����޸���Ϣ * @param pdmFeild * @return */ public String getModifyInfo(PDMStandardField pdmFeild){ StringBuffer modifyStr = new StringBuffer(); if(StringUtils.isNotBlank(pdmFeild.getNewName()) && !StringUtils.equals(pdmFeild.getGenName(), pdmFeild.getNewName())){ modifyStr.append("�ֶ���:").append("\""+pdmFeild.getGenName()+"\"").append("�޸�Ϊ:").append("\""+pdmFeild.getNewName()+"\""); } if(StringUtils.isNotBlank(pdmFeild.getNewChineseName())){ if(StringUtils.isNotBlank(modifyStr.toString())){ modifyStr.append("||"); } modifyStr.append("������:").append("\""+pdmFeild.getOldChineseName()+"\"").append("�޸�Ϊ:").append("\""+pdmFeild.getNewChineseName()+"\""); } if(StringUtils.isNotBlank(pdmFeild.getNewBusType())){ if(StringUtils.isNotBlank(modifyStr.toString())){ modifyStr.append("||"); } modifyStr.append("����:").append("\""+pdmFeild.getGenBusType()+"\"").append("�޸�Ϊ:").append("\""+pdmFeild.getNewBusType()+"\""); } if(StringUtils.isNotBlank(pdmFeild.getNewComment())){ if(StringUtils.isNotBlank(modifyStr.toString())){ modifyStr.append("||"); } modifyStr.append("��ע:").append("\""+pdmFeild.getOldComment()+"\"").append("�޸�Ϊ:").append("\""+pdmFeild.getNewComment()+"\""); } return modifyStr.toString(); } /** * ���ֶ���Ϊkey��PDMStandardField���з��� * @param pmdStandardFieldList * @return */ private Map<String,PDMStandardField>getStandardFieldCategory(List<PDMStandardField> pmdStandardFieldList){ Map<String,PDMStandardField>pdmStaneardFieldMap = new HashMap<String,PDMStandardField>(); for(PDMStandardField pmdStandardField:pmdStandardFieldList){ String name = StringUtils.isNotBlank(pmdStandardField.getNewName())?pmdStandardField.getNewName():pmdStandardField.getGenName(); pdmStaneardFieldMap.put(name, pmdStandardField); } return pdmStaneardFieldMap; } /** * ��tableName��PDMStandardField���з��� * @param pmdStandardFieldList * @return */ public Map<String,List<PDMStandardField>>getStandardFieldCategoryByTable(List<PDMStandardField> pmdStandardFieldList){ Map<String,List<PDMStandardField>>pdmStaneardFieldMap = new HashMap<String,List<PDMStandardField>>(); for(PDMStandardField pmdStandardField:pmdStandardFieldList){ for(String tableName:pmdStandardField.getBelongTableList()){ if(StringUtils.isNotBlank(tableName)){ if(pdmStaneardFieldMap.get(tableName)!=null){ pdmStaneardFieldMap.get(tableName).add(pmdStandardField); }else{ List<PDMStandardField> standardFieldCategory = new ArrayList<PDMStandardField>(); standardFieldCategory.add(pmdStandardField); pdmStaneardFieldMap.put(tableName, standardFieldCategory); } } } } return pdmStaneardFieldMap; } /** * �����Ƿ���� * @param project * @param newStandardFieldList * @param errorMsg * @return * @throws ARESModelException */ public boolean checkTable(IARESProject project,List<PDMStandardField> newStandardFieldList,StringBuffer errorMsg) throws ARESModelException{ StringBuffer tableError = new StringBuffer(); List<ReferenceInfo> tabInfoList = ReferenceManager.getInstance().getReferenceInfos( project,IDatabaseRefType.Table, true) ; Map<String ,List<PDMTableResource>> tableResourceMap = PDMHelper.getTableResourceMap(tabInfoList);//������е����ݿ��,���Ա���Ϊkey for(int i =0;i< newStandardFieldList.size();i++ ){ PDMStandardField std = newStandardFieldList.get(i); String name = StringUtils.isNotBlank(std.getNewName())?std.getNewName():std.getGenName(); String subSystem = std.getBolongSubSystemList().size()==0?"":std.getBolongSubSystemList().get(0); if( StringUtils.isBlank(subSystem)){//���������ϵͳ������,�������ֶε���������� break; } for(String tableName:std.getBelongTableList()){ List<PDMTableResource> tableList = tableResourceMap.get(tableName); if(tableList==null || tableList.size()==0){//������������в����ڱ� tableError.append("�ֶ�:").append(name).append("������:").append(tableName).append("������").append("(��"+(i+3)+"��)").append("\r\n"); }else{//��������д����ֶ��������ı�����˱��Dz�������������ϵͳ�� boolean find = false; for(PDMTableResource pdmTableResource:tableList){ //���������ͬ,��ϵͳҲ��ͬ����� if(StringUtils.equals(pdmTableResource.getSubSystem(),subSystem) && StringUtils.isNotBlank(subSystem)){ find = true; break; } } if(!find){//����������������� tableError.append("�ֶ�:").append(name).append("������:").append(tableName).append("������").append("(��"+(i+3)+"��)").append("\r\n"); } } } } if (StringUtils.isNotBlank(tableError.toString())) { errorMsg.append(tableError.toString()); return false; } return true; } /** * ����׼�ֶδ��ڴ�������:�ֶ�����ͬ,�����಻��ͬ��������� * @param newBusinessDataTypeList * @param newStandardFieldList * @param errorMsg * @return */ public boolean checkField(List<PDMBusinessDataType> newBusinessDataTypeList,List<PDMStandardField> newStandardFieldList,StringBuffer errorMsg){ for(int i =0;i< newStandardFieldList.size();i++ ){ PDMStandardField std = newStandardFieldList.get(i); String stdName = StringUtils.isNotBlank(std.getNewName())?std.getNewName():std.getGenName(); String stdType = StringUtils.isNotBlank(std.getNewBusType())?std.getNewBusType():std.getGenBusType(); for(int j =0;j< newStandardFieldList.size();j++ ){ if(j>i){ PDMStandardField subStd = newStandardFieldList.get(j); String subStdName = StringUtils.isNotBlank(subStd.getNewName())?subStd.getNewName():subStd.getGenName(); String subBusType = StringUtils.isNotBlank(subStd.getNewBusType())?subStd.getNewBusType():subStd.getGenBusType(); if (StringUtils.equals(stdName, subStdName) && !StringUtils.equals(stdType, subBusType)) { errorMsg.append("�ֶ�����"+stdName+" ����Դ���ʹ�������: "+"��"+(i+3)+"��:"+stdType +","+"��"+(j+3)+"��:"+subBusType+"\r\n"); } } } } if (StringUtils.isNotBlank(errorMsg.toString())) { return false; } return true; } /** * ����ҵ�����������Ƿ������ͬ�������� * @param newBusinessDataTypeList * @param errorMsg * @return */ public boolean checkBusinessDataType(List<PDMBusinessDataType> newBusinessDataTypeList,StringBuffer errorMsg){ class LinePDMBusinessDataType { public LinePDMBusinessDataType(PDMBusinessDataType pdmBusinessDataType,int line ) { this.line = line; this.pdmBusinessDataType = pdmBusinessDataType; } private PDMBusinessDataType pdmBusinessDataType; /** * @return the pdmBusinessDataType */ public PDMBusinessDataType getPdmBusinessDataType() { return pdmBusinessDataType; } public int getLine() { return line; } private int line; } Map<String,List<LinePDMBusinessDataType>> sameNameBusinessDataTypeMap= new HashMap<String,List<LinePDMBusinessDataType>>(); StringBuffer businessDataTypeError = new StringBuffer(); //������Ϊkey��ҵ���������ͷ��� for(int i =0;i< newBusinessDataTypeList.size();i++ ){ PDMBusinessDataType pdmBusinessDataType = newBusinessDataTypeList.get(i); String name = StringUtils.isNotBlank(pdmBusinessDataType.getTypeName())?pdmBusinessDataType.getTypeName():pdmBusinessDataType.getOldTypeName(); if(sameNameBusinessDataTypeMap.get(name)!=null){ sameNameBusinessDataTypeMap.get(name).add(new LinePDMBusinessDataType(pdmBusinessDataType,(i+3))); }else{ List<LinePDMBusinessDataType> LinePDMBusinessDataTypeList = new ArrayList<LinePDMBusinessDataType>(); LinePDMBusinessDataTypeList.add(new LinePDMBusinessDataType(pdmBusinessDataType,(i+3))); sameNameBusinessDataTypeMap.put(name, LinePDMBusinessDataTypeList); } } for(String name:sameNameBusinessDataTypeMap.keySet()){ List<LinePDMBusinessDataType> linePDMBusinessDataTypeList = sameNameBusinessDataTypeMap.get(name); if(linePDMBusinessDataTypeList !=null &&linePDMBusinessDataTypeList.size()>1){ for(LinePDMBusinessDataType linePDMBusinessDataType :linePDMBusinessDataTypeList){ businessDataTypeError.append("ҵ����������:").append(name).append("���ڳ�ͻ(����ͬ����ҵ����������)").append("��").append(linePDMBusinessDataType.getLine()).append("��").append("\r\n"); } } } if (StringUtils.isNotBlank(businessDataTypeError.toString())) { errorMsg.append(businessDataTypeError.toString()); return false; } return true; } }