Program: 127020
Project: 127020
Buggy source:
private void createOperation(final String newJobName,final RepositoryNode target,CopyObjectAction copyObjectAction,final TreeSelection selectionInClipboard){
  Object currentSource=selectionInClipboard.toArray()[0];
  try {
    final 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) {
        final PastSelectorDialog dialog=new PastSelectorDialog(Display.getCurrent().getActiveShell(),allVersion,sourceNode);
        final Item item=originalItem;
        if (dialog.open() == Window.OK) {
          final Set<IRepositoryViewObject> selectedVersionItems=dialog.getSelectedVersionItems();
          final IWorkspaceRunnable op=new IWorkspaceRunnable(){
            @Override public void run(            IProgressMonitor monitor) throws CoreException {
              try {
                Iterator<IRepositoryViewObject> iterator=selectedVersionItems.iterator();
                while (iterator.hasNext()) {
                  IRepositoryViewObject repObj=iterator.next();
                  Item selectedItem=repObj.getProperty().getItem();
                  if (!iterator.hasNext() && isHadoopClusterItem(selectedItem)) {
                    copyHadoopClusterItem(selectedItem,path,newJobName);
                    return;
                  }
                }
                String id=null;
                boolean isfirst=true;
                boolean needSys=true;
                for (                IRepositoryViewObject object : selectedVersionItems) {
                  Item selectedItem=object.getProperty().getItem();
                  Item copy;
                  copy=factory.copy(selectedItem,path,newJobName);
                  if (isfirst) {
                    id=copy.getProperty().getId();
                    isfirst=false;
                  }
                  copy.getProperty().setId(id);
                  if (needSys && item instanceof RoutineItem) {
                    String lastestVersion=getLastestVersion(selectedVersionItems);
                    if (lastestVersion.equals(copy.getProperty().getVersion())) {
                      synDuplicatedRoutine((RoutineItem)copy,selectedItem.getProperty().getLabel());
                      needSys=false;
                    }
                  }
                  if (copy instanceof ProcessItem || copy instanceof JobletProcessItem) {
                    RelationshipItemBuilder.getInstance().addOrUpdateItem(copy);
                  }
                  if (copy instanceof ConnectionItem) {
                    Connection connection=((ConnectionItem)copy).getConnection();
                    if (connection != null) {
                      connection.getSupplierDependency().clear();
                      connection.setLabel(newJobName);
                      connection.setName(newJobName);
                    }
                  }
                  factory.save(copy);
                  notifySQLExplorer(copy);
                }
              }
 catch (              PersistenceException e) {
                throw new CoreException(new Status(IStatus.ERROR,"String_Node_Str","String_Node_Str",e));
              }
catch (              BusinessException e) {
                throw new CoreException(new Status(IStatus.ERROR,"String_Node_Str","String_Node_Str",e));
              }
            }
          }
;
          IRunnableWithProgress iRunnableWithProgress=new IRunnableWithProgress(){
            @Override 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(false,false,iRunnableWithProgress);
          }
 catch (          InvocationTargetException e) {
            ExceptionHandler.process(e);
          }
catch (          InterruptedException e) {
          }
        }
      }
    }
  }
 catch (  Exception e) {
    ExceptionHandler.process(e);
  }
}

Fixed version (ground truth):
private void createOperation(final String newJobName,final RepositoryNode target,CopyObjectAction copyObjectAction,final TreeSelection selectionInClipboard){
  Object currentSource=selectionInClipboard.toArray()[0];
  try {
    final 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) {
        final PastSelectorDialog dialog=new PastSelectorDialog(Display.getCurrent().getActiveShell(),allVersion,sourceNode);
        final Item item=originalItem;
        if (dialog.open() == Window.OK) {
          final Set<IRepositoryViewObject> selectedVersionItems=dialog.getSelectedVersionItems();
          final IWorkspaceRunnable op=new IWorkspaceRunnable(){
            @Override public void run(            IProgressMonitor monitor) throws CoreException {
              try {
                Iterator<IRepositoryViewObject> iterator=selectedVersionItems.iterator();
                while (iterator.hasNext()) {
                  IRepositoryViewObject repObj=iterator.next();
                  Item selectedItem=repObj.getProperty().getItem();
                  if (!iterator.hasNext() && isHadoopClusterItem(selectedItem)) {
                    copyHadoopClusterItem(selectedItem,path,newJobName);
                    return;
                  }
                }
                String id=null;
                boolean isfirst=true;
                boolean needSys=true;
                List newItems=new ArrayList();
                for (                IRepositoryViewObject object : selectedVersionItems) {
                  Item selectedItem=object.getProperty().getItem();
                  Item copy;
                  copy=factory.copy(selectedItem,path,newJobName);
                  newItems.add(copy);
                  if (isfirst) {
                    id=copy.getProperty().getId();
                    isfirst=false;
                  }
                  copy.getProperty().setId(id);
                  if (needSys && item instanceof RoutineItem) {
                    String lastestVersion=getLastestVersion(selectedVersionItems);
                    if (lastestVersion.equals(copy.getProperty().getVersion())) {
                      synDuplicatedRoutine((RoutineItem)copy,selectedItem.getProperty().getLabel());
                      needSys=false;
                    }
                  }
                  if (copy instanceof ProcessItem || copy instanceof JobletProcessItem) {
                    RelationshipItemBuilder.getInstance().addOrUpdateItem(copy);
                  }
                  if (copy instanceof ConnectionItem) {
                    Connection connection=((ConnectionItem)copy).getConnection();
                    if (connection != null) {
                      connection.getSupplierDependency().clear();
                      connection.setLabel(newJobName);
                      connection.setName(newJobName);
                    }
                  }
                  factory.save(copy);
                  notifySQLExplorer(copy);
                }
                if (newItems.size() > 0) {
                  Collections.sort(newItems,new Comparator(){
                    @Override public int compare(                    Object o1,                    Object o2){
                      Item i1=(Item)o1;
                      Item i2=(Item)o2;
                      return i1.getProperty().getVersion().compareTo(i2.getProperty().getVersion());
                    }
                  }
);
                  Item item=(Item)newItems.get(newItems.size() - 1);
                  copyDataServiceRelateJob(item);
                }
              }
 catch (              PersistenceException e) {
                throw new CoreException(new Status(IStatus.ERROR,"String_Node_Str","String_Node_Str",e));
              }
catch (              BusinessException e) {
                throw new CoreException(new Status(IStatus.ERROR,"String_Node_Str","String_Node_Str",e));
              }
            }
          }
;
          IRunnableWithProgress iRunnableWithProgress=new IRunnableWithProgress(){
            @Override 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(false,false,iRunnableWithProgress);
          }
 catch (          InvocationTargetException e) {
            ExceptionHandler.process(e);
          }
catch (          InterruptedException e) {
          }
        }
      }
    }
  }
 catch (  Exception e) {
    ExceptionHandler.process(e);
  }
}