/** * Դ�������ƣ�TextEditingSupport.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.ui * ����˵����JRES Studio�Ľ���չ�ֻ�����ܺͱ༭��ع��� * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.jres.basicdata.ui.editor.blocks; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.ObjectUtils; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; 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.fieldassist.IContentProposalProvider; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.swt.widgets.Composite; import com.hundsun.ares.studio.jres.basicdata.ui.proposal.BasicDataContentProposalProvider; import com.hundsun.ares.studio.jres.model.metadata.decrypt.DeDictionaryItem; import com.hundsun.ares.studio.ui.cellEditor.AresContentProposalProvider; import com.hundsun.ares.studio.ui.cellEditor.TextCellEditorWithContentAssist; import com.hundsun.ares.studio.ui.editor.editingsupport.EMFEditingSupport; import com.hundsun.ares.studio.ui.editor.viewers.IEStructuralFeatureProvider; public class BasicDataTextEditingSupport extends EMFEditingSupport { private AresContentProposalProvider proposalProvider; /** * @param viewer * @param featureProvider */ public BasicDataTextEditingSupport(ColumnViewer viewer, IEStructuralFeatureProvider featureProvider,AresContentProposalProvider proposalProvider) { super(viewer, featureProvider); this.proposalProvider = proposalProvider; } @Override protected CellEditor doGetCellEditor(Object element) { if(null == featureProvider.getFeature(element)){ return null; } // return super.doGetCellEditor(element); TextCellEditorWithContentAssist celleditor = (TextCellEditorWithContentAssist) super.doGetCellEditor(element); AresContentProposalProvider proposalProvider = (AresContentProposalProvider) celleditor.getProposalProvider(); proposalProvider.updateContent(element); return cellEditor; } @Override protected CellEditor createCellEditor() { // return new TextCellEditor((Composite) getViewer().getControl()); return new TextCellEditorWithContentAssist((Composite)getViewer().getControl()) { @Override public IContentProposalProvider getProposalProvider() { return proposalProvider; } }; } @Override protected boolean doCanEdit(Object element) { boolean can = super.doCanEdit(element); if (!can) { EObject owner = getOwner(element); Map<String , EAttribute> attMap = new HashMap<String, EAttribute>(); for(EAttribute att : owner.eClass().getEAllAttributes()){ attMap.put(att.getName(), att); } if (element != null && owner != null && attMap.get(featureProvider.getFeature(element).getName()) != null) { return true; }else { return false; } }else { return true; } } @Override protected Object getValue(Object element) { Map<String , EAttribute> attMap = new HashMap<String, EAttribute>(); EObject owner = getOwner(element); Object res = null; if (owner != null) { for(EAttribute att : owner.eClass().getEAllAttributes()){ attMap.put(att.getName(), att); } res = owner.eGet(attMap.get(featureProvider.getFeature(element).getName())); } // ��ֹnull���õ�Text��ȥ return ObjectUtils.defaultIfNull(res, ""); } @Override protected void setValue(Object element, Object value) { // ���û���޸ĵı�Ҫ��ֱ�ӷ��� Object oldValue = getValue(element); if(proposalProvider instanceof BasicDataContentProposalProvider){ Object[] input = ((BasicDataContentProposalProvider) proposalProvider).getInput(); if(input != null){ for(Object item : input){ String name = ((DeDictionaryItem)item).getValue() + "_" + ((DeDictionaryItem)item).getChineseName(); if(name.equals(value)){ value = ((DeDictionaryItem)item).getValue(); break; } } } } 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); Map<String , EAttribute> attMap = new HashMap<String, EAttribute>(); for(EAttribute att : owner.eClass().getEAllAttributes()){ attMap.put(att.getName(), att); } EStructuralFeature feature = attMap.get(featureProvider.getFeature(element).getName()); if (editingDomain != null) { Command command = SetCommand.create(editingDomain, owner, feature, value); editingDomain.getCommandStack().execute(command); } else { owner.eSet(feature, value); } // ���ʹ��RefreshViewerJob���ӳ���ʾ��ȷ���� getViewer().update(element, null); } }