/** * <p>Copyright: Copyright (c) 2012</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.jres.metadata.ui.viewer; import org.apache.commons.lang.ObjectUtils; import org.eclipse.emf.common.command.CompoundCommand; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.change.ChangeDescription; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.command.SetCommand; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.viewers.ColumnViewer; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.model.metadata.MenuItem; import com.hundsun.ares.studio.jres.model.metadata.MetadataItem; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.jres.model.metadata.util.MenuUtils; import com.hundsun.ares.studio.jres.model.metadata.util.MetadataUtil; import com.hundsun.ares.studio.ui.cellEditor.AresContentProposalProvider; import com.hundsun.ares.studio.ui.editor.editingsupport.JresTextEditingSupportWithContentAssist; /** * @author wangxh * */ public class MenuRefTextEditingSupportWithContentAssist extends JresTextEditingSupportWithContentAssist { IARESResource resource; public MenuRefTextEditingSupportWithContentAssist(ColumnViewer viewer, AresContentProposalProvider proposalProvider,IARESResource resource) { super(viewer, MetadataPackage.Literals.METADATA_ITEM__REF_ID, proposalProvider); this.resource = resource; } @Override protected void setValue(Object element, Object value) { // ���û���޸ĵı�Ҫ��ֱ�ӷ��� Object oldValue = getValue(element); if (ObjectUtils.equals(oldValue, value)) { return; } EObject owner = getOwner(element); if (EcoreUtil.getRootContainer(owner.eContainer()) instanceof ChangeDescription) { // FIXME ���ڼ���celleditor��ʱ����г������������ܵ�����������Ϊ�仯��һ���֣������������Ȼ�޷��õ��༭�򣬵���Ҳ��Ӧ�ý��б༭ return; } EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(owner); CompoundCommand cmd = new CompoundCommand(); EObject resolveItem = getResolveItem(element, value); if (editingDomain != null) { cmd.append(SetCommand.create(editingDomain, owner, MetadataPackage.Literals.METADATA_ITEM__REF_ID, value)); if(resolveItem != null && !resolveItem.equals(element)){ MenuItem item = (MenuItem)resolveItem; cmd.append(SetCommand.create(editingDomain, owner, MetadataPackage.Literals.MENU_ITEM__URL, item.getUrl())); cmd.append(SetCommand.create(editingDomain, owner, MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME, item.getChineseName())); cmd.append(SetCommand.create(editingDomain, owner, MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION, item.getDescription())); cmd.append(SetCommand.create(editingDomain, owner, MetadataPackage.Literals.NAMED_ELEMENT__NAME, item.getName())); cmd.append(SetCommand.create(editingDomain, owner, MetadataPackage.Literals.MENU_ITEM__ICON, item.getIcon())); // EMap<String, EObject> data2 = getItemData2(item); // for(Entry<String, EObject> entry : data2.entrySet()){ // cmd.append(new PutCommand(owner, CorePackage.Literals.EXTENSIBLE_MODEL__DATA2,entry.getKey() ,entry.getValue())); // } } editingDomain.getCommandStack().execute(cmd); } else { owner.eSet(MetadataPackage.Literals.METADATA_ITEM__REF_ID, value); if(resolveItem != null && !resolveItem.equals(element)){ MenuItem item = (MenuItem)resolveItem; owner.eSet(MetadataPackage.Literals.MENU_ITEM__URL, item.getUrl()); owner.eSet(MetadataPackage.Literals.NAMED_ELEMENT__NAME, item.getName()); owner.eSet(MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME, item.getChineseName()); owner.eSet(MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION, item.getDescription()); owner.eSet(MetadataPackage.Literals.MENU_ITEM__ICON, item.getIcon()); // owner.eSet(CorePackage.Literals.EXTENSIBLE_MODEL__DATA2, getItemData2(item)); } } // ���ʹ��RefreshViewerJob���ӳ���ʾ��ȷ���� getViewer().update(element, null); } // 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; // } protected EObject getResolveItem(Object element, Object value) { if ( MetadataUtil.isUseRefFeature(resource)) { // �����Ŀ�������������� if (element instanceof MenuItem) { // �������õĴ��� MenuItem item = (MenuItem) ((MetadataItem)element).eClass().getEPackage().getEFactoryInstance().create(((MetadataItem)element).eClass()); item.setRefId((String) value); MetadataItem entity = null; entity = MenuUtils.resolve(item, resource).first; return entity == null ? (MetadataItem)element : entity; } } return null; } // 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; // } }