package com.hundsun.ares.studio.jres.metadata.resources.internal; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.IObjectProvider; import com.hundsun.ares.studio.core.model.CorePackage; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType; import com.hundsun.ares.studio.jres.model.metadata.Function; import com.hundsun.ares.studio.jres.model.metadata.MenuItem; import com.hundsun.ares.studio.jres.model.metadata.MenuList; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.jres.model.metadata.util.MenuUtils; import com.hundsun.ares.studio.model.reference.ReferenceFactory; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.reference.EMFReferenceObjectProvider; import com.hundsun.ares.studio.reference.IReferenceInfoProvider; public class MenuReferenceInfoProvider implements IReferenceInfoProvider { @Override public List<ReferenceInfo> getReferenceInfos(IARESResource resource, Map<Object, Object> context) { List<ReferenceInfo> infoList = new ArrayList<ReferenceInfo>(); try { MenuList info = resource.getInfo(MenuList.class); if(info==null){ return infoList; } List<MenuItem> items = MenuUtils.getMenuItems(info); for (int i=0 ; i<items.size(); i++) { MenuItem item = items.get(i); ReferenceInfo refInfo = ReferenceFactory.eINSTANCE.createReferenceInfo(); refInfo.setResource(resource); refInfo.setRefName(item.getName()); refInfo.setRefType(IMetadataRefType.Menu); refInfo.setRefNamespace(resource.getBundle().getId()); refInfo.setObjectProvider(new MenuReferenceObjectProvider(i)); infoList.add(refInfo); } List<Function> funcs = info.getFunctions(); for(int i=0 ; i<funcs.size(); i++){ Function func = funcs.get(i); ReferenceInfo refInfo = ReferenceFactory.eINSTANCE.createReferenceInfo(); refInfo.setResource(resource); refInfo.setRefName(func.getName()); refInfo.setRefType(IMetadataRefType.Menu_Function); refInfo.setRefNamespace(resource.getBundle().getId()); refInfo.setObjectProvider((new EMFReferenceObjectProvider( CorePackage.Literals.JRES_RESOURCE_INFO, MetadataPackage.Literals.MENU_LIST__FUNCTIONS, i))); infoList.add(refInfo); } } catch (ARESModelException e) { e.printStackTrace(); } return infoList; } private class MenuReferenceObjectProvider implements IObjectProvider{ private Logger logger = Logger.getLogger(MenuReferenceObjectProvider.class); int index; public MenuReferenceObjectProvider(int index) { this.index = index; } @Override public Object getObject(IARESResource resource) { try { MenuList info = resource.getInfo(MenuList.class); return MenuUtils.getMenuItems(info).get(index); } catch (ARESModelException e) { e.printStackTrace(); logger.error(String.format("������Ϣ��ȡ��Դ%s����info��ʱ�����...", resource.getElementName()), e); } return null; } } }