public static Schema switchNamespace()

in gobblin-utility/src/main/java/org/apache/gobblin/util/AvroUtils.java [748:820]


  public static Schema switchNamespace(Schema schema, Map<String, String> namespaceOverride) {
    Schema newSchema;
    String newNamespace = StringUtils.EMPTY;

    // Process all Schema Types
    // (Primitives are simply cloned)
    switch (schema.getType()) {
      case ENUM:
        newNamespace = namespaceOverride.containsKey(schema.getNamespace()) ? namespaceOverride.get(schema.getNamespace())
            : schema.getNamespace();
        newSchema =
            Schema.createEnum(schema.getName(), schema.getDoc(), newNamespace, schema.getEnumSymbols());
        break;
      case FIXED:
        newNamespace = namespaceOverride.containsKey(schema.getNamespace()) ? namespaceOverride.get(schema.getNamespace())
            : schema.getNamespace();
        newSchema =
            Schema.createFixed(schema.getName(), schema.getDoc(), newNamespace, schema.getFixedSize());
        break;
      case MAP:
        newSchema = Schema.createMap(switchNamespace(schema.getValueType(), namespaceOverride));
        break;
      case RECORD:
        newNamespace = namespaceOverride.containsKey(schema.getNamespace()) ? namespaceOverride.get(schema.getNamespace())
            : schema.getNamespace();
        List<Schema.Field> newFields = new ArrayList<>();
        if (schema.getFields().size() > 0) {
          for (Schema.Field oldField : schema.getFields()) {
            Field newField = AvroCompatibilityHelper.createSchemaField(oldField.name(), switchNamespace(oldField.schema(),
                namespaceOverride), oldField.doc(), getCompatibleDefaultValue(oldField), oldField.order());
            // Copy field level properties
            copyFieldProperties(oldField, newField);
            newFields.add(newField);
          }
        }
        newSchema = Schema.createRecord(schema.getName(), schema.getDoc(), newNamespace,
            schema.isError());
        newSchema.setFields(newFields);
        break;
      case UNION:
        List<Schema> newUnionMembers = new ArrayList<>();
        if (null != schema.getTypes() && schema.getTypes().size() > 0) {
          for (Schema oldUnionMember : schema.getTypes()) {
            newUnionMembers.add(switchNamespace(oldUnionMember, namespaceOverride));
          }
        }
        newSchema = Schema.createUnion(newUnionMembers);
        break;
      case ARRAY:
        newSchema = Schema.createArray(switchNamespace(schema.getElementType(), namespaceOverride));
        break;
      case BOOLEAN:
      case BYTES:
      case DOUBLE:
      case FLOAT:
      case INT:
      case LONG:
      case NULL:
      case STRING:
        newSchema = Schema.create(schema.getType());
        break;
      default:
        String exceptionMessage = String.format("Schema namespace replacement failed for \"%s\" ", schema);
        LOG.error(exceptionMessage);

        throw new AvroRuntimeException(exceptionMessage);
    }

    // Copy schema metadata
    copyProperties(schema, newSchema);

    return newSchema;
  }