AbstractSchemaResolver.java 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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.connector.ConnectorInstance;
  7. import org.dbsyncer.sdk.model.Field;
  8. import org.springframework.util.Assert;
  9. import java.util.LinkedHashMap;
  10. import java.util.Map;
  11. /**
  12. * @Author 穿云
  13. * @Version 1.0.0
  14. * @Date 2024-11-26 20:50
  15. */
  16. public abstract class AbstractSchemaResolver implements SchemaResolver {
  17. private final Map<String, DataType> mapping = new LinkedHashMap<>();
  18. private ConnectorInstance connectorInstance;
  19. public AbstractSchemaResolver() {
  20. initDataTypes(mapping);
  21. Assert.notEmpty(mapping, "At least one data type is required.");
  22. }
  23. protected abstract void initDataTypes(Map<String, DataType> mapping);
  24. @Override
  25. public Object merge(Object val, Field field) {
  26. if (mapping.containsKey(field.getTypeName())) {
  27. return mapping.get(field.getTypeName()).mergeValue(val, field);
  28. }
  29. throw new SdkException(String.format("%s does not support type [%s] merge into [%s], val [%s]", getClass().getSimpleName(), val.getClass(), field.getTypeName(), val));
  30. }
  31. @Override
  32. public Object convert(Object val, Field field) {
  33. if (mapping.containsKey(field.getTypeName())) {
  34. return mapping.get(field.getTypeName()).convertValue(val, field);
  35. }
  36. throw new SdkException(String.format("%s does not support type [%s] convert to [%s], val [%s]", getClass().getSimpleName(), val.getClass(), field.getTypeName(), val));
  37. }
  38. public ConnectorInstance getConnectorInstance() {
  39. return connectorInstance;
  40. }
  41. public void setConnectorInstance(ConnectorInstance connectorInstance) {
  42. this.connectorInstance = connectorInstance;
  43. }
  44. }