AbstractSchemaResolver.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /**
  2. * DBSyncer Copyright 2020-2024 All Rights Reserved.
  3. */
  4. package org.dbsyncer.sdk.schema;
  5. import org.dbsyncer.sdk.SdkException;
  6. import org.dbsyncer.sdk.model.Field;
  7. import org.springframework.util.Assert;
  8. import java.util.LinkedHashMap;
  9. import java.util.Map;
  10. /**
  11. * @Author 穿云
  12. * @Version 1.0.0
  13. * @Date 2024-11-26 20:50
  14. */
  15. public abstract class AbstractSchemaResolver implements SchemaResolver {
  16. private final Map<String, DataType> mapping = new LinkedHashMap<>();
  17. public AbstractSchemaResolver() {
  18. initDataTypeMapping(mapping);
  19. Assert.notEmpty(mapping, "At least one data type is required.");
  20. }
  21. protected abstract void initDataTypeMapping(Map<String, DataType> mapping);
  22. protected DataType getDataType(Map<String, DataType> mapping, Field field) {
  23. return mapping.get(field.getTypeName());
  24. }
  25. @Override
  26. public Object merge(Object val, Field field) {
  27. DataType dataType = getDataType(mapping, field);
  28. if (dataType != null) {
  29. return dataType.mergeValue(val, field);
  30. }
  31. throw new SdkException(String.format("%s does not support type [%s] merge into [%s], val [%s]", getClass().getSimpleName(), val.getClass(), field.getTypeName(), val));
  32. }
  33. @Override
  34. public Object convert(Object val, Field field) {
  35. DataType dataType = getDataType(mapping, field);
  36. if (dataType != null) {
  37. return dataType.convertValue(val, field);
  38. }
  39. throw new SdkException(String.format("%s does not support type [%s] convert to [%s], val [%s]", getClass().getSimpleName(), val.getClass(), field.getTypeName(), val));
  40. }
  41. }