All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.javaclub.cdl.client.matrix.router.single.SingleRoutingResult Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 1999-2015 dangdang.com.
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *

*/ package com.github.javaclub.cdl.client.matrix.router.single; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import lombok.Getter; import lombok.ToString; import com.github.javaclub.cdl.client.matrix.parser.result.router.SQLBuilder; import com.github.javaclub.cdl.client.matrix.router.RoutingResult; import com.github.javaclub.cdl.client.matrix.router.SQLExecutionUnit; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.Lists; /** * 单表路由结果. * * @author gaohongtao */ @ToString public class SingleRoutingResult implements RoutingResult { @Getter private final List routingDataSources = new ArrayList<>(); void put(final String groupName, final SingleRoutingTableFactor routingTableFactor) { for (SingleRoutingDataSource each : routingDataSources) { if (each.getGroupName().equals(groupName)) { each.getRoutingTableFactors().add(routingTableFactor); return; } } routingDataSources.add(new SingleRoutingDataSource(groupName, routingTableFactor)); } /** * 根据数据源名称获取数据源和逻辑表名称集合的映射关系. * * @param dataSources 待获取的数据源名称集合 * @return 数据源和逻辑表名称集合的映射关系 */ public Map> getDataSourceLogicTablesMap(final Collection dataSources) { Map> result = new HashMap<>(); for (SingleRoutingDataSource each : routingDataSources) { if (!dataSources.contains(each.getGroupName())) { continue; } Set logicTables = each.getLogicTables(); if (logicTables.isEmpty()) { continue; } if (result.containsKey(each.getGroupName())) { result.get(each.getGroupName()).addAll(logicTables); } else { result.put(each.getGroupName(), logicTables); } } return result; } /** * 获取全部数据源名称. * * @return 数据源名称集合 */ public Collection getDataSources() { return Lists.transform(routingDataSources, new Function() { @Override public String apply(final SingleRoutingDataSource input) { return input.getGroupName(); } }); } /** * 根据数据源和逻辑表名称获取真实表集合组. *

* 每一组的真实表集合都属于同一逻辑表. *

* * @param dataSource 数据源名称 * @param logicTables 逻辑表名称集合 * @return 真实表集合组 */ public List> getActualTableGroups(final String dataSource, final Set logicTables) { Optional routingDataSource = findRoutingDataSource(dataSource); if (!routingDataSource.isPresent()) { return Collections.emptyList(); } return routingDataSource.get().getActualTableGroups(logicTables); } /** * 根据数据源和真实表名称查找路由表单元. * * @param dataSource 数据源名称 * @param actualTable 真实表名称 * @return 查找结果 */ public Optional findRoutingTableFactor(final String dataSource, final String actualTable) { Optional routingDataSource = findRoutingDataSource(dataSource); if (!routingDataSource.isPresent()) { return Optional.absent(); } return routingDataSource.get().findRoutingTableFactor(actualTable); } private Optional findRoutingDataSource(final String dataSource) { for (SingleRoutingDataSource each : routingDataSources) { if (each.getGroupName().equals(dataSource)) { return Optional.of(each); } } return Optional.absent(); } @Override public Collection getSQLExecutionUnits(final SQLBuilder sqlBuilder) { Collection result = new HashSet<>(); for (SingleRoutingDataSource each : routingDataSources) { result.addAll(each.getSQLExecutionUnits(sqlBuilder)); } return result; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy