/**
* Դ�������ƣ�ColumnViewerAddAction.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.ui
* ����˵����JRES Studio�Ľ���չ�ֻ�����ܺͱ༭��ع���
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.ui.editor.actions;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
public class ColumnViewerAddAction extends ColumnViewerAction {
/**
* �����������½��Ķ�����г�ʼ��
* @author sundl
*/
public static interface NewObjectInitializer {
void initialize(EObject newObject);
}
private EObject owner;
private EReference reference;
private EClass eClass;
private NewObjectInitializer initializer;
public ColumnViewerAddAction(ColumnViewer viewer, EditingDomain editingDomain, EClass clazz) {
this(viewer, editingDomain, null, null, clazz);
}
public ColumnViewerAddAction(ColumnViewer viewer, EditingDomain editingDomain, EObject owner, EReference reference, EClass clazz) {
super(viewer, editingDomain);
eClass = clazz;
setText("����");
setEnabled(false);
this.owner = owner;
this.reference = reference;
setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_ADD));
setId(IActionIDConstant.CV_ADD);
}
/**
* @param owner the owner to set
*/
public void setOwner(EObject owner) {
this.owner = owner;
clearCommand();
}
/**
* @return the owner
*/
public EObject getOwner() {
return owner;
}
/**
* @param reference the reference to set
*/
public void setReference(EReference reference) {
this.reference = reference;
clearCommand();
}
/**
* @return the reference
*/
public EReference getReference() {
return reference;
}
public NewObjectInitializer getInitializer() {
return initializer;
}
public void setInitializer(NewObjectInitializer initializer) {
this.initializer = initializer;
}
public EClass getEMFClass() {
return eClass;
}
@Override
protected Command createCommand() {
if (getOwner() != null && getReference() != null) {
EObject newObj = eClass.getEPackage().getEFactoryInstance().create(eClass);
if (initializer != null) {
initializer.initialize(newObj);
}
Command command = AddCommand.create(getEditingDomain(), getOwner(), getReference(), newObj);
return command;
}
return null;
}
}