Program: 129677
Project: 129677
Buggy source:
public void execute(RepositoryNode sourceNode,RepositoryNode targetNode) throws Exception {
  if (!validateAction(sourceNode,targetNode)) {
    return;
  }
  if (targetNode.getType() == ENodeType.REPOSITORY_ELEMENT) {
    targetNode=targetNode.getParent();
  }
  IPath path=RepositoryNodeUtilities.getPath(targetNode);
  if (sourceNode.getType().equals(ENodeType.REPOSITORY_ELEMENT)) {
    Item originalItem=sourceNode.getObject().getProperty().getItem();
    List<IRepositoryViewObject> allVersion=factory.getAllVersion(originalItem.getProperty().getId());
    if (allVersion.size() == 1) {
      copySingleVersionItem(originalItem,path);
    }
 else     if (allVersion.size() > 1) {
      PastSelectorDialog dialog=new PastSelectorDialog(Display.getCurrent().getActiveShell(),allVersion,sourceNode);
      if (dialog.open() == Window.OK) {
        Set<IRepositoryViewObject> selectedVersionItems=dialog.getSelectedVersionItems();
        String id=null;
        String label=null;
        boolean isfirst=true;
        boolean needSys=true;
        for (        IRepositoryViewObject object : selectedVersionItems) {
          Item selectedItem=object.getProperty().getItem();
          final Item copy=factory.copy(selectedItem,path);
          if (isfirst) {
            id=copy.getProperty().getId();
            label=copy.getProperty().getLabel();
            isfirst=false;
          }
          copy.getProperty().setId(id);
          copy.getProperty().setLabel(label);
          copy.getProperty().setDisplayName(label);
          if (needSys && originalItem instanceof RoutineItem) {
            String lastestVersion=getLastestVersion(selectedVersionItems);
            if (lastestVersion.equals(copy.getProperty().getVersion())) {
              synDuplicatedRoutine((RoutineItem)copy);
              needSys=false;
            }
          }
          RepositoryWorkUnit<Object> workUnit=new RepositoryWorkUnit<Object>("String_Node_Str",this){
            @Override protected void run() throws LoginException, PersistenceException {
              if (copy instanceof ProcessItem) {
                RelationshipItemBuilder.getInstance().addOrUpdateItem((ProcessItem)copy);
              }
              factory.save(copy);
            }
          }
;
          workUnit.setAvoidUnloadResources(true);
          factory.executeRepositoryWorkUnit(workUnit);
        }
      }
    }
  }
}

Fixed version (ground truth):
public void execute(RepositoryNode sourceNode,RepositoryNode targetNode) throws Exception {
  if (!validateAction(sourceNode,targetNode)) {
    return;
  }
  if (targetNode.getType() == ENodeType.REPOSITORY_ELEMENT) {
    targetNode=targetNode.getParent();
  }
  IPath path=RepositoryNodeUtilities.getPath(targetNode);
  if (sourceNode.getType().equals(ENodeType.REPOSITORY_ELEMENT)) {
    Item originalItem=sourceNode.getObject().getProperty().getItem();
    List<IRepositoryViewObject> allVersion=factory.getAllVersion(originalItem.getProperty().getId());
    if (allVersion.size() == 1) {
      copySingleVersionItem(originalItem,path);
    }
 else     if (allVersion.size() > 1) {
      PastSelectorDialog dialog=new PastSelectorDialog(Display.getCurrent().getActiveShell(),allVersion,sourceNode);
      if (dialog.open() == Window.OK) {
        Set<IRepositoryViewObject> selectedVersionItems=dialog.getSelectedVersionItems();
        String id=null;
        String label=null;
        boolean isfirst=true;
        boolean needSys=true;
        for (        IRepositoryViewObject object : selectedVersionItems) {
          Item selectedItem=object.getProperty().getItem();
          final Item copy=factory.copy(selectedItem,path);
          if (isfirst) {
            id=copy.getProperty().getId();
            label=copy.getProperty().getLabel();
            isfirst=false;
          }
          copy.getProperty().setId(id);
          copy.getProperty().setLabel(label);
          copy.getProperty().setDisplayName(label);
          if (needSys && originalItem instanceof RoutineItem) {
            String lastestVersion=getLastestVersion(selectedVersionItems);
            if (lastestVersion.equals(copy.getProperty().getVersion())) {
              synDuplicatedRoutine((RoutineItem)copy);
              needSys=false;
            }
          }
          final IWorkspaceRunnable op=new IWorkspaceRunnable(){
            public void run(            IProgressMonitor monitor) throws CoreException {
              if (copy instanceof ProcessItem) {
                RelationshipItemBuilder.getInstance().addOrUpdateItem((ProcessItem)copy);
              }
              try {
                factory.save(copy);
              }
 catch (              PersistenceException e) {
                ExceptionHandler.process(e);
              }
            }
          }
;
          IRunnableWithProgress iRunnableWithProgress=new IRunnableWithProgress(){
            public void run(            IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
              IWorkspace workspace=ResourcesPlugin.getWorkspace();
              try {
                ISchedulingRule schedulingRule=workspace.getRoot();
                workspace.run(op,schedulingRule,IWorkspace.AVOID_UPDATE,monitor);
              }
 catch (              CoreException e) {
                throw new InvocationTargetException(e);
              }
            }
          }
;
          try {
            new ProgressMonitorDialog(null).run(true,true,iRunnableWithProgress);
          }
 catch (          InvocationTargetException e) {
            ExceptionHandler.process(e);
          }
catch (          InterruptedException e) {
          }
        }
      }
    }
  }
}