/**
* Դ�������ƣ�TextEditingSupport.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.ui
* ����˵����JRES Studio�Ľ���չ�ֻ�����ܺͱ༭��ع���
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.basicdata.ui.editor.blocks;
import org.apache.commons.lang.ObjectUtils;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CompoundCommand;
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.CellEditor;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.widgets.Composite;
import com.hundsun.ares.studio.jres.basicdata.core.basicdata.validate.util.IKeyTableLocator;
import com.hundsun.ares.studio.ui.editor.editingsupport.EMFEditingSupport;
import com.hundsun.ares.studio.ui.editor.viewers.IEStructuralFeatureProvider;
public class BasicDataTextEditingSupportEX extends EMFEditingSupport {
IKeyTableLocator locator;
EStructuralFeature feature;
/**
* @param viewer
* @param featureProvider
*/
public BasicDataTextEditingSupportEX(ColumnViewer viewer,
IEStructuralFeatureProvider featureProvider,
IKeyTableLocator locator,
EStructuralFeature feature) {
super(viewer, featureProvider);
this.locator = locator;
this.feature = feature;
}
@Override
protected CellEditor doGetCellEditor(Object element) {
if(null == featureProvider.getFeature(element)){
return null;
}
return super.doGetCellEditor(element);
}
@Override
protected CellEditor createCellEditor() {
return new TextCellEditor((Composite) getViewer().getControl());
}
@Override
protected Object getValue(Object element) {
// ��ֹnull���õ�Text��ȥ
return ObjectUtils.defaultIfNull(super.getValue(element), "");
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.editingsupports.EMFEditingSupport#setValue(java.lang.Object, java.lang.Object)
*/
@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);
if (editingDomain != null) {
CompoundCommand command = new CompoundCommand();
Command setCommand = SetCommand.create(editingDomain, owner, featureProvider.getFeature(element), value);
command.append(setCommand);
try {
EObject copyElement = EcoreUtil.copy(((EObject)element)) ;
copyElement.eSet(featureProvider.getFeature(element), value);
EObject refer = locator.getLinkObject(copyElement);
Command setReferCommand = SetCommand.create(editingDomain, owner,feature, refer);
command.append(setReferCommand);
} catch (Exception e) {
}
editingDomain.getCommandStack().execute(command);
} else {
owner.eSet(featureProvider.getFeature(element), value);
}
// ���ʹ��RefreshViewerJob���ӳ���ʾ��ȷ����
getViewer().update(element, null);
}
}