/** * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio */ package com.hundsun.ares.studio.reference; import java.util.List; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.log4j.Logger; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.IObjectProvider; /** * @author gongyf * */ public class EMFReferenceObjectProvider implements IObjectProvider { private static Logger logger = Logger.getLogger(EMFReferenceObjectProvider.class); private EClass eClass; private EReference reference; private int index; /** * @param eClass * @param reference * @param index */ public EMFReferenceObjectProvider(EClass eClass, EReference reference, int index) { super(); this.eClass = eClass; this.reference = reference; this.index = index; } /* (non-Javadoc) * @see com.hundsun.ares.studio.reference.IObjectProvider#getObject(com.hundsun.ares.studio.core.IARESResource) */ @Override public Object getObject(IARESResource resource) { try { EObject eObj = (EObject)resource.getInfo(eClass.getInstanceClass()); List<Object> list = (List<Object>) eObj.eGet(reference); return list.get(index); } catch (Exception e) { logger.error(String.format("������Ϣ��ȡ��Դ%s����info��ʱ�����...", resource.getElementName()), e); } return null; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (this == obj) { return true; } if (getClass().equals(obj.getClass())) { EMFReferenceObjectProvider other = (EMFReferenceObjectProvider) obj; return ObjectUtils.equals(eClass, other.eClass) && ObjectUtils.equals(reference, other.reference) && index == other.index; } return super.equals(obj); } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return new HashCodeBuilder().append(eClass).append(reference).append(index).toHashCode(); } }