@Override
  @Execute
  public void execute(@Optional @Named(IServiceConstants.ACTIVE_SELECTION) IBindingManager bm) {
    if (bm.wIsSet("viewer") && Clipboard.instance().getInternalOrNativeEntityContents() == null) {
      IEntityPartViewer viewer = (IEntityPartViewer) bm.wGetValue("viewer");
      if (ClipboardUtils.hasTextFocus(viewer) || ClipboardUtils.hasTextSeletion(viewer)) {
        IEntity focusEntity = bm.wGet("focusEntity");
        ITextualEntityPart focusPart =
            (ITextualEntityPart) viewer.getEditPartRegistry().get(focusEntity);

        String textContents = Clipboard.instance().getTextContents();
        Command command = focusPart.getCommand(TextualRequest.createInsertRequest(textContents));

        CommandStack commandStack = viewer.getEditDomain().getCommandStack();
        if (command instanceof ITextCommand) {
          TextTransactionCommand transactionCommand = new TextTransactionCommand();
          transactionCommand.setModel(focusEntity);
          transactionCommand.merge((ITextCommand) command);
          transactionCommand.setLabel(getLabel(bm));
          commandStack.execute(transactionCommand);
        } else {
          command.setLabel(getLabel(bm) + " text");
          commandStack.execute(command);
        }
        return;
      }
    }
    super.execute(bm);
  }
 /*
  * (non-Javadoc)
  *
  * @see org.eclipse.papyrus.layout.LayouttoolInterface#execute(java.util.Map)
  */
 public void execute(Map<EditPart, Rectangle> map) {
   TransactionalEditingDomain ted = getTransactionalEditingDomain();
   if (ted != null) {
     CommandStack cs = null;
     // Add a command to apply new bounds of all nodes
     for (Entry<EditPart, Rectangle> s : map.entrySet()) {
       SetBoundsCommand boundsCommand =
           new SetBoundsCommand(
               ted,
               "apply layout",
               new EObjectAdapter((View) s.getKey().getModel()),
               s.getValue());
       command.add(boundsCommand);
       GraphicalEditPart gep = (GraphicalEditPart) s.getKey();
       if (cs == null) {
         cs = gep.getViewer().getEditDomain().getCommandStack();
       }
     }
     try {
       // Execute layout commands with animation
       Animation.markBegin();
       cs.execute(new ICommandProxy(command));
       Animation.run(1000);
     } catch (Exception e) {
       Activator.getDefault().log(e.getMessage() + " : Cannot apply new bounds of all nodes", e);
     }
   }
 }
 /**
  * Executes the specified command.
  *
  * @param command a command
  */
 private void execute(Command command) {
   CommandStack commandStack = getCommandStack();
   if (commandStack != null) {
     commandStack.execute(command);
   } else {
     throw new IllegalArgumentException("Could not execute command. No command stack available");
   }
 }
 @SuppressWarnings("unchecked")
 public void run() {
   List<ICloneableModel> model = (List<ICloneableModel>) Clipboard.getDefault().getContents();
   if (model == null) {
     return;
   }
   CommandStack stack =
       (CommandStack) ((VisualDBEditor) getWorkbenchPart()).getAdapter(CommandStack.class);
   stack.execute(new PasteCommand(model));
 }
  /** 将工作流树节点对象保存到指定目录下 文件名为该对象的id */
  public static void SaveFileModelToFile(FileModel fileModel) throws IOException {
    if (fileModel == null) {
      logger.error("传入的FileModel的为空,保存失败!");
      return;
    }

    //		File file = fileModel.getFile();
    // 数据库设计文件
    File spdFile =
        new File(
            SystemConstants.WORKSPACEPATH,
            fileModel.getFolderName() + File.separator + SystemConstants.ZIP_FILE_SUNCARDDESIGNER);
    if (!spdFile.exists()) {
      spdFile.createNewFile();
    }

    // 表格初始化信息文件
    File spddFile =
        new File(
            SystemConstants.WORKSPACEPATH,
            fileModel.getFolderName()
                + File.separator
                + SystemConstants.ZIP_FILE_SUNCARDDESIGNER_DATA);
    if (!spddFile.exists()) {
      spddFile.createNewFile();
    }
    //		// 存放表格初始化信息的文件夹
    //		File spddFolder = new File(SystemConstants.WORKSPACEPATH,
    //				fileModel.getFolderName() + File.separator +
    // SystemConstants.ZIP_FILE_SUNCARDDESIGNER_DATA_FOLDER + File.separator);
    //		if(!spddFolder.exists()) {
    //			spddFolder.mkdirs();
    //		}

    Document document = SwitchObjAndXml.getDocFromFileModel(fileModel);
    // 写入设计文件信息
    OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(spdFile), "UTF-8");
    out.write(document.asXML());
    out.close();

    // 写入表格初始化信息
    document = SwitchObjAndXml.getInitTableDataDocFromFileModel(fileModel);
    out = new OutputStreamWriter(new FileOutputStream(spddFile), "UTF-8");
    out.write(document.asXML());
    out.close();

    // 给文件模型对应的CommandStack设定保存点
    CommandStack commandStack = DefaultViewPart.getFileCommandFromObj(fileModel);
    if (commandStack != null) {
      commandStack.markSaveLocation();
    }
  }
 public void run(IAction action) {
   CommandStack commandStack;
   String eventType = getEventType(action.getId());
   if (eventType == null) return;
   if (targetPart instanceof ContentOutline) {
     commandStack =
         ((DesignerOutlineViewer) ((ContentOutline) targetPart).getCurrentPage())
             .getCommandStack();
   } else if (targetPart instanceof DesignerEditor) {
     commandStack = ((DesignerEditor) targetPart).getCommandStack();
   } else return;
   GraphElementAddActionCommand command = new GraphElementAddActionCommand();
   command.setTarget(getTargetElement());
   command.setEventType(eventType);
   commandStack.execute(command);
 }
 protected void doubleClicked() {
   super.doubleClicked();
   // open custom editor pane if one exists
   WorkDefinition workDefinition = getWorkDefinition();
   if (workDefinition instanceof WorkDefinitionExtension) {
     String editor = ((WorkDefinitionExtension) workDefinition).getCustomEditor();
     if (editor != null) {
       Work work = openEditor(editor, workDefinition);
       if (work != null) {
         SetWorkCommand setCommand = new SetWorkCommand();
         setCommand.setPropertyValue(work);
         CommandStack stack = getViewer().getEditDomain().getCommandStack();
         stack.execute(setCommand);
       }
     }
   }
 }
  /** 将工作流树节点对象保存到指定目录下 文件名为该对象的id */
  public static void SaveProjectModelToFile(ProjectModel projectModel) throws IOException {
    if (projectModel == null) {
      logger.error("传入的FileModel的为空,保存失败!");
      return;
    }

    // 数据库设计文件
    File ppdFile =
        new File(
            SystemConstants.PROJECTSPACEPATH,
            projectModel.getFolderName() + File.separator + SystemConstants.ZIP_FILE_PROJECT);
    if (!ppdFile.exists()) {
      ppdFile.createNewFile();
    }

    // 表格初始化信息文件
    File spddFile =
        new File(
            SystemConstants.PROJECTSPACEPATH,
            projectModel.getFolderName()
                + File.separator
                + SystemConstants.ZIP_FILE_SUNCARDDESIGNER_DATA);
    if (!spddFile.exists()) {
      spddFile.createNewFile();
    }

    Document document = SwitchObjAndXml.getDocFromProjectModel(projectModel);
    // 写入项目文件信息
    OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(ppdFile), "UTF-8");
    out.write(document.asXML());
    out.close();

    // 写入表格初始化信息
    document = SwitchObjAndXml.getInitTableDataDocFromProjectModel(projectModel);
    out = new OutputStreamWriter(new FileOutputStream(spddFile), "UTF-8");
    out.write(document.asXML());
    out.close();

    // 给文件模型对应的CommandStack设定保存点
    CommandStack commandStack =
        ProjectDefaultViewPart.getCommandStackFromProjectModel(projectModel);
    if (commandStack != null) {
      commandStack.markSaveLocation();
    }
  }
  /**
   * ggu Comment method "changeContextOrder".
   *
   * <p>order the context parameter
   */
  public static boolean changeContextOrder(
      TreeViewer viewer, IContextModelManager modelManager, boolean up) {
    if (viewer == null || modelManager == null) {
      return false;
    }
    final ISelection selection = viewer.getSelection();
    if (selection == null || selection.isEmpty()) {
      return false;
    }
    if (!(selection instanceof IStructuredSelection)) {
      return false;
    }
    IStructuredSelection sSection = (IStructuredSelection) selection;
    if (sSection.size() != 1) { // not support multi-selection
      return false;
    }

    Object element = sSection.getFirstElement();
    IContextParameter movedParam = null;
    if (element instanceof ContextVariableTabParentModel) {
      movedParam = ((ContextVariableTabParentModel) element).getContextParameter();
    }

    if (element instanceof ContextTableTabParentModel) {
      movedParam = ((ContextTableTabParentModel) element).getContextParameter();
    }
    if (movedParam == null) {
      return false;
    }

    OrderContextParameterCommand orderCommand =
        new OrderContextParameterCommand(modelManager.getContextManager(), movedParam, up);
    final CommandStack commandStack = modelManager.getCommandStack();
    if (commandStack != null) {
      commandStack.execute(orderCommand);
    } else {
      orderCommand.execute();
    }
    //
    modelManager.refresh();

    revertTreeSelection(viewer, movedParam);

    return orderCommand.isExecution();
  }
  /**
   * ggu Comment method "changeContextOrder".
   *
   * <p>order the context parameter
   */
  public static boolean changeContextOrder(
      ISelection selObj, IContextModelManager modelManager, boolean up) {
    if (selObj == null || selObj.isEmpty()) {
      return false;
    }
    if (!(selObj instanceof IStructuredSelection)) {
      return false;
    }
    IStructuredSelection sSection = (IStructuredSelection) selObj;
    if (sSection.size() != 1) { // not support multi-selection
      return false;
    }

    Object element = sSection.getFirstElement();
    Object model = ((ContextTreeNode) element).getTreeData();
    IContextParameter movedParam = null;

    if (model instanceof ContextTableTabParentModel) {
      movedParam = ((ContextTableTabParentModel) model).getContextParameter();
    } else if (model instanceof ContextTableTabChildModel) { // for bug TDI-32821
      movedParam = ((ContextTableTabChildModel) model).getContextParameter();
    }
    if (movedParam == null) {
      return false;
    }

    OrderContextParameterCommand orderCommand =
        new OrderContextParameterCommand(modelManager.getContextManager(), movedParam, up);
    final CommandStack commandStack = modelManager.getCommandStack();
    if (commandStack != null) {
      commandStack.execute(orderCommand);
    } else {
      orderCommand.execute();
    }

    modelManager.refresh();

    return orderCommand.isExecution();
  }
  /**
   * Constructs a new {@link UndoablePropertySheetPage}.
   *
   * @param commandStack The {@link CommandStack} shared with the editor.
   * @param undoAction The global action handler to be registered for undo operations.
   * @param redoAction The global action handler to be registered for redo operations.
   */
  public UndoablePropertySheetPage(
      final CommandStack commandStack, IAction undoAction, IAction redoAction) {
    this.undoHandler = undoAction;
    this.redoHandler = redoAction;
    this.commandStack = commandStack;
    this.commandStackEventListener =
        new CommandStackEventListener() {

          public void stackChanged(CommandStackEvent event) {
            if (event.getDetail() == CommandStack.PRE_UNDO
                || event.getDetail() == CommandStack.PRE_REDO) {
              // ensure the property sheet entry looses its current edit
              // state, otherwise it may revert the undo/redo operation
              // within valueChanged when the editor is activated again.
              refresh();
            }
          }
        };
    commandStack.addCommandStackEventListener(commandStackEventListener);
    setRootEntry(new UndoablePropertySheetEntry(commandStack));
  }
  private void deleteConnections(Collection<ConnectionFigure> connections) {
    boolean dirty = false;
    List<Connection> connectionsToDelete = new ArrayList<>();
    for (ConnectionFigure connectionFigure : connections) {
      connectionsToDelete.add(connectionFigure.getConnection());
      dirty = true;
    }

    if (editorsCommandStack == null) {
      description.removeConnections(connectionsToDelete);
      targetTreeViewer.refresh();
      sourceTreeViewer.refresh();
    } else {
      ConnectionDeleteCommand connectionDeleteCommand =
          new ConnectionDeleteCommand(description, connectionsToDelete);
      editorsCommandStack.execute(connectionDeleteCommand);
    }

    if (dirty) {
      repaint();
    }
  }
 /**
  * Overwritten to unregister command stack listener.
  *
  * @see org.eclipse.ui.views.properties.PropertySheetPage#dispose()
  */
 public void dispose() {
   if (commandStack != null)
     commandStack.removeCommandStackEventListener(commandStackEventListener);
   super.dispose();
 }
 protected void execute(Command command) {
   CommandStack commandStack = (CommandStack) editor.getAdapter(CommandStack.class);
   commandStack.execute(command);
 }