TableGroupContextImpl.java 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /**
  2. * DBSyncer Copyright 2020-2025 All Rights Reserved.
  3. */
  4. package org.dbsyncer.parser.impl;
  5. import org.dbsyncer.parser.TableGroupContext;
  6. import org.dbsyncer.parser.model.Mapping;
  7. import org.dbsyncer.parser.model.TableGroup;
  8. import org.dbsyncer.parser.model.TableGroupPicker;
  9. import org.dbsyncer.parser.util.PickerUtil;
  10. import org.springframework.stereotype.Component;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. import java.util.Map;
  14. import java.util.concurrent.ConcurrentHashMap;
  15. /**
  16. * @Author 穿云
  17. * @Version 1.0.0
  18. * @Date 2025-01-16 23:34
  19. */
  20. @Component
  21. public final class TableGroupContextImpl implements TableGroupContext {
  22. /**
  23. * 驱动表映射关系
  24. */
  25. private final Map<String, InnerMapping> tableGroupMap = new ConcurrentHashMap<>();
  26. @Override
  27. public void put(Mapping mapping, List<TableGroup> tableGroups) {
  28. tableGroupMap.computeIfAbsent(mapping.getMetaId(), k -> {
  29. InnerMapping innerMap = new InnerMapping();
  30. tableGroups.forEach(tableGroup -> {
  31. String sourceTableName = tableGroup.getSourceTable().getName();
  32. innerMap.add(sourceTableName, PickerUtil.mergeTableGroupConfig(mapping, tableGroup));
  33. });
  34. return innerMap;
  35. });
  36. }
  37. @Override
  38. public List<TableGroupPicker> getTableGroupPickers(String metaId, String tableName) {
  39. List<TableGroupPicker> list = new ArrayList<>();
  40. tableGroupMap.computeIfPresent(metaId, (k, innerMapping) -> {
  41. innerMapping.pickerMap.computeIfPresent(tableName, (x, pickers) -> {
  42. list.addAll(pickers);
  43. return pickers;
  44. });
  45. return innerMapping;
  46. });
  47. return list;
  48. }
  49. @Override
  50. public void clear(String metaId) {
  51. tableGroupMap.remove(metaId);
  52. }
  53. static final class InnerMapping {
  54. Map<String, List<TableGroupPicker>> pickerMap = new ConcurrentHashMap<>();
  55. public void add(String tableName, TableGroup tableGroup) {
  56. pickerMap.computeIfAbsent(tableName, k -> new ArrayList<>()).add(new TableGroupPicker(tableGroup));
  57. }
  58. }
  59. }