package com.hundsun.ares.studio.biz.ui.action; import java.util.List; 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.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import com.hundsun.ares.studio.biz.Parameter; import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerAction; import com.hundsun.ares.studio.ui.editor.actions.IActionIDConstant; /** * "����"��ʽ��Ӳ�����Aciton * @author gongyf * @author sundl */ public class InsertParameterAction extends ColumnViewerAction { private EObject defaultOwner; private EReference defaultReference; private EClass paramClass; public InsertParameterAction(ColumnViewer viewer, EditingDomain editingDomain, EObject defaultOwner, EReference defaultReference, EClass paramClass) { super(viewer, editingDomain); setId(IActionIDConstant.CV_INSERT); setText("����"); setEnabled(false); this.paramClass = paramClass; this.defaultOwner = defaultOwner; this.defaultReference = defaultReference; setAccelerator(SWT.INSERT); } /** * @param defaultOwner the defaultOwner to set */ public void setDefaultOwner(EObject defaultOwner) { this.defaultOwner = defaultOwner; } /** * @param defaultReference the defaultReference to set */ public void setDefaultReference(EReference defaultReference) { this.defaultReference = defaultReference; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.actions.ColumnViewerAction#createCommand() */ @Override protected Command createCommand() { EObject owner = null; EReference reference = null; Object sel = ((IStructuredSelection)getViewer().getSelection()).getFirstElement(); if (sel instanceof Parameter) { Parameter p = (Parameter) sel; owner = p.eContainer(); reference = (EReference) p.eContainingFeature(); } if (owner == null) { owner = defaultOwner; } if (reference == null) { reference = defaultReference; } if (owner != null && reference != null) { EObject newObj = paramClass.getEPackage().getEFactoryInstance().create(paramClass); Object position = ((IStructuredSelection)getViewer().getSelection()).getFirstElement(); Command command = null; // ��ѡ�е������ѡ��λ�ò����¶��� if (position != null) { List<Object> list = (List<Object>) owner.eGet(reference); int index = list.indexOf(position); if (index >= 0) { command = AddCommand.create(getEditingDomain(), owner, reference, newObj, index); } } if (command == null) { command = AddCommand.create(getEditingDomain(), owner, reference, newObj); } return command; } return null; } }