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

com.github.javaclub.cdl.client.matrix.router.single.SingleRoutingDataSource 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.HashSet; import java.util.List; import java.util.Set; import lombok.ToString; import com.github.javaclub.cdl.client.matrix.parser.result.router.SQLBuilder; 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 zhangliang */ @ToString public class SingleRoutingDataSource { private final String groupName; private final List routingTableFactors = new ArrayList<>(); public SingleRoutingDataSource(final String groupName) { this.groupName = groupName; } SingleRoutingDataSource(final String dataSource, final SingleRoutingTableFactor routingTableFactor) { this(dataSource); routingTableFactors.add(routingTableFactor); } Collection getSQLExecutionUnits(final SQLBuilder sqlBuilder) { Collection result = new ArrayList<>(); for (SingleRoutingTableFactor each : routingTableFactors) { each.buildSQL(sqlBuilder); result.add(new SQLExecutionUnit(groupName, sqlBuilder.toSQL())); } return result; } Set getLogicTables() { Set result = new HashSet(routingTableFactors.size()); result.addAll(Lists.transform(routingTableFactors, new Function() { @Override public String apply(final SingleRoutingTableFactor input) { return input.getLogicTable(); } })); return result; } List> getActualTableGroups(final Set logicTables) { List> result = new ArrayList<>(); for (String logicTable : logicTables) { Set actualTables = getActualTables(logicTable); if (!actualTables.isEmpty()) { result.add(actualTables); } } return result; } private Set getActualTables(final String logicTable) { Set result = new HashSet(); for (SingleRoutingTableFactor each : routingTableFactors) { if (each.getLogicTable().equals(logicTable)) { result.add(each.getActualTable()); } } return result; } Optional findRoutingTableFactor(final String actualTable) { for (SingleRoutingTableFactor each : routingTableFactors) { if (each.getActualTable().equals(actualTable)) { return Optional.of(each); } } return Optional.absent(); } public String getGroupName() { return groupName; } public List getRoutingTableFactors() { return routingTableFactors; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy