@Override
  protected IContributionItem[] getItems() {

    Object selection = contextProvider.getContext().get(ESelectionService.class).getSelection();
    if (!(selection instanceof IBindingManager) || !((IBindingManager) selection).wIsSet("self"))
      return new IContributionItem[0];

    IBindingManager bm = (IBindingManager) selection;
    String languageURI = bm.wGet("self").wGetLanguageKit().getURI();

    Map<GuardedAction, String> actionsMap = new HashMap<GuardedAction, String>();
    IResourceRegistry<Resource> registry = ActionsRegistry.instance();
    for (IResource resource : registry.getResources(false)) {
      LanguageActionFactory actionsModule = resource.getEntity();
      URI targetLanguage = actionsModule.getTargetLanguage();
      if (DataTypeUtils.getDataKind(targetLanguage).isString()
          && !languageURI.equals(targetLanguage.getValue())) continue;

      for (GuardedAction guardedAction :
          Matcher.findAll(
              ActionsEntityDescriptorEnum.GuardedAction, getActions(actionsModule), false)) {
        String actionName = guardedAction.getName().getValue();
        String functionUri = resource.getURI() + '#' + actionName;
        actionsMap.put(guardedAction, functionUri);
      }
    }

    List<IAction> actions = new ArrayList<IAction>();
    List<GuardedAction> guardedActions = new ArrayList<GuardedAction>(actionsMap.keySet());
    Collections.sort(
        guardedActions,
        new Comparator<GuardedAction>() {
          public int compare(GuardedAction a1, GuardedAction a2) {
            return a1.getName().getValue().compareTo(a2.getName().getValue());
          }
        });

    for (GuardedAction guardedAction : guardedActions) {
      String actionName = guardedAction.getName().getValue();
      String functionUri = actionsMap.get(guardedAction);
      IUpdatableAction action =
          contextProvider
              .getActionRegistry()
              .getActionFactory()
              .createActionCallAction(
                  actionName, isAnalyze(), guardedAction.getEnablerPredicate(), functionUri);
      action.update();
      actions.add(action);
    }

    List<IContributionItem> items = new ArrayList<IContributionItem>();
    HierarchicalFillMenuStrategy.instance()
        .fillMenu(
            ActionListContainer.create(items),
            ActionSet.create(actions.toArray(new IAction[actions.size()])),
            0,
            actions.size());

    return items.toArray(new IContributionItem[items.size()]);
  }
  @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);
  }
 protected void apply(IEntityIterator<?> iterator) {
   IBindingManager bm = getBindings();
   ITransactionScope resettableScope = BindingManagerFactory.instance.createTransactionScope();
   bm.wEnterScope(resettableScope);
   for (IEntity e : iterator) {
     bm.setResult(e);
     resettableScope.commit();
   }
   resettableScope.rollback();
   bm.wExitScope();
 }
 @Override
 @CanExecute
 public boolean canExecute(
     @Optional @Named(IServiceConstants.ACTIVE_SELECTION) IBindingManager bm) {
   try {
     if (bm.wIsSet("viewer") && Clipboard.instance().getInternalOrNativeEntityContents() == null) {
       IEntityPartViewer viewer = (IEntityPartViewer) bm.wGetValue("viewer");
       if (ClipboardUtils.hasTextFocus(viewer) || ClipboardUtils.hasTextSeletion(viewer))
         return true;
     }
     return super.canExecute(bm);
   } catch (Exception e) {
     return false;
   }
 }
  public static void moveArtifactsIntoWorkspace(IEntity artifacts, IBindingManager bm) {
    switch (artifacts.wGetEntityDescriptor().getOrdinal()) {
      case ArtifactsEntityDescriptorEnum.Workspace_ord:
        Projects projectsPoint = (Projects) bm.wGet("projectsPoint");
        if (projectsPoint == null) throw new IllegalArgumentException("projectsPoint is undefined");

        IEntityIterator<Project> projectIterator = IteratorFactory.childIterator();
        projectIterator.reset(((Workspace) artifacts).getProjects());
        for (Project project : projectIterator) {
          projectIterator.remove();
          projectsPoint.add(project);
        }
        break;
      case ArtifactsEntityDescriptorEnum.Artifacts_ord:
        Artifacts packagesPoint = (Artifacts) bm.wGet("packagesPoint");
        if (packagesPoint == null) throw new IllegalArgumentException("packagesPoint is undefined");

        IEntityIterator<Artifact> artifactIterator = IteratorFactory.childIterator();
        artifactIterator.reset(artifacts);
        for (Artifact artifact : artifactIterator) {
          artifactIterator.remove();
          packagesPoint.add(artifact);
        }
        break;
      case ArtifactsEntityDescriptorEnum.PackageArtifact_ord:
      case ArtifactsEntityDescriptorEnum.FolderArtifact_ord:
        packagesPoint = (Artifacts) bm.wGet("packagesPoint");
        if (packagesPoint == null) throw new IllegalArgumentException("packagesPoint is undefined");

        packagesPoint.add((Artifact) artifacts);
        break;
      case ArtifactsEntityDescriptorEnum.FileArtifact_ord:
        Artifacts packageArtifactsPoint = (Artifacts) bm.wGet("packageArtifactsPoint");
        if (packageArtifactsPoint == null)
          throw new IllegalArgumentException("packageArtifactsPoint is undefined");

        packageArtifactsPoint.add((FileArtifact) artifacts);
        break;
    }
  }