package com.hundsun.ares.studio.jres.model.database.util; import java.util.List; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.EcoreUtil; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESProjectProperty; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.util.ARESElementUtil; import com.hundsun.ares.studio.jres.database.constant.IDBConstant; import com.hundsun.ares.studio.jres.database.constant.IDatabaseResType; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType; import com.hundsun.ares.studio.jres.model.database.ColumnType; import com.hundsun.ares.studio.jres.model.database.TableColumn; import com.hundsun.ares.studio.jres.model.database.TableKey; import com.hundsun.ares.studio.jres.model.database.TableResourceData; import com.hundsun.ares.studio.jres.model.database.key_type; 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 sundl * */ public class DatabaseUtil { private static Logger logger = Logger.getLogger(DatabaseUtil.class); /** * ��������Ŀ�Ƿ��������ݿ���ʹ�÷DZ�׼�ֶ� * @param project * @return */ public static boolean isNonStdFiledAllowed(IARESProject project) { IARESProjectProperty property; try { property = project.getProjectProperty(); return property.getBoolean(IDBConstant.USE_NON_STD_FIELD, false); } catch (ARESModelException e) { e.printStackTrace(); } return false; } public static TableResourceData getTableData(IARESProject project, String fullName) { IARESResource res = ARESElementUtil.findResource(project, fullName, IDatabaseResType.Table); if (res != null) { try { return res.getInfo(TableResourceData.class); } catch (ARESModelException e) { logger.error(e); } } return null; } /** * ��ȡ���ֶε�ҵ���������ͣ����ݱ�׼�ֶλ�DZ�׼�ֶ��в�ͬ��ȡ���� * @param project * @param col * @return */ public static String getBizType(IARESProject project, TableColumn col) { ReferenceManager manager = ReferenceManager.getInstance(); if (col.getColumnType() == ColumnType.STD_FIELD) { ReferenceInfo ref = manager.getFirstReferenceInfo(project, IMetadataRefType.StdField, col.getName(), true); if (ref != null) { StandardField sf = (StandardField) ref.getObject(); return sf.getDataType(); } } else if (col.getColumnType() == ColumnType.NON_STD_FIELD) { return col.getDataType(); } return StringUtils.EMPTY; } public static TableColumn findColumn(TableColumn column, TableResourceData table) { for (TableColumn c : table.getColumns()) { if (StringUtils.equals(column.getName(), c.getName())) return c; } return null; } public static TableColumn findColumn(String name, TableResourceData table) { for (TableColumn c : table.getColumns()) { if (StringUtils.equals(c.getName(), name)) return c; } return null; } public static boolean contains(List<?> list, Object object) { for (Object obj : list) { if (DatabaseUtil.equals(obj, object)) return true; } return false; } public static boolean equals(Object obj1, Object obj2) { if (obj1 instanceof EObject && obj2 instanceof EObject) { if( EcoreUtil.equals((EObject) obj1, (EObject)obj2)) { return true; }; } else { if (ObjectUtils.equals(obj1, obj2)) { return true; } } return false; } /** * �ҵ������������ * @param table * @param mark ��־λ * @return */ public static TableKey findPrimaryKey(TableResourceData table, String mark) { if (table == null) return null; mark = StringUtils.trimToEmpty(mark); for (TableKey key : table.getKeys()) { if (key.getType() == key_type.PRIMARY && StringUtils.equals(key.getMark(), mark)) { return key; } } return null; } }