protected MCommand findCommand(String commandId) {
   for (MCommand cmd : application.getCommands()) {
     if (commandId.equals(cmd.getElementId())) {
       return cmd;
     }
   }
   return null;
 }
 public static MCommand getCommandById(MApplication app, String cmdId) {
   final List<MCommand> cmds = app.getCommands();
   for (MCommand cmd : cmds) {
     if (cmdId.equals(cmd.getElementId())) {
       return cmd;
     }
   }
   return null;
 }
  @Override
  public String getDetailLabel(Object element) {
    MCommand cmd = (MCommand) element;
    if (cmd.getCommandName() != null && cmd.getCommandName().trim().length() > 0) {
      return cmd.getCommandName();
    }

    return null;
  }
  /**
   * @param cmd
   * @param modelService
   * @param categoryModel
   * @return a command model element
   * @throws NotDefinedException
   */
  public static MCommand createCommand(
      Command cmd, EModelService modelService, final MCategory categoryModel)
      throws NotDefinedException {
    MCommand command = modelService.createModelElement(MCommand.class);
    command.setElementId(cmd.getId());
    command.setCategory(categoryModel);
    command.setCommandName(cmd.getName());
    command.setDescription(cmd.getDescription());

    // deal with parameters
    // command.getParameters().addAll(parameters);
    IParameter[] cmdParms = cmd.getParameters();
    if (cmdParms != null) {
      for (IParameter cmdParm : cmdParms) {
        MCommandParameter parmModel = modelService.createModelElement(MCommandParameter.class);
        parmModel.setElementId(cmdParm.getId());
        parmModel.setName(cmdParm.getName());
        parmModel.setOptional(cmdParm.isOptional());
        ParameterType parmType = cmd.getParameterType(cmdParm.getId());
        if (parmType != null) {
          parmModel.setTypeId(parmType.getId());
        }
        command.getParameters().add(parmModel);
      }
    }
    return command;
  }
 private void createCommand(MCommand cmdModel) {
   IParameter[] parms = null;
   String id = cmdModel.getElementId();
   String name = localize(cmdModel.getCommandName(), cmdModel);
   String desc = localize(cmdModel.getDescription(), cmdModel);
   List<MCommandParameter> modelParms = cmdModel.getParameters();
   if (modelParms != null && !modelParms.isEmpty()) {
     ArrayList<Parameter> parmList = new ArrayList<>();
     for (MCommandParameter cmdParm : modelParms) {
       ParameterType parameterType = null;
       if (cmdParm.getTypeId() != null && cmdParm.getTypeId().length() > 0) {
         parameterType = commandManager.getParameterType(cmdParm.getTypeId());
       }
       parmList.add(
           new Parameter(
               cmdParm.getElementId(),
               cmdParm.getName(),
               null,
               parameterType,
               cmdParm.isOptional()));
     }
     parms = parmList.toArray(new Parameter[parmList.size()]);
   }
   Category cat = undefinedCategory;
   if (cmdModel.getCategory() != null) {
     cat = commandService.getCategory(cmdModel.getCategory().getElementId());
   }
   commandService.defineCommand(id, name, desc, cat, parms);
 }
    @Override
    public boolean performFinish() {

      MCommand command = CommandsFactoryImpl.eINSTANCE.createCommand();
      MHandler handler = CommandsFactoryImpl.eINSTANCE.createHandler();
      MKeyBinding keyBinding = null;

      String parentId = application.getElementId();

      String prefix =
          parentId != null && parentId.trim().length() > 0
              ? parentId + "."
              : ""; //$NON-NLS-1$ //$NON-NLS-2$

      if (handlerPage.idField.getText().trim().length() > 0) {
        command.setElementId(
            prefix + "commands." + handlerPage.idField.getText().trim()); // $NON-NLS-1$
        handler.setElementId(
            prefix + "handlers." + handlerPage.idField.getText().trim()); // $NON-NLS-1$
      }

      if (application.getBindingTables().size() != 0) {
        if (keyPage.keyField.getText().trim().length() > 0
            && !keyPage.bindtableViewer.getSelection().isEmpty()) {
          keyBinding = CommandsFactoryImpl.eINSTANCE.createKeyBinding();
          keyBinding.setKeySequence(keyPage.keyField.getText().trim());
          keyBinding.setCommand(command);
        }
      }

      command.setCommandName(handlerPage.nameField.getText());
      handler.setCommand(command);

      CompoundCommand cmd = new CompoundCommand();
      cmd.append(
          AddCommand.create(
              getEditingDomain(),
              application,
              ApplicationPackageImpl.Literals.APPLICATION__COMMANDS,
              command));
      cmd.append(
          AddCommand.create(
              getEditingDomain(),
              application,
              CommandsPackageImpl.Literals.HANDLER_CONTAINER__HANDLERS,
              handler));

      if (keyBinding != null) {
        cmd.append(
            AddCommand.create(
                getEditingDomain(),
                ((IStructuredSelection) keyPage.bindtableViewer.getSelection()).getFirstElement(),
                CommandsPackageImpl.Literals.BINDING_TABLE__BINDINGS,
                keyBinding));
      }

      if (cmd.canExecute()) {
        getEditingDomain().getCommandStack().execute(cmd);
        return true;
      }

      return false;
    }