Program: 129841
Project: 129841
Buggy source:
private void createOperation(String newJobName,RepositoryNode target,CopyObjectAction copyObjectAction,TreeSelection selectionInClipboard){
  Object currentSource=selectionInClipboard.toArray()[0];
  try {
    IPath path=RepositoryNodeUtilities.getPath(target);
    if (((RepositoryNode)currentSource).getType().equals(ENodeType.REPOSITORY_ELEMENT)) {
      Item originalItem=((RepositoryNode)currentSource).getObject().getProperty().getItem();
      List<IRepositoryViewObject> allVersion=factory.getAllVersion(originalItem.getProperty().getId());
      for (      IRepositoryViewObject obj : allVersion) {
        if (obj.getVersion().equals(originalItem.getProperty().getVersion())) {
          originalItem=obj.getProperty().getItem();
          break;
        }
      }
      if (allVersion.size() == 1) {
        duplicateSingleVersionItem(originalItem,path,newJobName);
      }
 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(newJobName);
            if (needSys && originalItem instanceof RoutineItem) {
              String lastestVersion=getLastestVersion(selectedVersionItems);
              if (lastestVersion.equals(copy.getProperty().getVersion())) {
                synDuplicatedRoutine((RoutineItem)copy);
                needSys=false;
              }
            }
            final RepositoryWorkUnit<Object> workUnit=new RepositoryWorkUnit<Object>(this.getText(),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);
          }
        }
      }
    }
  }
 catch (  Exception e) {
    ExceptionHandler.process(e);
  }
}

Fixed version (ground truth):
private void createOperation(String newJobName,RepositoryNode target,CopyObjectAction copyObjectAction,TreeSelection selectionInClipboard){
  Object currentSource=selectionInClipboard.toArray()[0];
  try {
    IPath path=RepositoryNodeUtilities.getPath(target);
    if (((RepositoryNode)currentSource).getType().equals(ENodeType.REPOSITORY_ELEMENT)) {
      Item originalItem=((RepositoryNode)currentSource).getObject().getProperty().getItem();
      List<IRepositoryViewObject> allVersion=factory.getAllVersion(originalItem.getProperty().getId());
      for (      IRepositoryViewObject obj : allVersion) {
        if (obj.getVersion().equals(originalItem.getProperty().getVersion())) {
          originalItem=obj.getProperty().getItem();
          break;
        }
      }
      if (allVersion.size() == 1) {
        duplicateSingleVersionItem(originalItem,path,newJobName);
      }
 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(newJobName);
            copy.getProperty().setDisplayName(newJobName);
            if (needSys && originalItem instanceof RoutineItem) {
              String lastestVersion=getLastestVersion(selectedVersionItems);
              if (lastestVersion.equals(copy.getProperty().getVersion())) {
                synDuplicatedRoutine((RoutineItem)copy);
                needSys=false;
              }
            }
            final RepositoryWorkUnit<Object> workUnit=new RepositoryWorkUnit<Object>(this.getText(),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);
          }
        }
      }
    }
  }
 catch (  Exception e) {
    ExceptionHandler.process(e);
  }
}