package com.hundsun.ares.studio.biz.ui.action; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.transaction.RecordingCommand; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.StructuredSelection; import com.hundsun.ares.studio.biz.ParamType; import com.hundsun.ares.studio.biz.Parameter; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType; import com.hundsun.ares.studio.jres.metadata.resources.MetadataResourcesUtils; import com.hundsun.ares.studio.jres.model.metadata.MetadataFactory; import com.hundsun.ares.studio.jres.model.metadata.StandardField; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.reference.ReferenceManager; import com.hundsun.ares.studio.ui.util.DialogHelper; /** * ���������������ӵ���׼�ֶΣ� * ʹ��EMF��Command * @author xuzhen * */ public class AddToStdFieldAction extends Action { private static final Logger log = Logger.getLogger(AddToStdFieldAction.class); private IARESProject project = null; private ColumnViewer viewer = null; final static String ACTION_NAME = "��ӵ���׼�ֶ�"; private EditingDomain editingDomain; public AddToStdFieldAction( IARESProject project, ColumnViewer viewer,EditingDomain editingDomain) { super(ACTION_NAME); this.project = project; this.viewer = viewer; this.editingDomain = editingDomain; setId(IBizActionIDConstants.ADD_TO_STD_FIELD); } @Override public void run() { try { if (viewer.getSelection().isEmpty()) { throw new Exception("û��ѡ��Ԫ��"); } final List<Parameter> list = ((StructuredSelection) viewer.getSelection()).toList(); checkParams(list); RecordingCommand addCommand = new RecordingCommand((TransactionalEditingDomain) editingDomain, ACTION_NAME) { @Override protected void doExecute() { List<StandardField> stdFields = new ArrayList<StandardField>(); for (Parameter currentParam : list) { try { StandardField field = MetadataFactory.eINSTANCE.createStandardField(); field.setName(currentParam.getId()); field.setChineseName(currentParam.getName()); field.setDataType(currentParam.getType()); stdFields.add(field); currentParam.setParamType(ParamType.STD_FIELD); } catch (Exception e) { DialogHelper.showMessage("����", e.getMessage()); throw new OperationCanceledException(e.getMessage()); } } try { MetadataResourcesUtils.addStandardField(project, stdFields.toArray(new StandardField[0])); } catch (ARESModelException e) { e.printStackTrace(); log.error(e); DialogHelper.showMessage("����", e.getMessage()); } } }; editingDomain.getCommandStack().execute(addCommand); viewer.refresh(); } catch (Exception e) { DialogHelper.showMessage("����", e.getMessage()); e.printStackTrace(); } } /** * * @param params * @return ���������ȷ����true������ֱ���׳��쳣 */ private boolean checkParams(List<Parameter> params) throws Exception { for (Parameter param : params) { // FIXME ��ʱ��֧��ϵͳ���� // if (param instanceof SystemInputParameterDefine) { // throw new Exception("ϵͳ�������ܽ��в���"); // } ReferenceInfo refInfo = ReferenceManager.getInstance().getFirstReferenceInfo(project, IMetadataRefType.StdField, param.getId(), true); if (refInfo != null) { throw new Exception("��׼�ֶ�\"" + param.getId() + "\"�Ѵ���"); } if (param.getType().equals("")) { throw new Exception("ѡ�в���\"" + param.getId() + "\"�����Ͳ���Ϊ��"); } if (param.getRealType().equals("")) { throw new Exception("ѡ�в���\"" + param.getId() + "\"��Java���Ͳ���Ϊ��"); } } return true; } }