Program: 120588
Project: 120588
Buggy source:
@Override public ExecutionResult execute(Item item){
  if (item instanceof ConnectionItem) {
    try {
      URI itemURI=getItemURI(item);
      if (itemURI != null) {
        URI itemResourceURI=getItemResourceURI(itemURI);
        if (metadata400to410 == null) {
          metadata400to410=new TosMetadataMigrationFrom400to410();
        }
        Resource migratedResource=metadata400to410.migrate(itemResourceURI.toString(),new NullProgressMonitor());
        HashMap<String,Object> xmlSaveOtions=XML_SAVE_OTIONS_1_0;
        if (migratedResource != null) {
          EObject content=migratedResource.getContents().get(0);
          if (content != null && "String_Node_Str".equals(content.eClass().getName())) {
            ByteArrayOutputStream tempStream=new ByteArrayOutputStream();
            try {
              try {
                migratedResource.save(tempStream,XML_SAVE_OTIONS_1_0);
              }
 catch (              Exception e) {
                tempStream=new ByteArrayOutputStream();
                xmlSaveOtions=XML_SAVE_OTIONS_1_1;
                migratedResource.save(tempStream,xmlSaveOtions);
              }
 finally {
                tempStream.close();
              }
              migratedResource=resourceSet.createResource(URI.createURI("String_Node_Str"));
              migratedResource.load(new ByteArrayInputStream(tempStream.toByteArray()),xmlSaveOtions);
              DatabaseConnection databaseConnection=SwitchHelpers.DATABASECONNECTION_SWITCH.doSwitch(migratedResource.getContents().get(0));
              String databaseType=databaseConnection.getDatabaseType();
              databaseConnection.setDriverClass(ExtractMetaDataUtils.getDriverClassByDbType(databaseType));
              EDatabaseTypeName currentType=EDatabaseTypeName.getTypeFromDbType(databaseType);
              EDatabaseSchemaOrCatalogMapping curCatalog=currentType.getCatalogMappingField();
              EDatabaseSchemaOrCatalogMapping curSchema=currentType.getSchemaMappingField();
              if (!curCatalog.equals(EDatabaseSchemaOrCatalogMapping.None)) {
                List<Schema> schemas=ConnectionHelper.getSchema(databaseConnection);
                if (!curSchema.equals(EDatabaseSchemaOrCatalogMapping.None)) {
                  ConnectionHelper.removeSchemas(schemas,databaseConnection);
                  for (                  Schema schema : schemas) {
                    String schemaName=computeSchemaName(schema,databaseConnection,curSchema);
                    String catalogName=computeCatalogName(databaseConnection,curCatalog);
                    schema.setName(schemaName);
                    Catalog catalog=RelationalFactory.eINSTANCE.createCatalog();
                    migratedResource.getContents().add(catalog);
                    catalog.setName(catalogName);
                    CatalogHelper.addSchemas(Collections.singleton(schema),catalog);
                    ConnectionHelper.addCatalog(catalog,databaseConnection);
                  }
                }
 else {
                  for (                  Schema schema : schemas) {
                    String catalogName=computeCatalogName(databaseConnection,curCatalog);
                    Catalog catalog=RelationalFactory.eINSTANCE.createCatalog();
                    migratedResource.getContents().add(catalog);
                    catalog.setName(catalogName);
                    catalog.getOwnedElement().addAll(schema.getOwnedElement());
                    ConnectionHelper.addCatalog(catalog,databaseConnection);
                    ConnectionHelper.removeSchemas(Collections.singleton(schema),databaseConnection);
                  }
                }
              }
 else               if (!curSchema.equals(EDatabaseSchemaOrCatalogMapping.None)) {
                List<Schema> schemas=ConnectionHelper.getSchema(databaseConnection);
                for (                Schema schema : schemas) {
                  String schemaName=computeSchemaName(schema,databaseConnection,curSchema);
                  schema.setName(schemaName);
                }
              }
            }
 catch (            Exception e) {
              log.error("String_Node_Str" + itemResourceURI.toString(),e);
              ExceptionHandler.process(e);
            }
 finally {
              tempStream.close();
            }
          }
          OutputStream outputStream=item.eResource().getResourceSet().getURIConverter().createOutputStream(itemResourceURI,null);
          try {
            migratedResource.save(outputStream,xmlSaveOtions);
          }
  finally {
            outputStream.close();
          }
        }
        return ExecutionResult.SUCCESS_WITH_ALERT;
      }
    }
 catch (    ATLCoreException e) {
      log.error(e);
      ExceptionHandler.process(e);
      return ExecutionResult.SUCCESS_NO_ALERT;
    }
catch (    IOException e) {
      log.error(e);
      ExceptionHandler.process(e);
      return ExecutionResult.SUCCESS_NO_ALERT;
    }
 finally {
      resourceSet.getResources().clear();
    }
  }
  return ExecutionResult.NOTHING_TO_DO;
}

Fixed version (ground truth):
@Override public ExecutionResult execute(Item item){
  if (item instanceof ConnectionItem) {
    try {
      URI itemURI=getItemURI(item);
      if (itemURI != null) {
        URI itemResourceURI=getItemResourceURI(itemURI);
        if (metadata400to410 == null) {
          metadata400to410=new TosMetadataMigrationFrom400to410();
        }
        Resource migratedResource=metadata400to410.migrate(itemResourceURI.toString(),new NullProgressMonitor());
        HashMap<String,Object> xmlSaveOtions=XML_SAVE_OTIONS_1_0;
        if (migratedResource != null) {
          EObject content=migratedResource.getContents().get(0);
          if (content != null && "String_Node_Str".equals(content.eClass().getName())) {
            ByteArrayOutputStream tempStream=new ByteArrayOutputStream();
            try {
              try {
                migratedResource.save(tempStream,XML_SAVE_OTIONS_1_0);
              }
 catch (              Exception e) {
                tempStream=new ByteArrayOutputStream();
                xmlSaveOtions=XML_SAVE_OTIONS_1_1;
                migratedResource.save(tempStream,xmlSaveOtions);
              }
 finally {
                tempStream.close();
              }
              migratedResource=resourceSet.createResource(URI.createURI("String_Node_Str"));
              migratedResource.load(new ByteArrayInputStream(tempStream.toByteArray()),xmlSaveOtions);
              DatabaseConnection databaseConnection=SwitchHelpers.DATABASECONNECTION_SWITCH.doSwitch(migratedResource.getContents().get(0));
              String databaseType=databaseConnection.getDatabaseType();
              databaseConnection.setDriverClass(ExtractMetaDataUtils.getInstance().getDriverClassByDbType(databaseType));
              EDatabaseTypeName currentType=EDatabaseTypeName.getTypeFromDbType(databaseType);
              EDatabaseSchemaOrCatalogMapping curCatalog=currentType.getCatalogMappingField();
              EDatabaseSchemaOrCatalogMapping curSchema=currentType.getSchemaMappingField();
              if (!curCatalog.equals(EDatabaseSchemaOrCatalogMapping.None)) {
                List<Schema> schemas=ConnectionHelper.getSchema(databaseConnection);
                if (!curSchema.equals(EDatabaseSchemaOrCatalogMapping.None)) {
                  ConnectionHelper.removeSchemas(schemas,databaseConnection);
                  for (                  Schema schema : schemas) {
                    String schemaName=computeSchemaName(schema,databaseConnection,curSchema);
                    String catalogName=computeCatalogName(databaseConnection,curCatalog);
                    schema.setName(schemaName);
                    Catalog catalog=RelationalFactory.eINSTANCE.createCatalog();
                    migratedResource.getContents().add(catalog);
                    catalog.setName(catalogName);
                    CatalogHelper.addSchemas(Collections.singleton(schema),catalog);
                    ConnectionHelper.addCatalog(catalog,databaseConnection);
                  }
                }
 else {
                  for (                  Schema schema : schemas) {
                    String catalogName=computeCatalogName(databaseConnection,curCatalog);
                    Catalog catalog=RelationalFactory.eINSTANCE.createCatalog();
                    migratedResource.getContents().add(catalog);
                    catalog.setName(catalogName);
                    catalog.getOwnedElement().addAll(schema.getOwnedElement());
                    ConnectionHelper.addCatalog(catalog,databaseConnection);
                    ConnectionHelper.removeSchemas(Collections.singleton(schema),databaseConnection);
                  }
                }
              }
 else               if (!curSchema.equals(EDatabaseSchemaOrCatalogMapping.None)) {
                List<Schema> schemas=ConnectionHelper.getSchema(databaseConnection);
                for (                Schema schema : schemas) {
                  String schemaName=computeSchemaName(schema,databaseConnection,curSchema);
                  schema.setName(schemaName);
                }
              }
            }
 catch (            Exception e) {
              log.error("String_Node_Str" + itemResourceURI.toString(),e);
              ExceptionHandler.process(e);
            }
 finally {
              tempStream.close();
            }
          }
          OutputStream outputStream=item.eResource().getResourceSet().getURIConverter().createOutputStream(itemResourceURI,null);
          try {
            migratedResource.save(outputStream,xmlSaveOtions);
          }
  finally {
            outputStream.close();
          }
        }
        return ExecutionResult.SUCCESS_WITH_ALERT;
      }
    }
 catch (    ATLCoreException e) {
      log.error(e);
      ExceptionHandler.process(e);
      return ExecutionResult.SUCCESS_NO_ALERT;
    }
catch (    IOException e) {
      log.error(e);
      ExceptionHandler.process(e);
      return ExecutionResult.SUCCESS_NO_ALERT;
    }
 finally {
      resourceSet.getResources().clear();
    }
  }
  return ExecutionResult.NOTHING_TO_DO;
}