/** * <p>Copyright: Copyright (c) 2012</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.jres.metadata.ui.menu.actions; import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.BasicEMap; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.EMap; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.command.SetCommand; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.ui.plugin.AbstractUIPlugin; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.model.ExtensibleModel; import com.hundsun.ares.studio.core.model.UserExtensibleProperty; import com.hundsun.ares.studio.core.model.util.Pair; import com.hundsun.ares.studio.jres.metadata.ui.MetadataUI; import com.hundsun.ares.studio.jres.metadata.ui.actions.IMetadataActionIDConstant; import com.hundsun.ares.studio.jres.model.metadata.FunctionProxy; import com.hundsun.ares.studio.jres.model.metadata.MenuItem; import com.hundsun.ares.studio.jres.model.metadata.MetadataFactory; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.jres.model.metadata.util.MenuUtils; import com.hundsun.ares.studio.ui.editor.actions.IUpdateAction; /** * @author wangxh * */ public class RecoverRefMenuFunctionsAction extends Action implements IUpdateAction{ TableViewer viewer; EditingDomain domain; IARESResource resource; public RecoverRefMenuFunctionsAction(TableViewer viewer,EditingDomain domain,IARESResource resource) { super(); this.viewer = viewer; this.domain = domain; this.resource = resource; setId(IMetadataActionIDConstant.CV_RECOVER_FUNCTIONS); setText("�ָ����ò˵�����"); setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(MetadataUI.PLUGIN_ID, "icons/full/obj16/refresh.gif")); } @Override public void run() { Object obj = viewer.getInput(); if(obj != null && obj instanceof MenuItem){ MenuItem item = (MenuItem)obj; Pair<MenuItem, IARESResource> pair = MenuUtils.resolve(item, resource); if(pair.first != null){ EList<FunctionProxy> list = getFunctionProxys(pair.first); Command cmd = SetCommand.create(domain, item, MetadataPackage.Literals.MENU_ITEM__FUNCTION_PROXYS,list); domain.getCommandStack().execute(cmd); } } } private EList<FunctionProxy> getFunctionProxys(MenuItem item){ EList<FunctionProxy> list = new BasicEList<FunctionProxy>(); for(FunctionProxy proxy : item.getFunctionProxys()){ FunctionProxy funcProxy = MetadataFactory.eINSTANCE.createFunctionProxy(); funcProxy.setFunCode(proxy.getFunCode()); funcProxy.setDescription(proxy.getDescription()); funcProxy.getData2().putAll(getItemData2(proxy)); list.add(funcProxy); } return list; } private EMap<String, EObject> getItemData2(ExtensibleModel model){ EMap<String, EObject> map = new BasicEMap<String, EObject>(); EMap<String, EObject> data2 = model.getData2(); for(Entry<String, EObject> entry :data2.entrySet()){ EClass eClass = entry.getValue().eClass(); EObject obj = eClass.getEPackage().getEFactoryInstance().create(eClass); if(obj instanceof UserExtensibleProperty){ for(Entry<String, String> e : ((UserExtensibleProperty)entry.getValue()).getMap().entrySet()){ ((UserExtensibleProperty)obj).getMap().put(e.getKey(), e.getValue()); } } map.put(entry.getKey(), obj); } return map; } @Override public void update() { Object obj = viewer.getInput(); if(obj != null && obj instanceof MenuItem){ MenuItem item = (MenuItem)obj; setEnabled(StringUtils.isNotBlank(item.getRefId())); }else{ setEnabled(false); } } }