Program: 125699
Project: 125699
Buggy source:
private void openDatabaseTableWizard(final DatabaseConnectionItem item,final MetadataTable metadataTable,final boolean forceReadOnly,final RepositoryNode node,final boolean creation){
  UIJob job=new UIJob(Messages.getString("String_Node_Str")){
    @Override public IStatus runInUIThread(    final IProgressMonitor monitor){
      String name="String_Node_Str" + getText();
      RepositoryWorkUnit<Object> repositoryWorkUnit=new RepositoryWorkUnit<Object>(name,this){
        @Override protected void run() throws LoginException, PersistenceException {
          monitor.beginTask(Messages.getString("String_Node_Str"),IProgressMonitor.UNKNOWN);
          if (!monitor.isCanceled()) {
            final ManagerConnection managerConnection=new ManagerConnection();
            DatabaseConnection connection=(DatabaseConnection)item.getConnection();
            String oldContextName=connection.getContextName();
            IMetadataConnection metadataConnection=ConvertionHelper.convert(connection,false,null);
            String newContextName=connection.getContextName();
            if (oldContextName != null && newContextName != null && !oldContextName.equals(newContextName)) {
              if (node != null && node.getObject() != null && node.getObject().getProperty() != null) {
                Item itemTemp=node.getObject().getProperty().getItem();
                if (itemTemp != null && itemTemp instanceof ConnectionItem) {
                  ConnectionItem connItem=(ConnectionItem)itemTemp;
                  SwitchContextGroupNameImpl.getInstance().updateContextGroup(connItem,newContextName);
                }
              }
            }
            if (!metadataConnection.getDbType().equals(EDatabaseConnTemplate.GODBC.getDBDisplayName()) && !metadataConnection.getDbType().equals(EDatabaseConnTemplate.ACCESS.getDBDisplayName()) && !metadataConnection.getDbType().equals(EDatabaseConnTemplate.GENERAL_JDBC.getDBDisplayName())) {
              String hiveMode=(String)metadataConnection.getParameter(ConnParameterKeys.CONN_PARA_KEY_HIVE_MODE);
              if (EDatabaseTypeName.HIVE.getDisplayName().equals(metadataConnection.getDbType())) {
                metadataConnection.setUrl(connection.getURL());
                if (HiveModeInfo.get(hiveMode) == HiveModeInfo.EMBEDDED) {
                  JavaSqlFactory.doHivePreSetup((DatabaseConnection)metadataConnection.getCurrentConnection());
                }
              }
 else {
                String genUrl=DatabaseConnStrUtil.getURLString(metadataConnection.getDbType(),metadataConnection.getDbVersionString(),metadataConnection.getServerName(),metadataConnection.getUsername(),metadataConnection.getPassword(),metadataConnection.getPort(),metadataConnection.getDatabase(),metadataConnection.getFileFieldName(),metadataConnection.getDataSourceName(),metadataConnection.getDbRootPath(),metadataConnection.getAdditionalParams());
                metadataConnection.setUrl(genUrl);
              }
            }
            if (connection != null) {
              EList<orgomg.cwm.objectmodel.core.Package> dp=connection.getDataPackage();
              Collection<Package> newDataPackage=EcoreUtil.copyAll(dp);
              ConnectionHelper.addPackages(newDataPackage,(DatabaseConnection)metadataConnection.getCurrentConnection());
            }
            if (creation) {
              String hiveMode=(String)metadataConnection.getParameter(ConnParameterKeys.CONN_PARA_KEY_HIVE_MODE);
              if (EDatabaseTypeName.HIVE.getDisplayName().equals(metadataConnection.getDbType())) {
                try {
                  HiveConnectionManager.getInstance().checkConnection(metadataConnection);
                }
 catch (                Exception e) {
                  e.printStackTrace();
                }
              }
 else {
                managerConnection.check(metadataConnection);
              }
              ExtractMetaDataUtils.getInstance().setUseAllSynonyms(false);
              IProxyRepositoryFactory factory=ProxyRepositoryFactory.getInstance();
              boolean repositoryObjectEditable=factory.isEditableAndLockIfPossible(node.getObject());
              if (!repositoryObjectEditable) {
                boolean flag=MessageDialog.openConfirm(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),Messages.getString("String_Node_Str"),Messages.getString("String_Node_Str"));
                if (flag) {
                  DatabaseTableWizard databaseTableWizard=new DatabaseTableWizard(PlatformUI.getWorkbench(),creation,node.getObject(),metadataTable,getExistingNames(),forceReadOnly,managerConnection,metadataConnection);
                  WizardDialog wizardDialog=new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),databaseTableWizard);
                  wizardDialog.setBlockOnOpen(true);
                  handleWizard(node,wizardDialog);
                }
              }
 else {
                DatabaseTableWizard databaseTableWizard=new DatabaseTableWizard(PlatformUI.getWorkbench(),creation,node.getObject(),metadataTable,getExistingNames(),forceReadOnly,managerConnection,metadataConnection);
                WizardDialog wizardDialog=new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),databaseTableWizard);
                wizardDialog.setBlockOnOpen(true);
                handleWizard(node,wizardDialog);
              }
            }
 else {
              final boolean skipStep=true;
              DatabaseTableWizard databaseTableWizard=new DatabaseTableWizard(PlatformUI.getWorkbench(),creation,node.getObject(),metadataTable,getExistingNames(),forceReadOnly,managerConnection,metadataConnection);
              databaseTableWizard.setSkipStep(skipStep);
              WizardDialog wizardDialog=new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),databaseTableWizard);
              handleWizard(node,wizardDialog);
            }
          }
        }
      }
;
      repositoryWorkUnit.setAvoidUnloadResources(isAvoidUnloadResources());
      IRepositoryService repositoryService=(IRepositoryService)GlobalServiceRegister.getDefault().getService(IRepositoryService.class);
      repositoryService.getProxyRepositoryFactory().executeRepositoryWorkUnit(repositoryWorkUnit);
      monitor.done();
      return Status.OK_STATUS;
    }
  }
;
  job.setUser(true);
  job.addJobChangeListener(new JobChangeAdapter(){
    @Override public void done(    IJobChangeEvent event){
      if (!event.getResult().isOK()) {
        log.error(event.getResult().getMessage(),event.getResult().getException());
      }
    }
  }
);
  job.schedule();
}

Fixed version (ground truth):
private void openDatabaseTableWizard(final DatabaseConnectionItem item,final MetadataTable metadataTable,final boolean forceReadOnly,final RepositoryNode node,final boolean creation){
  UIJob job=new UIJob(Messages.getString("String_Node_Str")){
    @Override public IStatus runInUIThread(    final IProgressMonitor monitor){
      String name="String_Node_Str" + getText();
      RepositoryWorkUnit<Object> repositoryWorkUnit=new RepositoryWorkUnit<Object>(name,this){
        @Override protected void run() throws LoginException, PersistenceException {
          monitor.beginTask(Messages.getString("String_Node_Str"),IProgressMonitor.UNKNOWN);
          if (!monitor.isCanceled()) {
            final ManagerConnection managerConnection=new ManagerConnection();
            DatabaseConnection connection=(DatabaseConnection)item.getConnection();
            String oldContextName=connection.getContextName();
            IMetadataConnection metadataConnection=ConvertionHelper.convert(connection,false,null);
            String newContextName=connection.getContextName();
            if (oldContextName != null && newContextName != null && !oldContextName.equals(newContextName)) {
              if (node != null && node.getObject() != null && node.getObject().getProperty() != null) {
                Item itemTemp=node.getObject().getProperty().getItem();
                if (itemTemp != null && itemTemp instanceof ConnectionItem) {
                  ConnectionItem connItem=(ConnectionItem)itemTemp;
                  SwitchContextGroupNameImpl.getInstance().updateContextGroup(connItem,newContextName);
                }
              }
            }
            if (!metadataConnection.getDbType().equals(EDatabaseConnTemplate.GODBC.getDBDisplayName()) && !metadataConnection.getDbType().equals(EDatabaseConnTemplate.ACCESS.getDBDisplayName()) && !metadataConnection.getDbType().equals(EDatabaseConnTemplate.GENERAL_JDBC.getDBDisplayName())) {
              String hiveMode=(String)metadataConnection.getParameter(ConnParameterKeys.CONN_PARA_KEY_HIVE_MODE);
              if (EDatabaseTypeName.HIVE.getDisplayName().equals(metadataConnection.getDbType())) {
                boolean useSSL=Boolean.valueOf(connection.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_USE_SSL));
                if (!useSSL) {
                  metadataConnection.setUrl(connection.getURL());
                }
                if (HiveModeInfo.get(hiveMode) == HiveModeInfo.EMBEDDED) {
                  JavaSqlFactory.doHivePreSetup((DatabaseConnection)metadataConnection.getCurrentConnection());
                }
              }
 else {
                String genUrl=DatabaseConnStrUtil.getURLString(metadataConnection.getDbType(),metadataConnection.getDbVersionString(),metadataConnection.getServerName(),metadataConnection.getUsername(),metadataConnection.getPassword(),metadataConnection.getPort(),metadataConnection.getDatabase(),metadataConnection.getFileFieldName(),metadataConnection.getDataSourceName(),metadataConnection.getDbRootPath(),metadataConnection.getAdditionalParams());
                metadataConnection.setUrl(genUrl);
              }
            }
            if (connection != null) {
              EList<orgomg.cwm.objectmodel.core.Package> dp=connection.getDataPackage();
              Collection<Package> newDataPackage=EcoreUtil.copyAll(dp);
              ConnectionHelper.addPackages(newDataPackage,(DatabaseConnection)metadataConnection.getCurrentConnection());
            }
            if (creation) {
              String hiveMode=(String)metadataConnection.getParameter(ConnParameterKeys.CONN_PARA_KEY_HIVE_MODE);
              if (EDatabaseTypeName.HIVE.getDisplayName().equals(metadataConnection.getDbType())) {
                try {
                  HiveConnectionManager.getInstance().checkConnection(metadataConnection);
                }
 catch (                Exception e) {
                  e.printStackTrace();
                }
              }
 else {
                managerConnection.check(metadataConnection);
              }
              ExtractMetaDataUtils.getInstance().setUseAllSynonyms(false);
              IProxyRepositoryFactory factory=ProxyRepositoryFactory.getInstance();
              boolean repositoryObjectEditable=factory.isEditableAndLockIfPossible(node.getObject());
              if (!repositoryObjectEditable) {
                boolean flag=MessageDialog.openConfirm(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),Messages.getString("String_Node_Str"),Messages.getString("String_Node_Str"));
                if (flag) {
                  DatabaseTableWizard databaseTableWizard=new DatabaseTableWizard(PlatformUI.getWorkbench(),creation,node.getObject(),metadataTable,getExistingNames(),forceReadOnly,managerConnection,metadataConnection);
                  WizardDialog wizardDialog=new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),databaseTableWizard);
                  wizardDialog.setBlockOnOpen(true);
                  handleWizard(node,wizardDialog);
                }
              }
 else {
                DatabaseTableWizard databaseTableWizard=new DatabaseTableWizard(PlatformUI.getWorkbench(),creation,node.getObject(),metadataTable,getExistingNames(),forceReadOnly,managerConnection,metadataConnection);
                WizardDialog wizardDialog=new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),databaseTableWizard);
                wizardDialog.setBlockOnOpen(true);
                handleWizard(node,wizardDialog);
              }
            }
 else {
              final boolean skipStep=true;
              DatabaseTableWizard databaseTableWizard=new DatabaseTableWizard(PlatformUI.getWorkbench(),creation,node.getObject(),metadataTable,getExistingNames(),forceReadOnly,managerConnection,metadataConnection);
              databaseTableWizard.setSkipStep(skipStep);
              WizardDialog wizardDialog=new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),databaseTableWizard);
              handleWizard(node,wizardDialog);
            }
          }
        }
      }
;
      repositoryWorkUnit.setAvoidUnloadResources(isAvoidUnloadResources());
      IRepositoryService repositoryService=(IRepositoryService)GlobalServiceRegister.getDefault().getService(IRepositoryService.class);
      repositoryService.getProxyRepositoryFactory().executeRepositoryWorkUnit(repositoryWorkUnit);
      monitor.done();
      return Status.OK_STATUS;
    }
  }
;
  job.setUser(true);
  job.addJobChangeListener(new JobChangeAdapter(){
    @Override public void done(    IJobChangeEvent event){
      if (!event.getResult().isOK()) {
        log.error(event.getResult().getMessage(),event.getResult().getException());
      }
    }
  }
);
  job.schedule();
}