/** * <p>Copyright: Copyright (c) 2012</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.jres.model.metadata.util; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.IPreferencesService; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.TreeIterator; 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.IARESResource; import com.hundsun.ares.studio.core.model.util.Pair; import com.hundsun.ares.studio.jres.metadata.MetadataCore; 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.MetadataCategory; import com.hundsun.ares.studio.jres.model.metadata.MetadataFactory; import com.hundsun.ares.studio.jres.model.metadata.MetadataItem; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.reference.ReferenceManager; /** * @author wangxh * */ public class MenuUtils { public static String getDepartment() { IPreferencesService service = Platform.getPreferencesService(); return service.getString("com.hundsun.ares.studio.jres.metadata.ui", MetadataCore.PRE_APPLICATION_DEPARTMENT, StringUtils.EMPTY, null); } /** * ����ʹ�ò����Ƿ�Ϊ֤������ */ public static boolean isStockDepartment() { return StringUtils.equals(getDepartment(), MetadataCore.PRE_APPLICATION_DEPARTMENT_STOCK); } /*** * ��ȡ�����Ѷ���Ĺ����б��������ð������ù����е� */ public static List<Function> getFunctions(IARESResource resource){ List<Function> funcs = new ArrayList<Function>(); try { MenuList menuList = resource.getInfo(MenuList.class); funcs.addAll(menuList.getFunctions()); } catch (ARESModelException e) { e.printStackTrace(); } return funcs; } /*** * �������ƻ�ȡ�˵����� */ public static Function getFunctionByName(IARESResource resource,String name){ if(isStockDepartment()){ for(Function func : getFunctions(resource)){ if(func.getName().equals(name)){ return func; } } }else{ for(Function func : getFunctions(resource)){ if(func.getSubTransCode().equals(name)){ return func; } } } return MetadataFactory.eINSTANCE.createFunction(); } /*** * ���ݲ˵�������ȡ�˵���Դ��ģ�� */ public static MenuList getMenuList(MenuItem item){ EObject obj = item.eContainer(); if(obj instanceof MenuItem){ return getMenuList((MenuItem)obj); }else if(obj instanceof MenuList){ return (MenuList) obj; } return MetadataFactory.eINSTANCE.createMenuList(); } /*** * ��ȡ��ǰ��Դģ���еIJ˵��б� */ public static List<MenuItem> getMenuItems(MenuList list){ List<MenuItem> items = new ArrayList<MenuItem>(); for(MenuItem item : list.getItems()){ items.add(item); items.addAll(getItemChildren(item)); } return items; } /*** * ��ȡ��ǰ�˵��������Ӳ˵� */ private static List<MenuItem> getItemChildren(MenuItem item) { List<MenuItem> items = new ArrayList<MenuItem>(); for(MenuItem child : item.getSubItems()){ items.add(child); items.addAll(getItemChildren(child)); } return items; } /*** * ��ȡ��ǰ�˵��ķ��� */ public static EList<MetadataCategory> getCategories(MenuItem item) { EList<MetadataCategory> categories = new BasicEList<MetadataCategory>(); if(item.getParent() != null){ for (TreeIterator<EObject> iterator = EcoreUtil.getAllContents(item.getParent().getRoot(), true); iterator.hasNext(); ) { EObject obj = iterator.next(); if (obj instanceof MetadataCategory) { // �������ڷ��� List<MetadataItem>items = ((MetadataCategory) obj).getItems(); if (items.contains(item)) { categories.add((MetadataCategory) obj); }else{ for(MetadataItem metadataItem : items){ if(metadataItem instanceof MenuItem && getItemChildren((MenuItem)metadataItem).contains(item)){ categories.add((MetadataCategory) obj); } } } } } } return categories; } public static Map<String, ReferenceInfo> getRefableMenuItems(IARESResource resource){ IARESProject project = resource.getARESProject(); List<ReferenceInfo> infoList = ReferenceManager.getInstance().getReferenceInfos(project, IMetadataRefType.Menu, true); Set<String> errorSet = new HashSet<String>(); Set<String> processedSet = new HashSet<String>(); Map<String, ReferenceInfo> processedObjects = new HashMap<String, ReferenceInfo>(); for (ReferenceInfo referenceInfo : infoList) { MenuItem item = (MenuItem) referenceInfo.getObject(); IARESResource res = referenceInfo.getResource(); if(res.getBundle().equals(resource.getBundle())){ continue; } if (!errorSet.contains(item.getName())) { if (processedSet.contains(item.getName())) { processedSet.remove(item.getName()); errorSet.add(item.getName()); processedObjects.remove(item.getName()); } else { processedSet.add(item.getName()); processedObjects.put(item.getName(), referenceInfo); } } } return processedObjects; } public static Pair<MenuItem, IARESResource> resolve(MenuItem item, IARESResource master){ if(StringUtils.isNotBlank(item.getRefId())){ ReferenceInfo obj= getRefableMenuItems(master).get(item.getRefId()); if(obj != null ){ MenuItem menuItem = (MenuItem)obj.getObject(); IARESResource res = obj.getResource(); return new Pair<MenuItem, IARESResource>(menuItem, res); } } return new Pair<MenuItem, IARESResource>(null,null); } }