/** * Դ�������ƣ�EMFEditingSupport.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.ui * ����˵����JRES Studio�Ľ���չ�ֻ�����ܺͱ༭��ع��� * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.ui.editor.editingsupport; import org.apache.commons.lang.ObjectUtils; import org.eclipse.emf.common.command.Command; 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.viewers.ColumnViewer; import com.hundsun.ares.studio.ui.editor.blocks.DisplayItem; import com.hundsun.ares.studio.ui.editor.viewers.IEStructuralFeatureProvider; /** * ����EMFģ�͵ı༭֧�֣���������EditDomain�µı༭����ʱ���������ķ�ʽִ�� * @author gongyf */ public abstract class EMFEditingSupport extends BaseEditingSupport { protected IEStructuralFeatureProvider featureProvider = null; public EMFEditingSupport(ColumnViewer viewer, EStructuralFeature feature) { this(viewer, new IEStructuralFeatureProvider.Impl(feature)); } public EMFEditingSupport(ColumnViewer viewer, IEStructuralFeatureProvider featureProvider) { super(viewer); this.featureProvider = featureProvider; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object) */ @Override protected Object getValue(Object element) { EObject owner = getOwner(element); if (owner == null) { return null; } return owner.eGet(featureProvider.getFeature(element)); } @Override protected boolean doCanEdit(Object element) { if (element instanceof DisplayItem) return false; EObject owner = getOwner(element); if (owner == null) { return false; } return super.doCanEdit(element) && owner.eClass().getEAllStructuralFeatures().contains(featureProvider.getFeature(element)); } /** * ��ȡ��Ҫ������EObject * @param element * @return */ protected EObject getOwner(Object element) { return (EObject) element; } protected EStructuralFeature getFeature(Object element) { return featureProvider.getFeature(element); } /* (non-Javadoc) * @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object, java.lang.Object) */ @Override protected void setValue(Object element, Object value) { // ���û���޸ĵı�Ҫ��ֱ�ӷ��� Object oldValue = getValue(element); if (ObjectUtils.equals(oldValue, value) || value == null) { return; } EObject owner = getOwner(element); if (EcoreUtil.getRootContainer(owner.eContainer()) instanceof ChangeDescription) { // FIXME ���ڼ���celleditor��ʱ����г������������ܵ�����������Ϊ�仯��һ���֣������������Ȼ�޷��õ��༭�򣬵���Ҳ��Ӧ�ý��б༭ return; } EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(owner); if (editingDomain != null) { Command command = SetCommand.create(editingDomain, owner, featureProvider.getFeature(element), value); editingDomain.getCommandStack().execute(command); } else { owner.eSet(featureProvider.getFeature(element), value); } // ���ʹ��RefreshViewerJob���ӳ���ʾ��ȷ���� getViewer().update(element, null); } }